diff --git a/hr-domain/src/com/example/hr/application/EmployeeApplication.java b/hr-domain/src/com/example/hr/application/EmployeeApplication.java index 4cb8591..249d898 100644 --- a/hr-domain/src/com/example/hr/application/EmployeeApplication.java +++ b/hr-domain/src/com/example/hr/application/EmployeeApplication.java @@ -1,11 +1,17 @@ package com.example.hr.application; import com.example.hr.domain.Employee; +import com.example.hr.domain.TcKimlikNo; +/** + * + * @author Binnur Kurt + * + */ public interface EmployeeApplication { boolean hireEmployee(Employee employee); - void fireEmployee(Employee employee); + boolean fireEmployee(TcKimlikNo identity); } \ No newline at end of file diff --git a/hr-domain/src/com/example/hr/application/business/SimpleEmployeeApplication.java b/hr-domain/src/com/example/hr/application/business/SimpleEmployeeApplication.java index 8ab12c9..f61ba7c 100644 --- a/hr-domain/src/com/example/hr/application/business/SimpleEmployeeApplication.java +++ b/hr-domain/src/com/example/hr/application/business/SimpleEmployeeApplication.java @@ -2,11 +2,17 @@ import com.example.hr.application.EmployeeApplication; import com.example.hr.domain.Employee; +import com.example.hr.domain.TcKimlikNo; import com.example.hr.events.EmployeeFiredEvent; import com.example.hr.events.EmployeeHiredEvent; import com.example.hr.infrastructure.EventPushlisher; import com.example.hr.repository.EmployeeRepository; +/** + * + * @author Binnur Kurt + * + */ public class SimpleEmployeeApplication implements EmployeeApplication { private EmployeeRepository employeeRepository; private EventPushlisher eventPushlisher; @@ -27,9 +33,13 @@ public boolean hireEmployee(Employee employee) { } @Override - public void fireEmployee(Employee employee) { - employeeRepository.remove(employee); - eventPushlisher.publishEvent(new EmployeeFiredEvent("", "employees", employee)); + public boolean fireEmployee(TcKimlikNo identity) { + var employee = employeeRepository.findByIdentity(identity); + if (employee.isEmpty()) return false; + Employee emp = employee.get(); + employeeRepository.remove(emp); + eventPushlisher.publishEvent(new EmployeeFiredEvent("1", "employees", emp)); + return true; } } diff --git a/hr-domain/src/com/example/hr/domain/Employee.java b/hr-domain/src/com/example/hr/domain/Employee.java index 60a1912..1163471 100644 --- a/hr-domain/src/com/example/hr/domain/Employee.java +++ b/hr-domain/src/com/example/hr/domain/Employee.java @@ -37,7 +37,7 @@ public Employee(TcKimlikNo identityNo, FullName fullname, Money salary, Iban iba this.department = department; } - public Employee(Builder builder) { + private Employee(Builder builder) { this.identityNo = builder.identityNo; this.fullname = builder.fullname; this.salary = builder.salary; diff --git a/hr-domain/test/com/example/hr/application/business/SimpleEmployeeApplicationTest.java b/hr-domain/test/com/example/hr/application/business/SimpleEmployeeApplicationTest.java index 8351874..5729494 100644 --- a/hr-domain/test/com/example/hr/application/business/SimpleEmployeeApplicationTest.java +++ b/hr-domain/test/com/example/hr/application/business/SimpleEmployeeApplicationTest.java @@ -2,12 +2,16 @@ import static org.junit.Assert.assertTrue; +import java.util.Optional; + import org.junit.jupiter.api.Test; import org.mockito.Mockito; import com.example.hr.domain.Department; import com.example.hr.domain.Employee; import com.example.hr.domain.MoneyCurrency; +import com.example.hr.domain.TcKimlikNo; +import com.example.hr.events.EmployeeFiredEvent; import com.example.hr.events.EmployeeHiredEvent; import com.example.hr.infrastructure.EventPushlisher; import com.example.hr.repository.EmployeeRepository; @@ -42,7 +46,7 @@ void hireEmployee_success() { .getBytes()) .build(); Mockito.doNothing().when(empRepo).save(jack); - Mockito.doNothing().when(eventPublisher).publishEvent(new EmployeeHiredEvent("", "employees", jack)); + Mockito.doNothing().when(eventPublisher).publishEvent(new EmployeeHiredEvent("1", "employees", jack)); // 2. call exercise method var success = app.hireEmployee(jack); // 3. Verification @@ -50,4 +54,29 @@ void hireEmployee_success() { // 4. destroy setup } + @Test + void fireEmployee_success() { + // 1. test setup / fixture + SimpleEmployeeApplication app = new SimpleEmployeeApplication(); + EmployeeRepository empRepo = Mockito.mock(EmployeeRepository.class); + EventPushlisher eventPublisher = Mockito.mock(EventPushlisher.class); + app.setEmployeeRepository(empRepo); + app.setEventPushlisher(eventPublisher); + System.out.println(empRepo.getClass()); + Employee jack = new Employee.Builder("40310900232").fullname("jack", "bauer").birthYear(1956) + .salary(100_000, MoneyCurrency.USD).iban("TR820006235455781668847562").fulltime(true) + .department(Department.IT) + .photo("iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAABC1BMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADXsw3hAAAAWXRSTlMAWQFYVwIlVUpSTypIR0wSKBFFAw9WCRo/OgUvQjMNIR5EBhBOLiIZExRTCjsdDlBBHD1UQwc4Sx8wQC0kKxtGBAwsPDEnMhU0N00gOSlJNSYjURY+CxcINmo6xHsAAATwSURBVHhe7Ztnbxs5EIbfGXK16l22VSwXufcax70kju30enf//5ccJDsXCPJyaK3I4BA/XwQLEN6Hs/SSw5Xwf+IZZnSZ7YwnmncTM8l0KtSKSIepuWyr/qa4vvQ3ujCzk3gAaE/dlr9SJCvZ99fLjZ6Di/jCcU5TD9WFegy+kV6bWh21AwMXX8oPSWTgQSPcWa8APML4RibdSycbehJvM/ujUmDgZHMgXXZYuWqAeRTxSzkiTU9FE21OxS9CADQN8ZLC0VhMA0Y7S6RoSBSF07GKwJjWwvDFIkwOb8DAqTB8GUUzswiGzT+k+GhKtxEMlz9JaiQGu6VhDOR8e4NwCANGU8i3R9FKG/zU/CKNDkVvG08zCLBNo0TT1lPvPzVSNEIUXT2tBDlSNGKW7A0YxyPPV5SDfX5V0chRlEBgK7BDDgwoXbHNXyIXKLpGYCfw3qoASvXvBGUO2C5/NSSJB0OdSs9t7j68IaJoHGwj8JmURXzy7uTb5X4luBgrvXydUxYKiup2Ai1SUnx6voQ+Nk7zFgqpWVgwFkoD0R8qALgLgJ8vX76Skq+BBdukzPn5DhAw+uAAaKyJpXsNCw6NAor2AgQRG+hJyb0MC7ZIGbd4QBDZQgg1sJoEwZxxDHOGhZ3BScGgAJFLLaxpgUEey8IkmIbIN2MBjk35AKNuvoAZiEyRis7PM4wwbqRbkcipSeCluJzwAZlIQuQ2UkBZfJxxZ5yGNYjUDQKfwaJAwihAsW4D4aqFwCIZgUg2SkDREUQYhbgCedP/EMsCGzqmQJoiWbQRaBsFQoisUBSqGr8CWxAJKYrdMRuBEsW8E973ZGoATal9G4HtuDsSiuaHhYB5TxCuQuQgf5BMfsxmc7nzcnlmb6/V2jqamPi+82qnvioLIMibCnAOGY5z2s4YFxbTJ8J92AhMkBL2Iy5h3IgNcnzknkJYzNwR4CUpoS9xCWM/ZbwCTQRwijADwzhH5/FPFhXNOy0AM67JyGbDZQEYuBJagimXBQgQ1IX8FhzCuJR6slob7C4e6yFpMvIOgbt8niSpL58HO4tHJ0tmFN26nP0fiLSQ/wlgV/HVsnw4degwPyMPn4qu8gOMzUjD16TPwHCUX1ghTUJ+vupqBWBs1OTyr1Xc5V/MieWnBMAOF38tDD9bBbvKD5AhJQy/6XD4jI509ZPLAMMdM6SMw59nl/EsbH8pWwIYLjEs/4po0nE8Y9uYv+A4H4zvhrO82l9gx/mGhyqKwoLz9oOxbrgCy87zwXgTLTDtPh+MPVKRD4UY7qmkDcf57gUYP3T0AxGGB4FlQwE8wBh/fApomocPA45+qnPjSSBBSjiCcSxQJCU8F3UskIkQeAH2I3AaIdAE+6pATQ1So6IvgXl6FH8CheJJYpCTYhWMPwOOAn8czzzzeyf/r2D8DgcGUKmeLSQWzjoVAOw/f/HFHN2Tfj8OsO/4XN+vaz6e+VRg4FM3vO/LlS/YmwGDW//F/1IoB74MGK9IP7Ipn/BWgIVe/qBBwlMJgrcRfcHmhZ8CLEb2xtt+WsOriCNSTYd+BD51BeTGwP/5iKJ/wL+zNdRU9COwQVGUwN7uQ4NoOvLVmFxqUo+dkPpqTBjrRGow/53H1Wi6bzG8/2PK63rcOX+I/fmSLYDhDwbendMvcsIBuRMDlD6sfUztppKvMgUMnf/Mv8NIVU+cyYl6AAAAAElFTkSuQmCC" + .getBytes()) + .build(); + Mockito.doNothing().when(empRepo).remove(jack); + Mockito.when(empRepo.findByIdentity(TcKimlikNo.of("40310900232"))).thenReturn(Optional.of(jack)); + Mockito.doNothing().when(eventPublisher).publishEvent(new EmployeeFiredEvent("2", "employees", jack)); + // 2. call exercise method + var success = app.fireEmployee(TcKimlikNo.of("40310900232")); + // 3. Verification + assertTrue(success); + // 4. destroy setup + } + }