Exemplo n.º 1
0
        public void ItReturnsAbout119()
        {
            var trolleyTotalRequest = JsonConvert.DeserializeObject <TrolleyTotalRequest>(@"{""Products"":[{""Name"":""Product 0"",""Price"":6.24631655926179},{""Name"":""Product 1"",""Price"":8.77974736680265},{""Name"":""Product 2"",""Price"":2.43343426260791},{""Name"":""Product 3"",""Price"":0.221432021456506},{""Name"":""Product 4"",""Price"":10.9459652639674},{""Name"":""Product 5"",""Price"":7.42980477047609}],""Specials"":[{""Quantities"":[{""Name"":""Product 0"",""Quantity"":4},{""Name"":""Product 1"",""Quantity"":5},{""Name"":""Product 2"",""Quantity"":1},{""Name"":""Product 3"",""Quantity"":9},{""Name"":""Product 4"",""Quantity"":8},{""Name"":""Product 5"",""Quantity"":5}],""Total"":24.105041162944},{""Quantities"":[{""Name"":""Product 0"",""Quantity"":9},{""Name"":""Product 1"",""Quantity"":7},{""Name"":""Product 2"",""Quantity"":9},{""Name"":""Product 3"",""Quantity"":6},{""Name"":""Product 4"",""Quantity"":1},{""Name"":""Product 5"",""Quantity"":7}],""Total"":12.4321490726757},{""Quantities"":[{""Name"":""Product 0"",""Quantity"":7},{""Name"":""Product 1"",""Quantity"":3},{""Name"":""Product 2"",""Quantity"":2},{""Name"":""Product 3"",""Quantity"":4},{""Name"":""Product 4"",""Quantity"":7},{""Name"":""Product 5"",""Quantity"":6}],""Total"":24.6869145355206},{""Quantities"":[{""Name"":""Product 0"",""Quantity"":1},{""Name"":""Product 1"",""Quantity"":8},{""Name"":""Product 2"",""Quantity"":8},{""Name"":""Product 3"",""Quantity"":7},{""Name"":""Product 4"",""Quantity"":1},{""Name"":""Product 5"",""Quantity"":1}],""Total"":14.4725819804986},{""Quantities"":[{""Name"":""Product 0"",""Quantity"":0},{""Name"":""Product 1"",""Quantity"":6},{""Name"":""Product 2"",""Quantity"":5},{""Name"":""Product 3"",""Quantity"":0},{""Name"":""Product 4"",""Quantity"":0},{""Name"":""Product 5"",""Quantity"":2}],""Total"":19.5892991503881},{""Quantities"":[{""Name"":""Product 0"",""Quantity"":9},{""Name"":""Product 1"",""Quantity"":5},{""Name"":""Product 2"",""Quantity"":0},{""Name"":""Product 3"",""Quantity"":9},{""Name"":""Product 4"",""Quantity"":9},{""Name"":""Product 5"",""Quantity"":1}],""Total"":14.6178697281498},{""Quantities"":[{""Name"":""Product 0"",""Quantity"":4},{""Name"":""Product 1"",""Quantity"":8},{""Name"":""Product 2"",""Quantity"":8},{""Name"":""Product 3"",""Quantity"":0},{""Name"":""Product 4"",""Quantity"":3},{""Name"":""Product 5"",""Quantity"":0}],""Total"":15.8639300218439},{""Quantities"":[{""Name"":""Product 0"",""Quantity"":9},{""Name"":""Product 1"",""Quantity"":6},{""Name"":""Product 2"",""Quantity"":3},{""Name"":""Product 3"",""Quantity"":7},{""Name"":""Product 4"",""Quantity"":5},{""Name"":""Product 5"",""Quantity"":9}],""Total"":0.382519387492927}],""Quantities"":[{""Name"":""Product 0"",""Quantity"":3},{""Name"":""Product 1"",""Quantity"":0},{""Name"":""Product 2"",""Quantity"":9},{""Name"":""Product 3"",""Quantity"":4},{""Name"":""Product 4"",""Quantity"":1},{""Name"":""Product 5"",""Quantity"":9}]}");
            ITrolleyCalculator trolleyCalculator = new TrolleyCalculator();
            var result = trolleyCalculator.CalculateTrolleyTotal(trolleyTotalRequest);

            Assert.AreEqual(119.339794325334794m, result);
        }
