Ejemplo n.º 1
0
        public Budget CreateBudget(BudgetRequest request)
        {
            string loggedUser = _httpContextAccessor.HttpContext.User.FindFirstValue("userId");

            LocalDate newStartDate = LocalDate.FromDateTime((DateTime)request.StartDate);
            LocalDate newEndDate   = LocalDate.FromDateTime((DateTime)request.EndDate);


            List <Budget> foundBudgets = dbContext.Budgets.Where(b =>
                                                                 (b.StartDate.CompareTo(newStartDate) < 0 && b.EndDate.CompareTo(newStartDate) > 0) ||
                                                                 (b.StartDate.CompareTo(newEndDate) < 0 && b.EndDate.CompareTo(newStartDate) > 0))
                                         .ToList();

            if (foundBudgets.Count > 0)
            {
                throw new SkrillaApiException("conflict", "There is a budget for that time period already");
            }


            Budget budget = new Budget(
                LocalDate.FromDateTime((DateTime)request.StartDate),
                LocalDate.FromDateTime((DateTime)request.EndDate),
                request.Amount,
                loggedUser);

            dbContext.Add(budget);

            List <int> categoryIds = request.BudgetItems.Select(i => i.category).ToList();

            List <Category> categories = dbContext.Categories
                                         .Where(s => s.PersonId.Equals(loggedUser))
                                         .ToList();

            if (categories == null)
            {
                throw new SkrillaApiException("not_found",
                                              "One or more categories were not found.");
            }

            categories.ForEach(category =>
            {
                BudgetItem item = new BudgetItem(budget,
                                                 category,
                                                 0);
                dbContext.Add(item);
            });

            request.BudgetItems.ForEach(i =>
            {
                BudgetItem item = budget.BudgetItems.Where(bi => i.category.Equals(bi.Category.CategoryId)).FirstOrDefault();
                if (item != null)
                {
                    item.BudgetedAmount = i.amount;
                }
            });

            dbContext.SaveChanges();

            return(budget);
        }
Ejemplo n.º 2
0
        public void BudgetIsCreatedSuccessfully()
        {
            LocalDate start = new LocalDate(2019, 05, 20);
            LocalDate end   = new LocalDate(2029, 05, 20);

            Budget budget = new Budget(start, end, 123.5, "examplePerson");


            context.Add(budget);
            context.SaveChanges();

            int budgetId = budget.BudgetId;

            Budget foundBudget = context.Budgets
                                 .Where(b => b.BudgetId == budgetId).
                                 FirstOrDefault();


            Assert.NotNull(foundBudget);
            Assert.Equal(budget, foundBudget);

            BudgetItem item1 = new BudgetItem(budget, category, 12.5);
            BudgetItem item2 = new BudgetItem(budget, category, 24.3);

            context.Add(item1);
            context.Add(item2);
            context.SaveChanges();

            foundBudget = context.Budgets
                          .Where(b => b.BudgetId == budgetId).
                          FirstOrDefault();

            Assert.Equal(2, foundBudget.BudgetItems.Count);
        }
Ejemplo n.º 3
0
        public void BudgetItemIsCreatedSuccessfully()
        {
            LocalDate start = new LocalDate(2019, 05, 20);
            LocalDate end   = new LocalDate(2029, 05, 20);

            Budget budget = new Budget(start, end, 23.5, "examplePerson");


            context.Add(budget);
            context.SaveChanges();

            Budget foundBudget = context.Budgets
                                 .Where(b => b.BudgetId == budget.BudgetId).
                                 FirstOrDefault();


            Assert.NotNull(foundBudget);

            BudgetItem item1 = new BudgetItem(budget, category, 12.5);

            context.Add(item1);
            context.SaveChanges();

            int itemId = item1.BudgetItemId;

            BudgetItem foundBudgetItem = context.BudgetItems
                                         .Where(b => b.BudgetItemId == itemId).
                                         FirstOrDefault();

            Assert.NotNull(foundBudgetItem);
            Assert.Equal("ExampleCategory", foundBudgetItem.Category.Name);
            Assert.Equal(12.5, foundBudgetItem.BudgetedAmount);
        }
