// Path: salary-slip/src/test/java/salaryslip/EmployeeBuilder.java
// public static EmployeeBuilder anEmployee() {
//   return new EmployeeBuilder();
// }
// 
// Path: salary-slip/src/main/java/salaryslip/SalarySlipBuilder.java
// public static SalarySlipBuilder aSalarySlip() {
//   return new SalarySlipBuilder();
// }


import org.junit.Test;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static salaryslip.EmployeeBuilder.anEmployee;
import static salaryslip.SalarySlipBuilder.aSalarySlip;
            .withName("John J Doe")
            .withEmployeeID(new EmployeeID("12345"))
            .build();

    SalarySlip calculatedPaySlip = salarySlipGenerator.generateFor(employee);

    assertThat(calculatedPaySlip, is(
            aSalarySlip()
                    .withEmployeeID(new EmployeeID("12345"))
                    .withName("John J Doe")
                    .withGrossMonthlySalary("£1000.00")
                    .withNationalInsuranceMonthlyContribution("£39.40")
                    .withTaxFreeMonthlyAllowance("£916.67")
                    .withTaxableMonthlyIncome("£83.33")
                    .withTaxablePayable("£16.67")
                    .build()
            )
    );
  }

  @Test
  public void calculate_taxable_income_for_an_annual_salary_above_11000() {
    Employee employee = anEmployee()
            .withAnnualSalary(12000d)
            .withName("John J Doe")
            .withEmployeeID(new EmployeeID("12345"))
            .build();

    SalarySlip calculatedPaySlip = salarySlipGenerator.generateFor(employee);

// Path: salary-slip/src/test/java/salaryslip/EmployeeBuilder.java
// public static EmployeeBuilder anEmployee() {
//   return new EmployeeBuilder();
// }
// 
// Path: salary-slip/src/main/java/salaryslip/SalarySlipBuilder.java
// public static SalarySlipBuilder aSalarySlip() {
//   return new SalarySlipBuilder();
// }


// Path: salary-slip/src/test/java/salaryslip/SalarySlipGeneratorShould.java
import org.junit.Test;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static salaryslip.EmployeeBuilder.anEmployee;
import static salaryslip.SalarySlipBuilder.aSalarySlip;

            .withName("John J Doe")
            .withEmployeeID(new EmployeeID("12345"))
            .build();

    SalarySlip calculatedPaySlip = salarySlipGenerator.generateFor(employee);

    assertThat(calculatedPaySlip, is(
            aSalarySlip()
                    .withEmployeeID(new EmployeeID("12345"))
                    .withName("John J Doe")
                    .withGrossMonthlySalary("£1000.00")
                    .withNationalInsuranceMonthlyContribution("£39.40")
                    .withTaxFreeMonthlyAllowance("£916.67")
                    .withTaxableMonthlyIncome("£83.33")
                    .withTaxablePayable("£16.67")
                    .build()
            )
    );
  }

  @Test
  public void calculate_taxable_income_for_an_annual_salary_above_11000() {
    Employee employee = anEmployee()
            .withAnnualSalary(12000d)
            .withName("John J Doe")
            .withEmployeeID(new EmployeeID("12345"))
            .build();

    SalarySlip calculatedPaySlip = salarySlipGenerator.generateFor(employee);

    assertThat(calculatedPaySlip, is(