// 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;
package salaryslip;



public class SalarySlipGeneratorShould {

  private SalarySlipGenerator salarySlipGenerator = new SalarySlipGenerator(
          new NationalInsuranceCalculation(),
          new GrossSalaryCalculation(),
          new TaxFreeAllowanceCalculation(),
          new TaxableIncomeCalculation(),
          new TaxablePayableCalculation()
  );

  @Test
  public void calculate_monthly_gross_salary() {
    Employee employee = anEmployee()
            .withAnnualSalary(5000d)
            .withName("John J Doe")
            .withEmployeeID(new EmployeeID("12345"))
            .build();
    SalarySlip calculatedPaySlip = salarySlipGenerator.generateFor(employee);

    assertThat(calculatedPaySlip, is(
// 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;

package salaryslip;



public class SalarySlipGeneratorShould {

  private SalarySlipGenerator salarySlipGenerator = new SalarySlipGenerator(
          new NationalInsuranceCalculation(),
          new GrossSalaryCalculation(),
          new TaxFreeAllowanceCalculation(),
          new TaxableIncomeCalculation(),
          new TaxablePayableCalculation()
  );

  @Test
  public void calculate_monthly_gross_salary() {
    Employee employee = anEmployee()
            .withAnnualSalary(5000d)
            .withName("John J Doe")
            .withEmployeeID(new EmployeeID("12345"))
            .build();
    SalarySlip calculatedPaySlip = salarySlipGenerator.generateFor(employee);

    assertThat(calculatedPaySlip, is(
            aSalarySlip()