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);
        }
示例#2
0
        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);
        }