Exemplo n.º 2
0
        public void ItReturns14()
        {
            var trolleyTotalRequest = JsonConvert.DeserializeObject <TrolleyTotalRequest>(@"{""Products"":[{""Name"":""1"",""Price"":2.0},{""Name"":""2"",""Price"":5.0}],""Specials"":[{""Quantities"":[{""Name"":""1"",""Quantity"":3},{""Name"":""2"",""Quantity"":0}],""Total"":5.0},{""Quantities"":[{""Name"":""1"",""Quantity"":1},{""Name"":""2"",""Quantity"":2}],""Total"":10.0}],""Quantities"":[{""Name"":""1"",""Quantity"":3},{""Name"":""2"",""Quantity"":2}]}");
            ITrolleyCalculator trolleyCalculator = new TrolleyCalculator();
            var result = trolleyCalculator.CalculateTrolleyTotal(trolleyTotalRequest);

            Assert.AreEqual(result, (decimal)14.0);
        }
        public TrolleySpecialValidator(Trolley trolley)
        {
            RuleFor(special => special.Quantities)
            .Must(quantities => quantities.Select(quantity => quantity.Name).IsUnique()).WithMessage("Names must be unique.")
            .ForEach(collection => collection.SetValidator(_ => new TrolleyQuantityValidator(trolley)));

            RuleFor(special => special.Total)
            .GreaterThan(0)
            .LessThan(special => TrolleyCalculator.CalculatePrice(trolley.Products, special.Quantities)).WithMessage("Special must be cheaper than Products full price");
        }
Exemplo n.º 4
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)]
            HttpRequest req, ILogger log)
        {
            string requestBody       = await new StreamReader(req.Body).ReadToEndAsync();
            var    data              = JsonConvert.DeserializeObject <Trolley>(requestBody);
            var    trolleyCalculator = new TrolleyCalculator();

            return((ActionResult) new OkObjectResult(trolleyCalculator.Calculate(data)));
        }
Exemplo n.º 5
0
        public async Task Calculate_Trolley_MinTotalAmount_2()
        {
            var json    = ResourseHelper.GetEmbeddedResourceAsString("TestFiles.trolley2.json");
            var trolley = JsonConvert.DeserializeObject <Trolley>(json);

            var calculator = new TrolleyCalculator();
            var totalValue = await calculator.CalculateAsync(trolley);

            Assert.Equal(14, totalValue);
        }
        public void CalculateLowestTotalTest()
        {
            var trolleys    = JsonConvert.DeserializeObject <List <Trolley> >(File.ReadAllText("TrolleyTestData.json"));
            var calculator1 = new TrolleyCalculator(trolleys[0]);
            var result1     = calculator1.CalculateLowestTotal();
            var calculator2 = new TrolleyCalculator(trolleys[1]);
            var result2     = calculator2.CalculateLowestTotal();

            Assert.Equal(80, result1);
            Assert.Equal(40, result2);
        }
Exemplo n.º 7
0
        public async void Should_Calculate_Complex()
        {
            // Arrange
            var expectedResponse = decimal.Parse("110.21877083471924");
            var request          = CreateComplexTrolleyTotalRequest();
            var sut = new TrolleyCalculator();

            // Act
            var response = await sut.Calculate(request);

            // Assert
            Assert.Equal(expectedResponse, response);
        }
Exemplo n.º 8
0
        public async void Should_Calculate(bool leaveOutAProduct)
        {
            // Arrange
            var expectedResponse = new decimal(14);
            var request          = CreateTrolleyTotalRequest(leaveOutAProduct);
            var sut = new TrolleyCalculator();

            // Act
            var response = await sut.Calculate(request);

            // Assert
            Assert.Equal(expectedResponse, response);
        }
Exemplo n.º 9
0
 public decimal GetTrolleyTotal(Trolley trolley)
 {
     return(TrolleyCalculator.CalculateTrolleyTotal(trolley));
 }