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); }
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"); }
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))); }
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); }
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); }
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); }
public decimal GetTrolleyTotal(Trolley trolley) { return(TrolleyCalculator.CalculateTrolleyTotal(trolley)); }