public ActionResult Uod(UodModel model) { if (ModelState.IsValid) { UodSummary uodSummary = _calcService.CalculateIncome(model.BruttoAmountPerMonth, model.Limit); model.CurrentSummary = _mapper.Map <UodSummaryModel>(uodSummary); var summariesFromSession = _sessionService.GetFromSession <List <UodSummaryModel> >(SessionItem.Uod); if (summariesFromSession == null) { summariesFromSession = new List <UodSummaryModel>() { model.CurrentSummary }; _sessionService.AddToSession(SessionItem.Uod, summariesFromSession); } else if (!summariesFromSession.Exists(x => Convert.ToDecimal(x.Brutto) == model.BruttoAmountPerMonth)) { summariesFromSession.Add(model.CurrentSummary); } model.SavedSummaries = summariesFromSession; return(View(model)); } else { return(RedirectToAction(nameof(Uod))); } }
public void UodHttpPost() { // Arrange UodModel inputModel = new UodModel() { BruttoAmountPerMonth = 10000, Limit = 42764 }; UodSummary expectedSummary = new UodSummary() { Brutto = inputModel.BruttoAmountPerMonth, NettoAmounts = new Dictionary <string, decimal>() { { "styczeń", 4000 } } }; UodSummaryModel expectedSummaryModel = new UodSummaryModel() { Brutto = expectedSummary.Brutto.ToString() }; List <UodSummaryModel> expectedSummaries = new List <UodSummaryModel>() { new UodSummaryModel() { Average = "1000", Brutto = "15000" } }; _calcMock.Setup(x => x.CalculateIncome(inputModel.BruttoAmountPerMonth, inputModel.Limit)) .Returns(expectedSummary); _mapperMock.Setup(x => x.Map <UodSummaryModel>(expectedSummary)) .Returns(expectedSummaryModel); _sessionMock.Setup(x => x.GetFromSession <List <UodSummaryModel> >(SessionItem.Uod)) .Returns(expectedSummaries); // Act ActionResult result = _controller.Uod(inputModel); // Assert _calcMock.Verify(x => x.CalculateIncome(inputModel.BruttoAmountPerMonth, inputModel.Limit), Times.Once); _sessionMock.Verify(x => x.GetFromSession <List <UodSummaryModel> >(SessionItem.Uod), Times.Once); _mapperMock.Verify(x => x.Map <UodSummaryModel>(expectedSummary), Times.Once); result.Should().NotBeNull().And.BeOfType <ViewResult>(); ViewResult viewResult = result as ViewResult; viewResult.Model.Should().NotBeNull().And.BeOfType <UodModel>(); var model = viewResult.Model as UodModel; model.BruttoAmountPerMonth.Should().BeGreaterThan(0); model.Limit.Should().BeGreaterThan(0); model.SavedSummaries.Should().Equal(expectedSummaries); model.CurrentSummary.Should().NotBeNull().And.Be(expectedSummaryModel); }
public UodSummary CalculateIncome(decimal bruttoPerMonth, decimal limit) { UodSummary summary = new UodSummary(); _log.Debug($"[{nameof(CalculateIncome)}] Calculating for brutto = '{bruttoPerMonth}' and limit = '{limit}'"); decimal sumBrutto = 0; decimal nettoPerMonth = 0; decimal multiplier = 0; bool isLower = false; Dictionary <string, decimal> amounts = new Dictionary <string, decimal>(); for (int i = 1; i <= 12; i++) { sumBrutto = sumBrutto + bruttoPerMonth; if (sumBrutto > limit * 2 && isLower == false) { decimal newPartialBrutto = sumBrutto - limit * 2; // 90000 - 85528 = 4472 decimal newPartialNetto = newPartialBrutto * 0.82M; decimal oldPartialBrutto = bruttoPerMonth - newPartialBrutto; decimal oldPartialNetto = oldPartialBrutto * 0.91M; nettoPerMonth = Math.Round(newPartialNetto + oldPartialNetto); isLower = true; } else { multiplier = isLower ? 0.82M : 0.91M; nettoPerMonth = bruttoPerMonth * multiplier; } amounts.Add(i.GetMonthName(), nettoPerMonth); } summary.NettoAmounts = amounts; summary.Brutto = bruttoPerMonth; return(summary); }