Exemple #1
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());
        }
Exemple #2
0
        public void ConsumptionModificationIsSuccessful()
        {
            SetUpConsumption();
            Assert.NotNull(consumption);

            int id = consumption.Id;

            ConsumptionRequest modificationRequest = new ConsumptionRequest
            {
                Title    = "Example2",
                Amount   = 103.4,
                Category = "DifferentCategory",
                Date     = new DateTime(2019, 04, 24)
            };

            consumptionService.ModifyConsumption(modificationRequest, id);

            Consumption foundConsumption = dbContext.Consumptions
                                           .Where(c => c.Id == id).FirstOrDefault <Consumption>();


            Assert.Equal("DifferentCategory", foundConsumption.Category.Name);
            Assert.Equal(103.4, foundConsumption.Amount);
            Assert.Equal("Example2", foundConsumption.Title);
            Assert.Equal(2019, foundConsumption.Date.Year);
            Assert.Equal(04, foundConsumption.Date.Month);
            Assert.Equal(24, foundConsumption.Date.Day);

            dbContext.Remove(consumption);
        }
Exemple #3
0
 private void UpdateValues(Consumption consumption, ConsumptionRequest request)
 {
     consumption.Title    = request.Title;
     consumption.Amount   = request.Amount;
     consumption.Category = GetOrCreateCategory(request.Category, request.CategoryIcon);
     consumption.Date     = LocalDate.FromDateTime(request.Date);
 }
Exemple #4
0
        /// <summary>
        ///     Consumes the specified instance.
        /// </summary>
        /// <param name="instance">The instance.</param>
        /// <param name="request">The request.</param>
        /// <returns>ConsumptionResult.</returns>
        public override ConsumptionResult Consume(object instance, ConsumptionRequest request)
        {
            var index = request.Info.Current.IndexOf(Separator, StringComparison.Ordinal);
            var value = request.Info.Current.Substring(index + 1);

            ConsumeCallback(instance, new[] { value });
            return(new ConsumptionResult(request.Info, 1, this));
        }
Exemple #5
0
        public void ConsumptionRequestCreatedSuccessfully()
        {
            ConsumptionRequest request = new ConsumptionRequest();

            request.Title    = "Example";
            request.Category = "Otros";
            request.Amount   = 234.5;
            request.Date     = new DateTime(2020, 5, 7);

            Assert.NotNull(request);
            Assert.Equal(234.5, request.Amount);
            Assert.Equal("Otros", request.Category);
            Assert.Equal("Example", request.Title);
        }
Exemple #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);
        }
        public void Consume_Only_The_Maximum_Allowed_From_The_Request()
        {
            // arrange
            var list    = new List <string[]>();
            var sw      = new ValuesSwitch(new Parser("a"), 'v', "values", (o, strings) => list.Add(strings));
            var info    = new IterationInfo("-v v0 v1 v2 v3 -s".Split(' '), 0);
            var request = new ConsumptionRequest(info, 3);

            // act
            var result = sw.Consume(new object(), request);

            // assert
            list.Should().HaveCount(1);
            list[0].Should().BeEquivalentTo("v0 v1".Split(' '));
            result.NumConsumed.Should().Be(3);
        }
        public void Identify_When_There_Is_A_Next_Arg()
        {
            // arrange
            var info0 = new IterationInfo("".Split(' '), 0);
            var info1 = new IterationInfo("-h".Split(' '), 0);
            var info2 = new IterationInfo("-v something".Split(' '), 0);
            var req0  = new ConsumptionRequest(info0, 1);
            var req1  = new ConsumptionRequest(info1, 1);
            var req2  = new ConsumptionRequest(info2, 1);
            var req3  = new ConsumptionRequest(info2, 2);

            // act
            // assert
            req0.HasNext().Should().BeFalse();
            req1.HasNext().Should().BeFalse();
            req2.HasNext().Should().BeFalse();
            req3.HasNext().Should().BeTrue();
        }
        public void Not_Throw_If_Not_Given_Enough_Args_But_Return_Them_In_The_Result()
        {
            // arrange
            var list = new List <string[]>();
            var sw   = new ValuesSwitch(new Parser("a"), 'v', "values", (o, strings) => list.Add(strings))
            {
                MinRequired = 5
            };
            var info                     = new IterationInfo("-v v0 v1 v2 v3 -s".Split(' '), 0);
            var request                  = new ConsumptionRequest(info, 3);
            ConsumptionResult res        = null;
            Action            mightThrow = () => res = sw.Consume(new object(), request);

            // act
            // assert
            mightThrow.Should().NotThrow();
            res.ParseExceptions.Should().HaveCount(1).And.Subject.Single().Should().BeOfType <MissingValueException>();
        }
