public async Task Test_FundBalanceIs0_WhenBudgetCreated() { Budget createdBudget = null; Budget rootBudget = this.buildersAndFactories.BudgetBuilder.Build(); decimal expectedFundBalance = 0; Mock <IUnitOfWork> unitOfWork = new Mock <IUnitOfWork>(); Mock <IRepository <Budget> > budgetRepo = new Mock <IRepository <Budget> >(); UserFactory userFactory = this.buildersAndFactories.GetService <UserFactory>(); IIncludableQuerySet <Budget> budgets = new InMemoryIncludableQuerySet <Budget>(new List <Budget>() { rootBudget }); budgetRepo.Setup(r => r.GetAll()).Returns(budgets); budgetRepo.Setup(r => r.Add(It.IsAny <Budget>())).Callback((Budget budget) => { createdBudget = budget; }); unitOfWork.Setup(u => u.SaveChangesAsync()).Returns(Task.CompletedTask); unitOfWork.Setup(u => u.GetRepository <Budget>()).Returns(budgetRepo.Object); CreateBudgetCommand command = new CreateBudgetCommand(unitOfWork.Object, rootBudget.Id, "", 12); await command.Run(); Assert.Equal(expectedFundBalance, createdBudget.Fund.FundBalance); }
public async Task Test_ThrowsInvalidOperation_WhenUserIsNotOwner() { Mock <IUnitOfWork> unitOfWork = new Mock <IUnitOfWork>(); Mock <IRepository <Budget> > budgetRepo = new Mock <IRepository <Budget> >(); UserFactory userFactory = this.buildersAndFactories.GetService <UserFactory>(); Guid correctUserId = Guid.NewGuid(); Guid wrongUserId = Guid.NewGuid(); User wrongUser = userFactory.NewUser(wrongUserId); Budget rootBudget = this.buildersAndFactories.BudgetBuilder .SetFund(f => f.SetOwner(correctUserId)) .Build(); IIncludableQuerySet <Budget> budgets = new InMemoryIncludableQuerySet <Budget>(new List <Budget>() { rootBudget }); budgetRepo.Setup(r => r.GetAll()).Returns(budgets); unitOfWork.Setup(u => u.SaveChangesAsync()).Returns(Task.CompletedTask); unitOfWork.Setup(u => u.GetRepository <Budget>()).Returns(budgetRepo.Object); EditRootBudgetCommand command = new EditRootBudgetCommand(unitOfWork.Object, rootBudget.Id, wrongUser, "Test", null); await Assert.ThrowsAsync <InvalidOperationException>(() => command.Run()); }
public async Task Test_ExceptionThrown_WhenRemoveCommandCalled_ByUserThatDoesntOwnIt() { Mock <IUnitOfWork> unitOfWork = new Mock <IUnitOfWork>(); Mock <IRepository <Budget> > budgetRepo = new Mock <IRepository <Budget> >(); UserFactory userFactory = this.buildersAndFactories.GetService <UserFactory>(); Budget rootBudget = this.buildersAndFactories.BudgetBuilder.Build(); User unauthorizedUser = userFactory.NewUser(); IIncludableQuerySet <Budget> budgets = new InMemoryIncludableQuerySet <Budget>(new List <Budget>() { rootBudget }); budgetRepo.Setup(r => r.GetAll()).Returns(budgets); unitOfWork.Setup(u => u.SaveChangesAsync()).Returns(Task.CompletedTask); unitOfWork.Setup(u => u.GetRepository <Budget>()).Returns(budgetRepo.Object); RemoveBudgetCommand command = new RemoveBudgetCommand(unitOfWork.Object, rootBudget.Id, unauthorizedUser); await Assert.ThrowsAsync <InvalidOperationException>(() => command.Run()); }
public async Task Test_BudgetNoLongerExists_WhenRemoveCommandCalled() { Mock <IUnitOfWork> unitOfWork = new Mock <IUnitOfWork>(); Mock <IRepository <Budget> > budgetRepo = new Mock <IRepository <Budget> >(); UserFactory userFactory = this.buildersAndFactories.GetService <UserFactory>(); Budget rootBudget = this.buildersAndFactories.BudgetBuilder.Build(); User user = userFactory.NewUser(rootBudget.Fund.UserId); IIncludableQuerySet <Budget> budgets = new InMemoryIncludableQuerySet <Budget>(new List <Budget>() { rootBudget }); budgetRepo.Setup(r => r.GetAll()).Returns(budgets); unitOfWork.Setup(u => u.SaveChangesAsync()).Returns(Task.CompletedTask); unitOfWork.Setup(u => u.GetRepository <Budget>()).Returns(budgetRepo.Object); RemoveBudgetCommand command = new RemoveBudgetCommand(unitOfWork.Object, rootBudget.Id, user); await command.Run(); budgetRepo.Verify(r => r.Remove(rootBudget), Times.Once); }
public async Task Test_SetAmountIsCorrect_WhenAmountChanged() { Mock <IUnitOfWork> unitOfWork = new Mock <IUnitOfWork>(); Mock <IRepository <Budget> > budgetRepo = new Mock <IRepository <Budget> >(); UserFactory userFactory = this.buildersAndFactories.GetService <UserFactory>(); decimal expectedAmount = (decimal)5.67; Budget rootBudget = this.buildersAndFactories.BudgetBuilder.SetFixedAmount(4).Build(); User user = userFactory.NewUser(rootBudget.Fund.UserId); IIncludableQuerySet <Budget> budgets = new InMemoryIncludableQuerySet <Budget>(new List <Budget>() { rootBudget }); budgetRepo.Setup(r => r.GetAll()).Returns(budgets); unitOfWork.Setup(u => u.SaveChangesAsync()).Returns(Task.CompletedTask); unitOfWork.Setup(u => u.GetRepository <Budget>()).Returns(budgetRepo.Object); EditRootBudgetCommand command = new EditRootBudgetCommand(unitOfWork.Object, rootBudget.Id, user, null, expectedAmount); await command.Run(); Assert.Equal(expectedAmount, rootBudget.SetAmount); }