Ejemplo n.º 4
0
        public BudgetControllerTest()
        {
            ContextOptions = new DbContextOptionsBuilder <SkrillaDbContext>()
                             .UseSqlite(CreateInMemoryDatabase())
                             .Options;

            _connection = RelationalOptionsExtension.Extract(ContextOptions).Connection;

            dbContext = new SkrillaDbContext(ContextOptions);
            dbContext.Database.EnsureDeleted();
            dbContext.Database.EnsureCreated();

            category  = new Category("ExampleCategory", false, "mockUser", "exampleIcon");
            category2 = new Category("ExampleCategory2", false, "mockUser", "exampleIcon");

            dbContext.Add(category);
            dbContext.Add(category2);
            dbContext.SaveChanges();

            List <BudgetItemRequest> budgetItems = new List <BudgetItemRequest>
            {
                new BudgetItemRequest
                {
                    category = category.CategoryId,
                    amount   = 23.5
                },

                new BudgetItemRequest
                {
                    category = category2.CategoryId,
                    amount   = 101.5
                }
            };

            budgetRequest = new BudgetRequest
            {
                StartDate   = new DateTime(2019, 05, 06),
                EndDate     = new DateTime(2030, 04, 17),
                Amount      = 123.5,
                BudgetItems = budgetItems
            };

            var budgetLoggerMock     = new Mock <ILogger <BudgetService> >();
            var controllerLoggerMock = new Mock <ILogger <BudgetController> >();

            budgetService = new BudgetService(budgetLoggerMock.Object,
                                              dbContext,
                                              GetMockHttpAccesor());

            controller = new BudgetController(controllerLoggerMock.Object, budgetService);

            controller.ControllerContext = new ControllerContext
            {
                HttpContext = new DefaultHttpContext
                {
                    User = principal
                }
            };
        }
Ejemplo n.º 5
0
        public void ConsumptionInstanceCreationFailsDueToNullTitle()
        {
            Consumption invalidConsumption = new Consumption(null, 10.23,
                                                             category, "1-abc", new LocalDate(2020, 05, 21));

            Assert.Throws <DbUpdateException>(() => {
                context.Add(invalidConsumption);
                context.SaveChanges();
            });
        }
Ejemplo n.º 6
0
        public Consumption CreateConsumption(ConsumptionRequest request)
        {
            string   loggedUser = _httpContextAccessor.HttpContext.User.FindFirstValue("userId");
            Category category   = GetOrCreateCategory(request.Category, request.CategoryIcon);

            Consumption consumption = new Consumption(request.Title,
                                                      request.Amount,
                                                      category,
                                                      loggedUser,
                                                      LocalDate.FromDateTime(request.Date));

            dbContext.Add(consumption);
            dbContext.SaveChanges();
            return(consumption);
        }
Ejemplo n.º 7
0
        public ConsumptionServiceTest()
        {
            ContextOptions = new DbContextOptionsBuilder <SkrillaDbContext>()
                             .UseSqlite(CreateInMemoryDatabase())
                             .Options;

            _connection = RelationalOptionsExtension.Extract(ContextOptions).Connection;

            dbContext = new SkrillaDbContext(ContextOptions);
            dbContext.Database.EnsureDeleted();
            dbContext.Database.EnsureCreated();

            consumptionRequest = new ConsumptionRequest
            {
                Title    = "Example",
                Amount   = 123.4,
                Category = "ExampleCategory",
                Date     = new DateTime(2020, 05, 12)
            };

            category = new Category("ExampleCategory", false, "mockUser", "exampleIcon");
            dbContext.Add(category);
            dbContext.SaveChanges();

            var loggerMock = new Mock <ILogger <ConsumptionService> >();

            this.consumptionService = new ConsumptionService(loggerMock.Object, dbContext, GetMockHttpAccesor());
        }