Exemple #10
0
        public Consumption ModifyConsumption(ConsumptionRequest consumptionRequest, int id)
        {
            string loggedUser = _httpContextAccessor.HttpContext.User.FindFirstValue("userId");

            Consumption consumption = dbContext
                                      .Consumptions
                                      .Where(s => s.Id == id && s.PersonId.Equals(loggedUser))
                                      .Include(c => c.Category).FirstOrDefault();

            if (consumption == null)
            {
                _logger.LogDebug("Consumption not found: " + id + " for user: "******"not_found", "Consumption not found");
            }

            UpdateValues(consumption, consumptionRequest);
            dbContext.SaveChanges();
            return(consumption);
        }
        public void Return_The_Current_Item_And_All_SubSequent_Items()
        {
            // arrange
            var info0 = new IterationInfo("".Split(' '), 0);
            var info1 = new IterationInfo("-h".Split(' '), 0);
            var info2 = new IterationInfo("-v something".Split(' '), 0);
            var info3 = new IterationInfo("a b c d e".Split(' '), 0);
            var req0  = new ConsumptionRequest(info0, 1);
            var req1  = new ConsumptionRequest(info1, 1);
            var req2  = new ConsumptionRequest(info2, 1);
            var req3  = new ConsumptionRequest(info2, 2);
            var req4  = new ConsumptionRequest(info3, 3);

            // act
            // assert
            req0.AllToBeConsumed().Should().BeEquivalentTo("".Split(' '));
            req1.AllToBeConsumed().Should().BeEquivalentTo("-h".Split(' '));
            req2.AllToBeConsumed().Should().BeEquivalentTo("-v".Split(' '));
            req3.AllToBeConsumed().Should().BeEquivalentTo("-v something".Split(' '));
            req4.AllToBeConsumed().Should().BeEquivalentTo("a b c".Split(' '));
        }
Exemple #12
0
        public ActionResult <Consumption> Post(ConsumptionRequest request)
        {
            string loggedUser = User.FindFirstValue("userId");

            if (loggedUser == null)
            {
                return(Unauthorized());
            }

            ValidationResult result = validator.Validate(request);

            if (!result.IsValid)
            {
                return(BadRequest(new ValidationSummary(result)));
            }

            try
            {
                Consumption consumption = consumptionService.CreateConsumption(request);

                if (consumption == null)
                {
                    return(StatusCode(500));
                }

                return(CreatedAtAction(nameof(Get), null, consumption));
            }
            catch (SkrillaApiException e)
            {
                if ("not_found".Equals(e.Code))
                {
                    return(NotFound());
                }
                else
                {
                    return(BadRequest(e.Message));
                }
            }
        }
        public void Return_The_Last_Item()
        {
            // arrange
            var    info0      = new IterationInfo(new string[0], 0);
            var    info1      = new IterationInfo("-h".Split(' '), 0);
            var    info2      = new IterationInfo("-v something".Split(' '), 0);
            var    info3      = new IterationInfo("a b c d e".Split(' '), 0);
            var    req0       = new ConsumptionRequest(info0, 1);
            var    req1       = new ConsumptionRequest(info1, 1);
            var    req2       = new ConsumptionRequest(info2, 1);
            var    req3       = new ConsumptionRequest(info2, 2);
            var    req4       = new ConsumptionRequest(info3, 3);
            Action mightThrow = () => req0.Last();

            // act
            // assert
            mightThrow.Should().Throw <ArgumentOutOfRangeException>();
            req1.Last().Should().Be("-h");
            req2.Last().Should().Be("-v");
            req3.Last().Should().Be("something");
            req4.Last().Should().Be("c");
        }
Exemple #14
0
        public ActionResult <Consumption> ModifyConsumption(int id, ConsumptionRequest request)
        {
            string loggedUser = User.FindFirstValue("userId");

            if (loggedUser == null)
            {
                return(Unauthorized());
            }

            ValidationResult result = validator.Validate(request);

            if (!result.IsValid)
            {
                return(BadRequest(new ValidationSummary(result)));
            }

            Consumption updatedConsumption = null;

            try
            {
                updatedConsumption = consumptionService
                                     .ModifyConsumption(request, id);
            }
            catch (SkrillaApiException e)
            {
                if (e.Code == "404")
                {
                    return(NotFound());
                }
                else
                {
                    return(BadRequest(e.Message));
                }
            }

            return(Ok(updatedConsumption));
        }
Exemple #15
0
        public void CreateConsumptionReturnsCreatedConsumption()
        {
            ConsumptionRequest request = new ConsumptionRequest
            {
                Title    = "Example1",
                Amount   = 345.6,
                Category = "ExampleCategory",
                Date     = new DateTime(2020, 04, 15)
            };


            var result = controller.Post(request);

            Assert.NotNull(result);
            var resultObject       = result.Result as ObjectResult;
            var createdConsumption = (Consumption)resultObject.Value;

            Assert.IsType <CreatedAtActionResult>(resultObject);
            Assert.Equal("Example1", createdConsumption.Title);
            Assert.Equal(345.6, createdConsumption.Amount);
            Assert.Equal(2020, createdConsumption.Date.Year);
            Assert.Equal(14, createdConsumption.Date.Day);
            Assert.Equal(4, createdConsumption.Date.Month);
        }
Exemple #16
0
 public ConsumptionValidatorTest()
 {
     request = new ConsumptionRequest();
     validator = new ConsumptionValidation();
 }