using NUnit.Framework;
namespace BusinessRules.Procedural_Way.Tests
{
[TestFixture]
public class InvestorFixture
{
[Test]
public void TaxRateCalculatedCorrectlyForUS()
{
// Create the instance of the investor
Investor investor = new Investor(0.0);
// Set the CurrentCultureName to the US culture name.
investor.CurrentCultureName = "en-US";
// Validate the income tax engine for USA works as expected
Assert.AreEqual(0.10, investor.TaxRate);
investor.Income = 1500.00;
Assert.AreEqual(0.10, investor.TaxRate);
investor.Income = 7550.99;
Assert.AreEqual(0.10, investor.TaxRate);
investor.Income = 7551.00;
Assert.AreEqual(0.15, investor.TaxRate);
investor.Income = 28000.00;
Assert.AreEqual(0.15, investor.TaxRate);
investor.Income = 30650.99;
Assert.AreEqual(0.15, investor.TaxRate);
investor.Income = 30651.00;
Assert.AreEqual(0.25, investor.TaxRate);
investor.Income = 65000.00;
Assert.AreEqual(0.25, investor.TaxRate);
investor.Income = 74200.99;
Assert.AreEqual(0.25, investor.TaxRate);
investor.Income = 74201.00;
Assert.AreEqual(0.28, investor.TaxRate);
investor.Income = 84526.00;
Assert.AreEqual(0.28, investor.TaxRate);
investor.Income = 154800.99;
Assert.AreEqual(0.28, investor.TaxRate);
investor.Income = 154801.00;
Assert.AreEqual(0.33, investor.TaxRate);
investor.Income = 205456.44;
Assert.AreEqual(0.33, investor.TaxRate);
investor.Income = 336550.99;
Assert.AreEqual(0.33, investor.TaxRate);
investor.Income = 336551.00;
Assert.AreEqual(0.35, investor.TaxRate);
investor.Income = 536551.00;
Assert.AreEqual(0.35, investor.TaxRate);
investor.Income = double.MaxValue - 0.01;
Assert.AreEqual(0.35, investor.TaxRate);
}
[Test]
public void TaxLiabilityCalculatedCorrectlyForUS()
{
// Create the instance of the investor
Investor investor = new Investor(0.0);
// Set the CurrentCultureName to the US culture name.
investor.CurrentCultureName = "en-US";
// Validate the income tax engine for USA works as expected
Assert.AreEqual(0.0, investor.TaxLiability, 2.0);
investor.Income = 1500.00;
Assert.AreEqual(150.00, investor.TaxLiability, 2.0);
investor.Income = 7550.99;
Assert.AreEqual(755.10, investor.TaxLiability, 2.0);
investor.Income = 7551.00;
Assert.AreEqual(755.10, investor.TaxLiability, 2.0);
investor.Income = 28000.00;
Assert.AreEqual(3822.45, investor.TaxLiability, 2.0);
investor.Income = 30650.99;
Assert.AreEqual(4220.10, investor.TaxLiability, 2.0);
investor.Income = 30651.00;
Assert.AreEqual(4220.10, investor.TaxLiability, 2.0);
investor.Income = 65000.00;
Assert.AreEqual(12807.35, investor.TaxLiability, 2.0);
investor.Income = 74200.99;
Assert.AreEqual(15107.60, investor.TaxLiability, 2.0);
investor.Income = 74201.00;
Assert.AreEqual(15107.60, investor.TaxLiability, 2.0);
investor.Income = 84526.00;
Assert.AreEqual(17998.60, investor.TaxLiability, 2.0);
investor.Income = 154800.99;
Assert.AreEqual(37675.60, investor.TaxLiability, 2.0);
investor.Income = 154801.00;
Assert.AreEqual(37675.60, investor.TaxLiability, 2.0);
investor.Income = 205456.44;
Assert.AreEqual(54391.89, investor.TaxLiability, 2.0);
investor.Income = 336550.99;
Assert.AreEqual(97653.09, investor.TaxLiability, 2.0);
investor.Income = 336551.00;
Assert.AreEqual(97653.09, investor.TaxLiability, 2.0);
investor.Income = 536551.00;
Assert.AreEqual(167653.09, investor.TaxLiability, 2.0);
investor.Income = double.MaxValue - 0.01;
Assert.AreEqual(6.2919259720181043E+307, investor.TaxLiability, 2.0);
}
[Test]
public void TaxRateCalculatedCorrectlyForAustralia()
{
// Create the instance of the investor
Investor investor = new Investor(0.0);
// Set the CurrentCultureName to the Australian culture name.
investor.CurrentCultureName = "en-AU";
// Validate the income tax engine for Australian works as expected
Assert.AreEqual(0.0, investor.TaxRate);
investor.Income = 1500.00;
Assert.AreEqual(0.0, investor.TaxRate);
investor.Income = 6000.99;
Assert.AreEqual(0.0, investor.TaxRate);
investor.Income = 6001.00;
Assert.AreEqual(0.15, investor.TaxRate);
investor.Income = 22258.32;
Assert.AreEqual(0.15, investor.TaxRate);
investor.Income = 25000.99;
Assert.AreEqual(0.15, investor.TaxRate);
investor.Income = 25001.00;
Assert.AreEqual(0.30, investor.TaxRate);
investor.Income = 65000.00;
Assert.AreEqual(0.30, investor.TaxRate);
investor.Income = 75000.99;
Assert.AreEqual(0.30, investor.TaxRate);
investor.Income = 75001.00;
Assert.AreEqual(0.40, investor.TaxRate);
investor.Income = 84526.00;
Assert.AreEqual(0.40, investor.TaxRate);
investor.Income = 150000.99;
Assert.AreEqual(0.40, investor.TaxRate);
investor.Income = 150001.00;
Assert.AreEqual(0.45, investor.TaxRate);
investor.Income = 205456.44;
Assert.AreEqual(0.45, investor.TaxRate);
investor.Income = double.MaxValue - 0.01;
Assert.AreEqual(0.45, investor.TaxRate);
}
[Test]
public void TaxLiabilityCalculatedCorrectlyForAustralia()
{
// Create the instance of the investor
Investor investor = new Investor(0.0);
// Set the CurrentCultureName to the Australian culture name.
investor.CurrentCultureName = "en-AU";
// Validate the income tax engine for Australian works as expected
Assert.AreEqual(0.0, investor.TaxLiability, 2.0);
investor.Income = 1500.00;
Assert.AreEqual(0.0, investor.TaxLiability, 2.0);
investor.Income = 6000.99;
Assert.AreEqual(0.0, investor.TaxLiability, 2.0);
investor.Income = 6001.00;
Assert.AreEqual(0.15, investor.TaxLiability, 2.0);
investor.Income = 22258.32;
Assert.AreEqual(2438.60, investor.TaxLiability, 2.0);
investor.Income = 25000.99;
Assert.AreEqual(2850.00, investor.TaxLiability, 2.0);
investor.Income = 25001.00;
Assert.AreEqual(2850.00, investor.TaxLiability, 2.0);
investor.Income = 65000.00;
Assert.AreEqual(14849.70, investor.TaxLiability, 2.0);
investor.Income = 75000.99;
Assert.AreEqual(17850.00, investor.TaxLiability, 2.0);
investor.Income = 75001.00;
Assert.AreEqual(17850.00, investor.TaxLiability, 2.0);
investor.Income = 84526.00;
Assert.AreEqual(21660.00, investor.TaxLiability, 2.0);
investor.Income = 150000.99;
Assert.AreEqual(47850.00, investor.TaxLiability, 2.0);
investor.Income = 150001.00;
Assert.AreEqual(47850.00, investor.TaxLiability, 2.0);
investor.Income = 205456.44;
Assert.AreEqual(72804.94, investor.TaxLiability, 2.0);
investor.Income = double.MaxValue - 0.01;
Assert.AreEqual(8.0896191068804208E+307, investor.TaxLiability, 2.0);
}
[Test]
public void TaxRateCalculatedCorrectlyForNewZealand()
{
// Create the instance of the investor
Investor investor = new Investor(0.0);
// Set the CurrentCultureName to the New Zealand culture name.
investor.CurrentCultureName = "en-NZ";
// Validate the income tax engine works as expected
Assert.AreEqual(0.195, investor.TaxRate);
investor.Income = 9500.00;
Assert.AreEqual(0.195, investor.TaxRate);
investor.Income = 19500.00;
Assert.AreEqual(0.195, investor.TaxRate);
investor.Income = 19500.99;
Assert.AreEqual(0.195, investor.TaxRate);
investor.Income = 19501.00;
Assert.AreEqual(0.33, investor.TaxRate);
investor.Income = 28000.00;
Assert.AreEqual(0.33, investor.TaxRate);
investor.Income = 60000.00;
Assert.AreEqual(0.33, investor.TaxRate);
investor.Income = 60000.99;
Assert.AreEqual(0.33, investor.TaxRate);
investor.Income = 60001.00;
Assert.AreEqual(0.39, investor.TaxRate);
investor.Income = 65000.00;
Assert.AreEqual(0.39, investor.TaxRate);
investor.Income = 999999999.00;
Assert.AreEqual(0.39, investor.TaxRate);
}
[Test]
public void TaxLiabilityCalculatedCorrectlyForNewZealand()
{
// Create the instance of the investor
Investor investor = new Investor(0.0);
// Set the CurrentCultureName to the New Zealand culture name.
investor.CurrentCultureName = "en-NZ";
// Validate the income tax engine works as expected
Assert.AreEqual(0.0, investor.TaxLiability, 2.0);
investor.Income = 9500.00;
Assert.AreEqual(1852.50, investor.TaxLiability, 2.0);
investor.Income = 19500.00;
Assert.AreEqual(3802.50, investor.TaxLiability, 2.0);
investor.Income = 19500.99;
Assert.AreEqual(3802.69, investor.TaxLiability, 2.0);
investor.Income = 19501.00;
Assert.AreEqual(3802.70, investor.TaxLiability, 2.0);
investor.Income = 28000.00;
Assert.AreEqual(6607.36, investor.TaxLiability, 2.0);
investor.Income = 60000.00;
Assert.AreEqual(17167.36, investor.TaxLiability, 2.0);
investor.Income = 60000.99;
Assert.AreEqual(17167.69, investor.TaxLiability, 2.0);
investor.Income = 60001.00;
Assert.AreEqual(17167.69, investor.TaxLiability, 2.0);
investor.Income = 65000.00;
Assert.AreEqual(19117.30, investor.TaxLiability, 2.0);
investor.Income = 999999999.00;
Assert.AreEqual(389993766.91, investor.TaxLiability, 2.0);
investor.Income = double.MaxValue - 0.01;
Assert.AreEqual(7.0110032259630313E+307, investor.TaxLiability, 2.0);
}
[Test]
public void TaxRateCalculatedCorrectlyForNonExceptionalBehavior()
{
// Create the instance of the investor
Investor investor = new Investor(0.0);
// Set the CurrentCultureName to the un-supported culture name.
investor.CurrentCultureName = "en-ZA";
// Validate the income tax engine for Non-Exceptional behavior works as expected
Assert.AreEqual(0.0, investor.TaxRate);
investor.Income = 9500.00;
Assert.AreEqual(0.0, investor.TaxRate);
investor.Income = 19500.00;
Assert.AreEqual(0.0, investor.TaxRate);
investor.Income = 19500.99;
Assert.AreEqual(0.0, investor.TaxRate);
investor.Income = 19501.00;
Assert.AreEqual(0.0, investor.TaxRate);
investor.Income = 28000.00;
Assert.AreEqual(0.0, investor.TaxRate);
investor.Income = 60000.00;
Assert.AreEqual(0.0, investor.TaxRate);
investor.Income = 60000.99;
Assert.AreEqual(0.0, investor.TaxRate);
investor.Income = 60001.00;
Assert.AreEqual(0.0, investor.TaxRate);
investor.Income = 65000.00;
Assert.AreEqual(0.0, investor.TaxRate);
investor.Income = 999999999.00;
Assert.AreEqual(0.0, investor.TaxRate);
}
[Test]
public void TaxLiabilityCalculatedCorrectlyForNonExceptionalBehavior()
{
// Create the instance of the investor
Investor investor = new Investor(0.0);
// Set the CurrentCultureName to the un-supported culture name.
investor.CurrentCultureName = "en-ZA";
// Validate the income tax engine for Non-Exceptional behavior works as expected
Assert.AreEqual(0.0, investor.TaxLiability, 2.0);
investor.Income = 9500.00;
Assert.AreEqual(0.0, investor.TaxLiability, 2.0);
investor.Income = 19500.00;
Assert.AreEqual(0.0, investor.TaxLiability, 2.0);
investor.Income = 19500.99;
Assert.AreEqual(0.0, investor.TaxLiability, 2.0);
investor.Income = 19501.00;
Assert.AreEqual(0.0, investor.TaxLiability, 2.0);
investor.Income = 28000.00;
Assert.AreEqual(0.0, investor.TaxLiability, 2.0);
investor.Income = 60000.00;
Assert.AreEqual(0.0, investor.TaxLiability, 2.0);
investor.Income = 60000.99;
Assert.AreEqual(0.0, investor.TaxLiability, 2.0);
investor.Income = 60001.00;
Assert.AreEqual(0.0, investor.TaxLiability, 2.0);
investor.Income = 65000.00;
Assert.AreEqual(0.0, investor.TaxLiability, 2.0);
investor.Income = 999999999.00;
Assert.AreEqual(0.0, investor.TaxLiability, 2.0);
investor.Income = double.MaxValue - 0.01;
Assert.AreEqual(0.0, investor.TaxLiability, 2.0);
}
}
}