Exemple #1
0
        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);
        }