weathery/solid/employee.ts
2022-03-24 09:57:45 +01:00

68 lines
1.4 KiB
TypeScript

class Employee_ {
// Nom, prénom, etc...
public reportHours() {}
public calculatePay() {}
public save() {}
}
class Employee {
public constructor(private email: string) {}
// Nom, prénom, etc...
}
class PayCalculator {
calculatePay(employee: Employee) {}
}
class HoursReporter {
reportHours(employee: Employee) {}
}
class EmployeeSaver {
save(employee: Employee) {}
}
interface EmployeeRepository {
save(employee: Employee);
}
class PostgresRepository implements EmployeeRepository {
save(employee: Employee) {
throw new Error("Method not implemented.");
}
}
function registerEmployee(repository: EmployeeRepository, email: string) {
// Validation mot de passe, email, unicité
const empl = new Employee(email);
repository.save(empl);
}
// Dans mes tests unitaires
class InMemoryRepository implements EmployeeRepository {
constructor(public employees: Employee[] = []) {}
save(employee: Employee) {
this.employees.push(employee);
}
}
function TestRegisterUser() {
const repository = new InMemoryRepository();
registerEmployee(repository, "un@email.com");
// assert(repository.employees.length) == 1
}
function TestRegisterUserDuplicateEmail() {
const repository = new InMemoryRepository([new Employee("un@email.com")]);
registerEmployee(repository, "un@email.com");
// assert erreur levée car email dupliqué
}