public void CalculateNetSalary_ShouldReturnNetSalaryWithIncomeTaxAndMaxSocialContributionsTax_IfGrossSalaryIsAboveMaxGrossSalary() { //Arrange double grossSalaryAboveMax = GlobalConstants.MaxGrossSalaryForSocialContributions + 1; double incomeTax = (grossSalaryAboveMax - GlobalConstants.MinGrossSalary) * GlobalConstants.IncomeTaxPercent / 100; var mockedIncomeTaxCalculator = new Mock <IIncomeTaxCalculator>(); mockedIncomeTaxCalculator.Setup(x => x.CalculateIncomeTax(grossSalaryAboveMax)).Returns(incomeTax); double socialContributions = (GlobalConstants.MaxGrossSalaryForSocialContributions - GlobalConstants.MinGrossSalary) * GlobalConstants.SocialContributionsPercent / 100; var mockedSocialContributionsCalculator = new Mock <ISocialContributionsCalculator>(); mockedSocialContributionsCalculator.Setup(x => x.CalculateSocialContributions(grossSalaryAboveMax)).Returns(socialContributions); NetSalaryCalculator netSalaryCalculator = new NetSalaryCalculator(mockedIncomeTaxCalculator.Object, mockedSocialContributionsCalculator.Object); double expectedNetSalary = grossSalaryAboveMax - incomeTax - socialContributions; //Action double resultNetSalary = netSalaryCalculator.CalculateNetSalary(grossSalaryAboveMax); //Assert Assert.AreEqual(expectedNetSalary, resultNetSalary, $"Result net salary is not equal to {expectedNetSalary}"); }
static void Main(string[] args) { decimal grossSalary = 0m; Console.WriteLine("Please input gross salary. Gross salary should be number between 0 to {0}", decimal.MaxValue); string userInput = Console.ReadLine(); while (!decimal.TryParse(userInput, out grossSalary) || grossSalary < 0) { Console.WriteLine("Please input valid gross salary. Valid gross salary should be number between 0 to {0}", decimal.MaxValue); userInput = Console.ReadLine(); } const decimal belowTaxSalaryLevel = 1000; const decimal higherSalaryLevel = 3000; const int percentOfIncomeTaxation = 10; const int percentOfSocialContributionTaxation = 15; var rules = new ITaxationRule[] { new IncomeTaxationRule(belowTaxSalaryLevel, percentOfIncomeTaxation), new SocialContributionTaxationRule(belowTaxSalaryLevel, higherSalaryLevel, percentOfSocialContributionTaxation) }; NetSalaryCalculator salaryCalculator = new NetSalaryCalculator(rules); var netSalary = salaryCalculator.CalculateNetSalary(grossSalary); Console.WriteLine("Net salary after taxes is {0}", netSalary); }
// Formula for net salary public static uint FormulaForNetSalary(NetSalaryCalculator _grossSalary) { var netSalary = _grossSalary.GrossSalary - ((uint)(0.25 * _grossSalary.GrossSalary)) - ((uint)(0.10 * _grossSalary.GrossSalary)) - ((uint)(0.10 * (_grossSalary.GrossSalary - ((uint)(0.25 * _grossSalary.GrossSalary)) - ((uint)(0.10 * _grossSalary.GrossSalary))))); return(netSalary); }
public void SalaryAfterCalculationShouldBeTheSame() { var grossSalary = 2000; NetSalaryCalculator salaryCalculator = new NetSalaryCalculator(); var calculatedSalary = salaryCalculator.CalculateNetSalary(grossSalary); Assert.AreEqual(grossSalary, calculatedSalary); }
public IActionResult Index([Bind("GrossSalary")] NetSalaryCalculator _grossSalary) { if (ModelState.IsValid && _grossSalary != null) { var calculationResult = Formulas.ForNetSalaryAndEmployeeTaxesCalculationFromGrossSalary(_grossSalary); SaveResultsInDB(calculationResult); return(RedirectToAction(nameof(CompleteCalculation), "NetSalaryCalculator", calculationResult)); } return(View(_grossSalary)); }
public void ForNegativeSalaryShouldThrowArgumentException() { var grossSalary = -100; NetSalaryCalculator salaryCalculator = new NetSalaryCalculator(); Assert.Catch <ArgumentException>(() => { salaryCalculator.CalculateNetSalary(grossSalary); }); }
public void SalaryAfterCalculationShouldBeTenPercentLower() { var grossSalary = 2000; NetSalaryCalculator salaryCalculator = new NetSalaryCalculator(new MockTaxationRule()); var calculatedSalary = salaryCalculator.CalculateNetSalary(grossSalary); decimal expectedSalary = 1800m; Assert.AreEqual(expectedSalary, calculatedSalary); }
public void Setup() { var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); _configuration = configuration.Build(); _salaryTaxOptions = Options.Create(_configuration.GetSection("salaryTaxConfig").Get <SalaryTaxConfig>()); _netSalaryCalculator = new NetSalaryCalculator(_salaryTaxOptions); }
static void Main(string[] args) { INetSalaryCalculator netSalaryCalculator = new NetSalaryCalculator(); Console.Write("Input gross salary: "); double grossSalary = double.Parse(Console.ReadLine()); double netSalary = netSalaryCalculator.CalculateNetSalary(grossSalary); Console.WriteLine($"Net salary: {netSalary}"); }
// Formula for net salary and the employee taxes (CAS, CASS, taxable base, tax) public static NetSalaryCalculator ForNetSalaryAndEmployeeTaxesCalculationFromGrossSalary(NetSalaryCalculator _grossSalary) { var calculationNet = new NetSalaryCalculator() { GrossSalary = _grossSalary.GrossSalary, Cas = FormulaForCas(_grossSalary), Cass = FormulaForCass(_grossSalary), TaxableBase = FormulaForTaxableBase(_grossSalary), Tax = FormulaForTax(_grossSalary), NetSalary = FormulaForNetSalary(_grossSalary) }; return(calculationNet); }
public void CalculateNetSalary_ShouldThrowArgumentException_IfGrossSalaryIsNegative() { //Arrange double grossSalaryNegative = -1; var mockedIncomeTaxCalculator = new Mock <IIncomeTaxCalculator>(); var mockedSocialContributionsCalculator = new Mock <ISocialContributionsCalculator>(); NetSalaryCalculator netSalaryCalculator = new NetSalaryCalculator(mockedIncomeTaxCalculator.Object, mockedSocialContributionsCalculator.Object); //Action var exception = Assert.Throws <ArgumentException>(() => netSalaryCalculator.CalculateNetSalary(grossSalaryNegative)); //Assert Assert.That(exception.Message, Is.EqualTo(GlobalConstants.NegativeGrossSalaryMessage)); }
public void CalculateNetSalary_ShouldReturnGrossSalary_IfIncomeTaxIs0AndSocialContributionsIs0() { //Arrange double grossSalaryBelowMin = GlobalConstants.MinGrossSalary - 1; var mockedIncomeTaxCalculator = new Mock <IIncomeTaxCalculator>(); mockedIncomeTaxCalculator.Setup(x => x.CalculateIncomeTax(grossSalaryBelowMin)).Returns(0); var mockedSocialContributionsCalculator = new Mock <ISocialContributionsCalculator>(); mockedSocialContributionsCalculator.Setup(x => x.CalculateSocialContributions(grossSalaryBelowMin)).Returns(0); NetSalaryCalculator netSalaryCalculator = new NetSalaryCalculator(mockedIncomeTaxCalculator.Object, mockedSocialContributionsCalculator.Object); //Action double resultNetSalary = netSalaryCalculator.CalculateNetSalary(grossSalaryBelowMin); //Assert Assert.AreEqual(grossSalaryBelowMin, resultNetSalary, $"Result net salary is not equal to {grossSalaryBelowMin}"); }
private void SaveResultsInDB(NetSalaryCalculator result) { _context.NetSalariesCalculator.Add(result); _context.SaveChanges(); }
public IActionResult CompleteCalculation(NetSalaryCalculator calculationResult) { return(View(calculationResult)); }
// Formula for CASS public static uint FormulaForCass(NetSalaryCalculator _grossSalary) { var cass = (uint)(0.10 * _grossSalary.GrossSalary); return(cass); }
// Formula for tax public static uint FormulaForTax(NetSalaryCalculator _grossSalary) { var tax = (uint)(0.10 * (_grossSalary.GrossSalary - ((uint)(0.25 * _grossSalary.GrossSalary)) - ((uint)(0.10 * _grossSalary.GrossSalary)))); return(tax); }
// Formula for taxable base public static uint FormulaForTaxableBase(NetSalaryCalculator _grossSalary) { var taxableBase = _grossSalary.GrossSalary - ((uint)(0.25 * _grossSalary.GrossSalary)) - ((uint)(0.10 * _grossSalary.GrossSalary)); return(taxableBase); }