From c46030533b499f7ab60666326866d67f9fd2f1e0 Mon Sep 17 00:00:00 2001 From: deepcloudlabs Date: Tue, 23 Jun 2020 17:20:59 +0300 Subject: [PATCH] add tests --- hr-domain/.classpath | 41 ++++++++++++-- hr-domain/.project | 6 +++ .../.settings/org.eclipse.jdt.apt.core.prefs | 2 + .../.settings/org.eclipse.jdt.core.prefs | 2 + .../.settings/org.eclipse.m2e.core.prefs | 4 ++ hr-domain/pom.xml | 35 ++++++++++++ .../hr/application/EmployeeApplication.java | 2 +- .../business/SimpleEmployeeApplication.java | 3 +- hr-domain/target/classes/META-INF/MANIFEST.MF | 5 ++ .../com.example/hr-domain/pom.properties | 7 +++ .../maven/com.example/hr-domain/pom.xml | 35 ++++++++++++ .../target/maven-archiver/pom.properties | 5 ++ .../compile/default-compile/createdFiles.lst | 0 .../compile/default-compile/inputFiles.lst | 17 ++++++ .../default-testCompile/createdFiles.lst | 0 .../default-testCompile/inputFiles.lst | 1 + .../SimpleEmployeeApplicationTest.java | 53 +++++++++++++++++++ hr-microservice-hexagonal/pom.xml | 18 ++++--- .../hr/controller/EmployeeController.java | 1 + .../com/example/hr/orm/EmployeeEntity.java | 13 +++-- ...MicroserviceHexagonalApplicationTests.java | 47 +++++++++++++++- 21 files changed, 277 insertions(+), 20 deletions(-) create mode 100644 hr-domain/.settings/org.eclipse.jdt.apt.core.prefs create mode 100644 hr-domain/.settings/org.eclipse.m2e.core.prefs create mode 100644 hr-domain/pom.xml create mode 100644 hr-domain/target/classes/META-INF/MANIFEST.MF create mode 100644 hr-domain/target/classes/META-INF/maven/com.example/hr-domain/pom.properties create mode 100644 hr-domain/target/classes/META-INF/maven/com.example/hr-domain/pom.xml create mode 100644 hr-domain/target/maven-archiver/pom.properties create mode 100644 hr-domain/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 hr-domain/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 hr-domain/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst create mode 100644 hr-domain/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst create mode 100644 hr-domain/test/com/example/hr/application/business/SimpleEmployeeApplicationTest.java diff --git a/hr-domain/.classpath b/hr-domain/.classpath index d54800d..bb3c94e 100644 --- a/hr-domain/.classpath +++ b/hr-domain/.classpath @@ -2,9 +2,44 @@ - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hr-domain/.project b/hr-domain/.project index a553b6c..4cb5c16 100644 --- a/hr-domain/.project +++ b/hr-domain/.project @@ -10,8 +10,14 @@ + + org.eclipse.m2e.core.maven2Builder + + + + org.eclipse.m2e.core.maven2Nature org.eclipse.jdt.core.javanature diff --git a/hr-domain/.settings/org.eclipse.jdt.apt.core.prefs b/hr-domain/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 0000000..d4313d4 --- /dev/null +++ b/hr-domain/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=false diff --git a/hr-domain/.settings/org.eclipse.jdt.core.prefs b/hr-domain/.settings/org.eclipse.jdt.core.prefs index a58ebdc..6b7c302 100644 --- a/hr-domain/.settings/org.eclipse.jdt.core.prefs +++ b/hr-domain/.settings/org.eclipse.jdt.core.prefs @@ -10,6 +10,8 @@ org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.processAnnotations=disabled org.eclipse.jdt.core.compiler.release=enabled org.eclipse.jdt.core.compiler.source=11 diff --git a/hr-domain/.settings/org.eclipse.m2e.core.prefs b/hr-domain/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/hr-domain/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/hr-domain/pom.xml b/hr-domain/pom.xml new file mode 100644 index 0000000..d303f2b --- /dev/null +++ b/hr-domain/pom.xml @@ -0,0 +1,35 @@ + + 4.0.0 + com.example + hr-domain + 0.0.1-SNAPSHOT + + + org.mockito + mockito-all + 1.10.19 + test + + + org.junit.jupiter + junit-jupiter-engine + 5.5.2 + test + + + + src + test + + + maven-compiler-plugin + 3.8.1 + + 11 + + + + + \ No newline at end of file diff --git a/hr-domain/src/com/example/hr/application/EmployeeApplication.java b/hr-domain/src/com/example/hr/application/EmployeeApplication.java index 36fba17..4cb8591 100644 --- a/hr-domain/src/com/example/hr/application/EmployeeApplication.java +++ b/hr-domain/src/com/example/hr/application/EmployeeApplication.java @@ -4,7 +4,7 @@ public interface EmployeeApplication { - void hireEmployee(Employee employee); + boolean hireEmployee(Employee employee); void fireEmployee(Employee employee); 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 d396dea..8ab12c9 100644 --- a/hr-domain/src/com/example/hr/application/business/SimpleEmployeeApplication.java +++ b/hr-domain/src/com/example/hr/application/business/SimpleEmployeeApplication.java @@ -20,9 +20,10 @@ public void setEventPushlisher(EventPushlisher eventPushlisher) { } @Override - public void hireEmployee(Employee employee) { + public boolean hireEmployee(Employee employee) { employeeRepository.save(employee); eventPushlisher.publishEvent(new EmployeeHiredEvent("", "employees", employee)); + return true; } @Override diff --git a/hr-domain/target/classes/META-INF/MANIFEST.MF b/hr-domain/target/classes/META-INF/MANIFEST.MF new file mode 100644 index 0000000..d8bf4ab --- /dev/null +++ b/hr-domain/target/classes/META-INF/MANIFEST.MF @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 +Built-By: dcl +Build-Jdk: 11.0.7 +Created-By: Maven Integration for Eclipse + diff --git a/hr-domain/target/classes/META-INF/maven/com.example/hr-domain/pom.properties b/hr-domain/target/classes/META-INF/maven/com.example/hr-domain/pom.properties new file mode 100644 index 0000000..2c74a2b --- /dev/null +++ b/hr-domain/target/classes/META-INF/maven/com.example/hr-domain/pom.properties @@ -0,0 +1,7 @@ +#Generated by Maven Integration for Eclipse +#Tue Jun 23 17:09:21 EET 2020 +m2e.projectLocation=C\:\\DEVEL\\stage\\tmp\\dcl350\\hr-domain +m2e.projectName=hr-domain +groupId=com.example +artifactId=hr-domain +version=0.0.1-SNAPSHOT diff --git a/hr-domain/target/classes/META-INF/maven/com.example/hr-domain/pom.xml b/hr-domain/target/classes/META-INF/maven/com.example/hr-domain/pom.xml new file mode 100644 index 0000000..d303f2b --- /dev/null +++ b/hr-domain/target/classes/META-INF/maven/com.example/hr-domain/pom.xml @@ -0,0 +1,35 @@ + + 4.0.0 + com.example + hr-domain + 0.0.1-SNAPSHOT + + + org.mockito + mockito-all + 1.10.19 + test + + + org.junit.jupiter + junit-jupiter-engine + 5.5.2 + test + + + + src + test + + + maven-compiler-plugin + 3.8.1 + + 11 + + + + + \ No newline at end of file diff --git a/hr-domain/target/maven-archiver/pom.properties b/hr-domain/target/maven-archiver/pom.properties new file mode 100644 index 0000000..6f6fcf0 --- /dev/null +++ b/hr-domain/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Tue Jun 23 17:09:29 EET 2020 +groupId=com.example +artifactId=hr-domain +version=0.0.1-SNAPSHOT diff --git a/hr-domain/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/hr-domain/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/hr-domain/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/hr-domain/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..cf5ec8d --- /dev/null +++ b/hr-domain/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,17 @@ +C:\DEVEL\stage\tmp\dcl350\hr-domain\src\com\example\hr\domain\BirthYear.java +C:\DEVEL\stage\tmp\dcl350\hr-domain\src\com\example\hr\infrastructure\EventPushlisher.java +C:\DEVEL\stage\tmp\dcl350\hr-domain\src\com\example\hr\events\EmployeeHiredEvent.java +C:\DEVEL\stage\tmp\dcl350\hr-domain\src\com\example\hr\application\business\SimpleEmployeeApplication.java +C:\DEVEL\stage\tmp\dcl350\hr-domain\src\com\example\hr\domain\TcKimlikNoRecord.java +C:\DEVEL\stage\tmp\dcl350\hr-domain\src\com\example\hr\events\BusinessEvent.java +C:\DEVEL\stage\tmp\dcl350\hr-domain\src\com\example\hr\domain\FullName.java +C:\DEVEL\stage\tmp\dcl350\hr-domain\src\com\example\hr\domain\Iban.java +C:\DEVEL\stage\tmp\dcl350\hr-domain\src\com\example\hr\application\EmployeeApplication.java +C:\DEVEL\stage\tmp\dcl350\hr-domain\src\com\example\hr\domain\Department.java +C:\DEVEL\stage\tmp\dcl350\hr-domain\src\com\example\hr\domain\TcKimlikNo.java +C:\DEVEL\stage\tmp\dcl350\hr-domain\src\com\example\hr\domain\MoneyCurrency.java +C:\DEVEL\stage\tmp\dcl350\hr-domain\src\com\example\hr\repository\EmployeeRepository.java +C:\DEVEL\stage\tmp\dcl350\hr-domain\src\com\example\hr\domain\Employee.java +C:\DEVEL\stage\tmp\dcl350\hr-domain\src\com\example\hr\domain\Photo.java +C:\DEVEL\stage\tmp\dcl350\hr-domain\src\com\example\hr\domain\Money.java +C:\DEVEL\stage\tmp\dcl350\hr-domain\src\com\example\hr\events\EmployeeFiredEvent.java diff --git a/hr-domain/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/hr-domain/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/hr-domain/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/hr-domain/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..df86b43 --- /dev/null +++ b/hr-domain/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -0,0 +1 @@ +C:\DEVEL\stage\tmp\dcl350\hr-domain\test\com\example\hr\application\business\SimpleEmployeeApplicationTest.java diff --git a/hr-domain/test/com/example/hr/application/business/SimpleEmployeeApplicationTest.java b/hr-domain/test/com/example/hr/application/business/SimpleEmployeeApplicationTest.java new file mode 100644 index 0000000..ec084c6 --- /dev/null +++ b/hr-domain/test/com/example/hr/application/business/SimpleEmployeeApplicationTest.java @@ -0,0 +1,53 @@ +package com.example.hr.application.business; + +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.EmployeeHiredEvent; +import com.example.hr.infrastructure.EventPushlisher; +import com.example.hr.repository.EmployeeRepository; + +class SimpleEmployeeApplicationTest { + + // Unit Testing -> Test Doubles + // 1. Dummy Object + // 2. Stub Object -> Partial Implementation -> Real Object + // 3. Fake Object -> Simple/Full Implementation (HashMap - in-memory implementation) + // 4. Mock Object -> Mocking/Spying Library -> Mockito + // 5. Spy Object + @Test + void hireEmployee_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).save(jack); + Mockito.doNothing().when(eventPublisher).publishEvent(new EmployeeHiredEvent("", "employees", jack) ); + // 2. call exercise method + var success = app.hireEmployee(jack); + // 3. Verification + assertTrue(success); + // 4. destroy setup + } + +} diff --git a/hr-microservice-hexagonal/pom.xml b/hr-microservice-hexagonal/pom.xml index 91b022f..395f84c 100644 --- a/hr-microservice-hexagonal/pom.xml +++ b/hr-microservice-hexagonal/pom.xml @@ -1,12 +1,13 @@ - 4.0.0 org.springframework.boot spring-boot-starter-parent 2.3.1.RELEASE - + com.example hr-microservice-hexagonal @@ -19,6 +20,11 @@ + + com.example + hr-domain + 0.0.1-SNAPSHOT + org.springframework.boot spring-boot-starter-data-jpa @@ -63,12 +69,8 @@ org.springframework.boot spring-boot-starter-test test - - - org.junit.vintage - junit-vintage-engine - - + diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/controller/EmployeeController.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/controller/EmployeeController.java index a37c47f..5c1d3f2 100644 --- a/hr-microservice-hexagonal/src/main/java/com/example/hr/controller/EmployeeController.java +++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/controller/EmployeeController.java @@ -3,6 +3,7 @@ import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.DeleteMapping; diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/orm/EmployeeEntity.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/orm/EmployeeEntity.java index 78a1474..0bd7066 100644 --- a/hr-microservice-hexagonal/src/main/java/com/example/hr/orm/EmployeeEntity.java +++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/orm/EmployeeEntity.java @@ -7,30 +7,33 @@ import javax.persistence.Id; import javax.persistence.Lob; import javax.persistence.Table; -import javax.validation.constraints.AssertTrue; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.validation.constraints.Size; +import org.hibernate.annotations.DynamicUpdate; + import com.example.hr.domain.Department; import com.example.validation.Iban; import com.example.validation.TcKimlikNo; @Entity @Table(name = "employees") +@DynamicUpdate public class EmployeeEntity { @Id @Column(name = "identity") @TcKimlikNo private String identity; - @Size(min=5) + @Size(min = 5) private String fullname; @Min(3_000) - private double salary; + //@Column(columnDefinition = "float default 1000") + private Double salary; @Iban private String iban; - //@AssertTrue - private boolean fulltime; + // @AssertTrue + private Boolean fulltime; @Max(2002) private int birthYear; @Lob diff --git a/hr-microservice-hexagonal/src/test/java/com/example/hr/HrMicroserviceHexagonalApplicationTests.java b/hr-microservice-hexagonal/src/test/java/com/example/hr/HrMicroserviceHexagonalApplicationTests.java index 66c89c4..dd3f785 100644 --- a/hr-microservice-hexagonal/src/test/java/com/example/hr/HrMicroserviceHexagonalApplicationTests.java +++ b/hr-microservice-hexagonal/src/test/java/com/example/hr/HrMicroserviceHexagonalApplicationTests.java @@ -1,13 +1,56 @@ package com.example.hr; +import static org.hamcrest.CoreMatchers.is; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import com.example.hr.application.EmployeeApplication; +import com.example.hr.domain.Department; +import com.example.hr.domain.Employee; +import com.example.hr.dto.EmployeeRequest; +import com.fasterxml.jackson.databind.ObjectMapper; -@SpringBootTest +@SpringBootTest(webEnvironment = WebEnvironment.MOCK, classes = HrMicroserviceHexagonalApplication.class) +@AutoConfigureMockMvc class HrMicroserviceHexagonalApplicationTests { + @Autowired + private MockMvc mvc; + @Autowired + private ObjectMapper mapper; + @MockBean + private EmployeeApplication employeeApplication; @Test - void contextLoads() { + void hireEmployee_success() throws Throwable { + // 1. Setup/Fixture + EmployeeRequest jack = new EmployeeRequest(); + jack.setIdentity("40310900232"); + jack.setFullname("jack bauer"); + jack.setBirthYear(1956); + jack.setSalary(100_000); + jack.setIban("TR820006235455781668847562"); + jack.setFulltime(true); + jack.setDepartment(Department.IT); + jack.setPhoto( + "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" + .getBytes()); + Mockito.when(employeeApplication.hireEmployee(Mockito.any(Employee.class))).thenReturn(true); + // 2.,3. Exercise + Verification + mvc.perform(MockMvcRequestBuilders.post("/employees").content(mapper.writeValueAsString(jack)) + .contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()) + .andExpect(jsonPath("status", is("success"))); + // 4. Destroy setup } }