public async Task given_medicaretaxinfo_and_earnings_when_calculating_then_should_return_expected_medicare( decimal rate1, decimal rate2, decimal threshold, decimal ytdEarnings, decimal payrunEarnings, decimal expected) { var repository = Substitute.For <ITaxRateRepository>(); var info = new MedicareTaxInfo { Rate1 = rate1, Rate2 = rate2, Rate2Threshold = threshold }; repository.GetMedicareTaxInfo().Returns(info); var context = new PaycheckContext(); context.Earnings.Add(new Earning { Amount = payrunEarnings }); context.Earnings.YTD = ytdEarnings; var calculator = new CalculateMedicareTax(repository); var result = await calculator.ExecuteAsync(context, CancellationToken.None); var medicareTax = result.Taxes.SingleOrDefault(x => x.Type == TaxType.Medicare); medicareTax.Should().NotBeNull(); medicareTax.Value.Should().Be(expected); }
public async Task given_paycheckcontext_with_employeeinfo_when_calculating_then_return_check() { //This is just a sample of what it would look like in production code to use a real IoC container. var services = new ServiceCollection(); services.Scan(x => x.FromAssemblyOf <PaycheckCalculator>()); services.Scan(x => x.FromAssemblyOf <PaycheckCalculator>() .AddClasses() .AsImplementedInterfaces() .WithTransientLifetime()); services.AddSingleton <IServiceProvider>(x => new MicrosoftServiceProvider(services.BuildServiceProvider())); var provider = services.BuildServiceProvider(); var context = new PaycheckContext(); var calculator = provider.GetService <PaycheckCalculator>(); var result = await calculator.ExecuteAsync(context); result.Should().BeEquivalentTo(context); }