package org.softlang.company.tests;
import static org.junit.Assert.assertEquals;
import static org.softlang.company.features.CompanyBuilder.*;
import org.junit.Test;
import org.softlang.company.features.CompanyBuilder;
import org.softlang.company.features.tokens.AddressToken;
import org.softlang.company.features.tokens.ManagerToken;
import org.softlang.company.features.tokens.NameToken;
import org.softlang.company.features.tokens.SalaryToken;
import org.softlang.company.model.Company;
import org.softlang.company.model.Department;
import org.softlang.company.model.Employee;
/**
*
* @author jan
*
* cqCompany means Command & Query company
* nfCompany means NestedFunction company
*/
public class CompanyBuilderTest {
@Test
public void testCompanyWithOneDepartment() {
String name = "abc2";
Company cqCompany = new Company();
cqCompany.setName(name);
Department dep = new Department();
cqCompany.getDepts().add(dep);
Company mcCompany = CompanyBuilder
.company(
name(name),
dep
);
assertEquals(cqCompany, mcCompany);
}
@Test
public void testCompanyWithDepartments() {
String name = "abc2";
Company cqCompany = new Company();
cqCompany.setName(name);
Department dep = new Department();
cqCompany.getDepts().add(dep);
Department dep2 = new Department();
cqCompany.getDepts().add(dep);
Department dep3 = new Department();
cqCompany.getDepts().add(dep);
Company mcCompany = CompanyBuilder
.company(
name(name),
dep,
dep2,
dep3
);
assertEquals(cqCompany, mcCompany);
}
@Test
public void testCompany() {
String name = "abc2";
Company cqCompany = new Company();
cqCompany.setName(name);
Company mcCompany = CompanyBuilder
.company(name(name));
assertEquals(cqCompany, mcCompany);
}
@Test
public void testBigExample() {
Company nfCompany = createCompanyNestedFunction();
Company cqCompany = createCompanyCommandAndQuery();
assertEquals(cqCompany, nfCompany);
}
private Company createCompanyCommandAndQuery() {
// Create company
Company sampleCompany = new Company();
sampleCompany.setName("ACME Corporation");
// Create all employees
Employee craig = new Employee();
craig.setName("Craig");
craig.setAddress("Redmond");
craig.setSalary(123456);
Employee erik = new Employee();
erik.setName("Erik");
erik.setAddress("Utrecht");
erik.setSalary(12345);
Employee ralf = new Employee();
ralf.setName("Ralf");
ralf.setAddress("Koblenz");
ralf.setSalary(1234);
Employee ray = new Employee();
ray.setName("Ray");
ray.setAddress("Redmond");
ray.setSalary(234567);
Employee klaus = new Employee();
klaus.setName("Klaus");
klaus.setAddress("Boston");
klaus.setSalary(23456);
Employee karl = new Employee();
karl.setName("Karl");
karl.setAddress("Riga");
karl.setSalary(2345);
Employee joe = new Employee();
joe.setName("Joe");
joe.setAddress("Wifi City");
joe.setSalary(2344);
// Create research department
Department research = new Department();
research.setManager(craig);
research.setName("Research");
research.getEmployees().add(erik);
research.getEmployees().add(ralf);
sampleCompany.getDepts().add(research);
// Create development department
Department development = new Department();
development.setManager(ray);
development.setName("Development");
sampleCompany.getDepts().add(development);
// Create sub-department dev1
Department dev1 = new Department();
dev1.setName("Dev1");
dev1.setManager(klaus);
development.getSubdepts().add(dev1);
// Create sub-department dev11
Department dev11 = new Department();
dev11.setName("Dev1.1");
dev11.setManager(karl);
dev11.getEmployees().add(joe);
dev1.getSubdepts().add(dev11);
return sampleCompany;
}
public static Company createCompanyNestedFunction(){
return
company(
name("ACME Corporation"),
department(
name("Research"),
manager(
name("Craig"),
address("Redmond"),
salary(123456)
),
employees(
employee(
name("Erik"),
address("Utrecht"),
salary(12345)
),
employee(
name("Ralf"),
address("Koblenz"),
salary(1234)
)
)
),
department(
name("Development"),
manager(
name("Ray"),
address("Redmond"),
salary(234567)
),
employees(),
department(
name("Dev1"),
manager(
name("Klaus"),
address("Boston"),
salary(23456)
),
employees(),
department(
name("Dev1.1"),
manager(
name("Karl"),
address("Riga"),
salary(2345)
),
employees(
employee(
name("Joe"),
address("Wifi City"),
salary(2344)
)
)
)
)
)
);
}
}