Ejemplo n.º 8
0
        public Category CreateCategory(CategoryRequest request)
        {
            string loggedUser = _httpContextAccessor.HttpContext.User.FindFirstValue("userId");

            List <Category> categories = dbContext
                                         .Categories
                                         .Where(s => s.Name == request.Name && s.PersonId.Equals(loggedUser))
                                         .ToList <Category>();

            Category aCategory;

            if (categories.Count == 0)
            {
                aCategory = new Category(
                    request.Name,
                    request.Nonedit,
                    loggedUser,
                    request.Icon);

                dbContext.Add(aCategory);
                dbContext.SaveChanges();
            }
            else
            {
                aCategory = categories.First <Category>();
            }


            return(aCategory);
        }
Ejemplo n.º 9
0
        public BudgetTest()
        {
            ContextOptions = new DbContextOptionsBuilder <SkrillaDbContext>()
                             .UseSqlite(CreateInMemoryDatabase())
                             .Options;
            _connection = RelationalOptionsExtension.Extract(ContextOptions).Connection;
            context     = new SkrillaDbContext(ContextOptions);
            context.Database.EnsureDeleted();
            context.Database.EnsureCreated();

            context.Add(category);
            context.SaveChanges();
        }
Ejemplo n.º 10
0
 public ConsumptionTest()
 {
     ContextOptions = new DbContextOptionsBuilder <SkrillaDbContext>()
                      .UseSqlite(CreateInMemoryDatabase())
                      .Options;
     _connection = RelationalOptionsExtension.Extract(ContextOptions).Connection;
     context     = new SkrillaDbContext(ContextOptions);
     context.Database.EnsureDeleted();
     context.Database.EnsureCreated();
     category = new Category("Otros", false, "exmapleUser", "exampleIcon");
     context.Add(category);
     context.SaveChanges();
 }
Ejemplo n.º 11
0
        public void GetBudgetSummaryIsSuccessful()
        {
            Budget budget = budgetService.CreateBudget(budgetRequest);

            Category category3 = new Category("ExampleCategory3", false, "mockUser", "exampleIcon");
            Category category4 = new Category("ExampleCategory4", false, "mockUser", "exampleIcon");

            dbContext.Add(category3);
            dbContext.Add(category4);

            int id = budget.BudgetId;

            budget = dbContext.Budgets.Where(b => b.BudgetId == id).FirstOrDefault();
            Assert.NotNull(budget);

            budget = budgetService.GetCurrentBudget();
            Consumption consumption_a = new Consumption("ExampleA", 50.5, category, "mockUser", new LocalDate(2020, 03, 21));
            Consumption consumption_b = new Consumption("ExampleB", 95.3, category2, "mockUser", new LocalDate(2019, 10, 21));
            Consumption consumption_c = new Consumption("ExampleC", 45.6, category, "mockUser", new LocalDate(2016, 05, 21));
            Consumption consumption_d = new Consumption("ExampleD", 46.6, category3, "mockUser", new LocalDate(2020, 01, 21));

            dbContext.Add(consumption_a);
            dbContext.Add(consumption_b);
            dbContext.Add(consumption_c);
            dbContext.Add(consumption_d);

            dbContext.SaveChanges();

            BudgetSummary summary = budgetService.GetBudgetSummary();

            Assert.Equal(192.4, summary.TotalSpent);
            Assert.Equal(budget.Amount, summary.Amount);
            Assert.Equal(4, summary.CategoryItems.Count);
            Assert.Contains(23.5, summary.CategoryItems.Select(c => c.BudgetedAmount));
            Assert.Contains(50.5, summary.CategoryItems.Select(c => c.TotalSpent));
            Assert.Contains(101.5, summary.CategoryItems.Select(c => c.BudgetedAmount));
            Assert.Contains(95.3, summary.CategoryItems.Select(c => c.TotalSpent));
            Assert.Contains(46.6, summary.CategoryItems.Select(c => c.TotalSpent));
        }
Ejemplo n.º 12
0
 private void SetUpConsumption()
 {
     consumption = new Consumption("TestConsumption", 123.78, category, "mockUser", new LocalDate(2020, 06, 5));
     dbContext.Add(consumption);
     dbContext.SaveChanges();
 }