public void ProcessBudget_ShouldIgnoreMultiline()
        {
            MultilineTransactionLine line = TransactionLineBuilder.BuildMultilineTransactionLine();

            line.Add(TransactionLineBuilder.BuildMultilineDetailTransactionLine(-100m, "farmácia", category: "saude"));
            line.Add(TransactionLineBuilder.BuildMultilineDetailTransactionLine(-300m, "supermercado"));

            MultilineTransactionLine line2 = TransactionLineBuilder.BuildMultilineTransactionLine();

            line.Add(TransactionLineBuilder.BuildMultilineDetailTransactionLine(-300m, "farmácia", category: "saude"));
            line.Add(TransactionLineBuilder.BuildMultilineDetailTransactionLine(-500m, "supermercado"));

            ExecutedMultilineTransactionLine executedLine = line2.Consolidate(
                TransactionLineBuilder.BuildExecutedCreditcardTransactionLine(-1_000m));

            List <TransactionLine> lines = TransactionLineBuilder.BuildList()
                                           .Add(-300m, "Eletropaulo", day: 14)
                                           .Add(-500m, "Faculdade", day: 18, category: "Educação")
                                           .Add(line)
                                           .Add(executedLine)
                                           .Add(-800m, "Aluguel", day: 22)
                                           .Build();

            MontlyBudget budget = new MontlyBudget(TransactionLineBuilder.DefaultCategory, 2_000m, 15);

            MontlyBudget processedBudget = budget.Process(lines);

            Assert.Equal(1_100m, processedBudget.Used);
            Assert.Equal(900m, processedBudget.Available);
        }
        public IActionResult AddBudget(BudgetDto budget)
        {
            var recurrence = new MontlyBudget(
                budget.Category,
                budget.Amount,
                budget.Day);

            montlyBudgetRepository.Add(recurrence);

            return(Ok());
        }
        public IActionResult UpdateBudget(BudgetDto dto)
        {
            MontlyBudget budget =
                dto.Id == 0
                ? montlyBudgetRepository.GetByCategory(dto.Category)
                : montlyBudgetRepository.GetById(dto.Id);

            budget.Category     = dto.Category;
            budget.Available    = dto.Amount;
            budget.ExecutionDay = dto.Day;

            return(Ok());
        }
        public void BudgetShouldNotBeNegative()
        {
            List <TransactionLine> lines = TransactionLineBuilder.BuildList()
                                           .Add(-1_500m, "Eletropaulo", day: 14)
                                           .Add(-800m, "Faculdade", day: 18, category: "Educação")
                                           .Add(-1_000m, "Aluguel", day: 22)
                                           .Build();

            MontlyBudget budget = new MontlyBudget(TransactionLineBuilder.DefaultCategory, 2_000m, 15);

            MontlyBudget processedBudget = budget.Process(lines);

            Assert.Equal(0m, budget.Used);
            Assert.Equal(2_000m, budget.Available);

            Assert.Equal(2_500, processedBudget.Used);
            Assert.Equal(0m, processedBudget.Available);
        }