diff --git a/pom.xml b/pom.xml
index cb70553..e6d2eee 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,17 +23,42 @@
spring-boot-starter-data-jpa
+
org.springframework.boot
spring-boot-starter-web
+ org.testcontainers
+ junit-jupiter
+ 1.17.6
+ test
+
+
+
+
+
+
+ org.testcontainers
+ mysql
+ 1.17.6
+ test
+
+
+
+ mysql
+ mysql-connector-java
+ 8.0.12
+
+
+
org.projectlombok
lombok
diff --git a/src/main/java/net/tigrisTesting/controller/EmployeeController.java b/src/main/java/net/tigrisTesting/controller/EmployeeController.java
new file mode 100644
index 0000000..89b8a68
--- /dev/null
+++ b/src/main/java/net/tigrisTesting/controller/EmployeeController.java
@@ -0,0 +1,60 @@
+package net.tigrisTesting.controller;
+
+import net.tigrisTesting.model.Employee;
+import net.tigrisTesting.service.EmployeeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/employee/")
+public class EmployeeController {
+ private EmployeeService employeeService;
+
+ public EmployeeController(EmployeeService employeeService){
+ this.employeeService=employeeService;
+ }
+
+ @PostMapping()
+ @ResponseStatus(HttpStatus.CREATED)
+ public Employee createEmployee(@RequestBody Employee employee){
+
+ return employeeService.saveEmployee(employee);
+ }
+
+ @GetMapping
+ public List getAllEmployees(){
+ return employeeService.getAllEmployees();
+ }
+
+ @GetMapping("{id}")
+ public ResponseEntity getEmployeeById(@PathVariable("id") long employeeId){
+ return employeeService.getEmployeeById(employeeId)
+ .map(ResponseEntity::ok)
+ .orElseGet(()->ResponseEntity.notFound().build());
+ }
+
+ @PutMapping("{id}")
+ public ResponseEntity updateEmployee(@PathVariable("id") long employeeId,@RequestBody Employee employee){
+
+ return employeeService.getEmployeeById(employeeId)
+ .map(savedEmployee->{
+ savedEmployee.setFirstName(employee.getFirstName());
+ savedEmployee.setLastName(employee.getLastName());
+ savedEmployee.setEmail(employee.getEmail());
+ Employee updatedEmployee= employeeService.updateEmployee(savedEmployee);
+ return new ResponseEntity<>(updatedEmployee,HttpStatus.OK);
+ }).orElseGet(()->ResponseEntity.notFound().build());
+ }
+
+ @DeleteMapping("{id}")
+ public ResponseEntity deleteEmployee(@PathVariable("id") long employeeId){
+
+ employeeService.deleteEmployee(employeeId);
+ return new ResponseEntity("Employee deleted successfully!",HttpStatus.OK);
+
+ }
+}
diff --git a/src/main/java/net/tigrisTesting/repository/EmployeeRepository.java b/src/main/java/net/tigrisTesting/repository/EmployeeRepository.java
index 9207cb3..426ee73 100644
--- a/src/main/java/net/tigrisTesting/repository/EmployeeRepository.java
+++ b/src/main/java/net/tigrisTesting/repository/EmployeeRepository.java
@@ -26,4 +26,4 @@ public interface EmployeeRepository extends JpaRepository {
@Query(value = "select * from employee e where e.first_name =:firstName and e.last_name =:lastName",nativeQuery = true)
public Employee findByNativeNamedParams(@Param("firstName") String firstName, @Param("lastName") String lastName);
-}
+}
\ No newline at end of file
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 8b13789..338150f 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1 +1,5 @@
-
+spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+spring.datasource.url=jdbc:mysql://localhost:3306/emptest?allowPublicKeyRetrieval=true&useSSL=false
+spring.datasource.username=root
+spring.datasource.password=root
+spring.jpa.hibernate.ddl-auto=update
\ No newline at end of file
diff --git a/src/test/java/net/tigrisTesting/controller/EmployeeControllerTest.java b/src/test/java/net/tigrisTesting/controller/EmployeeControllerTest.java
new file mode 100644
index 0000000..0f9840f
--- /dev/null
+++ b/src/test/java/net/tigrisTesting/controller/EmployeeControllerTest.java
@@ -0,0 +1,158 @@
+package net.tigrisTesting.controller;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import net.tigrisTesting.model.Employee;
+import net.tigrisTesting.service.EmployeeService;
+import org.hamcrest.CoreMatchers;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.BDDMockito.given;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
+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.ResultActions;
+
+import static org.mockito.BDDMockito.willDoNothing;
+import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+
+@WebMvcTest
+class EmployeeControllerTest {
+
+ @Autowired
+ private MockMvc mockMvc;
+
+ @MockBean
+ private EmployeeService employeeService;
+
+ @Autowired
+ private ObjectMapper objectMapper;
+
+ //test for create employee controller layer
+ @Test
+ @DisplayName("Test for Create employee controller")
+ public void givenEmployeeObject_whenEmployeeCreate_thenReturnEmployeeObject() throws Exception {
+ //given --precondition operation
+ Employee employee = Employee.builder()
+ .firstName("bilal")
+ .lastName("yakut")
+ .email("bilal@mail.com")
+ .build();
+ given(employeeService.saveEmployee(any(Employee.class)))
+ .willAnswer((invocationOnMock -> invocationOnMock.getArgument(0)));
+
+ //when --action that we are going test
+
+ ResultActions response = mockMvc.perform(post("/api/employee/")
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(objectMapper.writeValueAsString(employee)));
+
+ //then verify the output
+ response
+ .andDo(print())
+ .andExpect(status().isCreated())
+ .andExpect(jsonPath("$.firstName", CoreMatchers.is(employee.getFirstName())))
+ .andExpect(jsonPath("$.lastName", CoreMatchers.is(employee.getLastName())))
+ .andExpect(jsonPath("$.email", CoreMatchers.is(employee.getEmail())));
+
+ }
+
+ //test for get All Employee Rest Api
+ @Test
+ @DisplayName("Test for get All employee Rest Api")
+ public void givenListOfEmployee_whenGetAllEmployees_thenReturnListOfEmployees() throws Exception {
+ //given --precondition operation
+ List listOfEmployees = new ArrayList<>();
+ listOfEmployees.add(Employee.builder().firstName("bilal").lastName("yakut").email("bilal@mail.com").build());
+ listOfEmployees.add(Employee.builder().firstName("jenny").lastName("jenny").email("jenn@mail.com").build());
+ given(employeeService.getAllEmployees()).willReturn(listOfEmployees);
+
+ //when --action that we are going test
+ ResultActions response = mockMvc.perform(get("/api/employee/"));
+
+ //then verify the output
+ response.andExpect(status().isOk())
+ .andExpect(jsonPath("$.size()", CoreMatchers.is(listOfEmployees.size())));
+ }
+
+
+ //test for get Employee ById Rest Api
+ //positive scenario -if employee id valid
+ @Test
+ @DisplayName("GetEmployeeById rest controller operation")
+ public void givenEmployeeId_whenGetEmployeeById_thenReturnEmployeeObject() throws Exception {
+ //given --precondition operation
+ long employeeId = 1L;
+ Employee employee = Employee.builder().firstName("bilal").lastName("yakut").email("bilal@mail.com").build();
+ given(employeeService.getEmployeeById(employeeId)).willReturn(Optional.of(employee));
+
+ //when --action that we are going test
+ ResultActions response = mockMvc.perform(get("/api/employee/{id}", employeeId));
+
+ //then verify the output
+ response
+ .andDo(print())
+ .andExpect(status().isOk())
+ .andExpect(jsonPath("$.firstName", CoreMatchers.is(employee.getFirstName())))
+ .andExpect(jsonPath("$.lastName", CoreMatchers.is(employee.getLastName())))
+ .andExpect(jsonPath("$.email", CoreMatchers.is(employee.getEmail())));
+
+ }
+
+ //Test for update Employee Rest Api
+ @Test
+ public void givenUpdatedEmployee_whenUpdatedEmployee_thenReturnUpdateObject() throws Exception {
+ //given --precondition operation
+ long employeeId = 1L;
+ Employee savedEmployee = Employee.builder()
+ .firstName("bilal").lastName("yakut").email("bilal@mail.com").build();
+
+ Employee updatedEmployee = Employee.builder()
+ .firstName("billy").lastName("billy").email("billy@mail.com").build();
+
+ given(employeeService.getEmployeeById(employeeId)).willReturn(Optional.ofNullable(savedEmployee));
+ given(employeeService.updateEmployee(any(Employee.class))).willAnswer((invocation) -> invocation.getArgument(0));
+
+ //when --action that we are going test
+ ResultActions response = mockMvc.perform(put("/api/employee/{id}", employeeId)
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(objectMapper.writeValueAsString(updatedEmployee)));
+
+ //then verify the output
+
+ response
+ .andExpect(status().isOk())
+ .andDo(print())
+ .andExpect(jsonPath("$.firstName", CoreMatchers.is(updatedEmployee.getFirstName())))
+ .andExpect(jsonPath("$.lastName", CoreMatchers.is(updatedEmployee.getLastName())))
+ .andExpect(jsonPath("$.email", CoreMatchers.is(updatedEmployee.getEmail())));
+
+ }
+
+ //test for delete employee Rest Api
+ @Test
+ public void givenEmployeeId_whenDeleteEmployee_thenReturn200() throws Exception {
+ //given --precondition operation
+ long employeeId=1L;
+ willDoNothing().given(employeeService).deleteEmployee(employeeId);
+
+ //when --action that we are going test
+ ResultActions response = mockMvc.perform(delete("/api/employee/{id}", employeeId));
+
+ //then verify the output
+ response.andExpect(status().isOk())
+ .andDo(print());
+
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/net/tigrisTesting/integration/AbstractContainerBaseTest.java b/src/test/java/net/tigrisTesting/integration/AbstractContainerBaseTest.java
new file mode 100644
index 0000000..335b6a8
--- /dev/null
+++ b/src/test/java/net/tigrisTesting/integration/AbstractContainerBaseTest.java
@@ -0,0 +1,31 @@
+package net.tigrisTesting.integration;
+
+import org.springframework.test.context.DynamicPropertyRegistry;
+import org.springframework.test.context.DynamicPropertySource;
+import org.testcontainers.containers.MySQLContainer;
+
+public abstract class AbstractContainerBaseTest {
+
+ static final MySQLContainer MY_SQL_CONTAINER ;
+
+
+ static {
+ MY_SQL_CONTAINER=new MySQLContainer("mysql:latest")
+ .withPassword("password")
+ .withUsername("username")
+ .withDatabaseName("databaseName");
+
+ MY_SQL_CONTAINER.start();
+ }
+
+
+ @DynamicPropertySource
+ public static void dynamicPropertySource(DynamicPropertyRegistry registry){
+ registry.add("spring.datasource.url",MY_SQL_CONTAINER::getJdbcUrl);
+ registry.add("spring.datasource.username",MY_SQL_CONTAINER::getUsername);
+ registry.add("spring.datasource.password",MY_SQL_CONTAINER::getPassword);
+ }
+
+
+
+}
diff --git a/src/test/java/net/tigrisTesting/integration/EmployeeControllerIT.java b/src/test/java/net/tigrisTesting/integration/EmployeeControllerIT.java
new file mode 100644
index 0000000..3db7953
--- /dev/null
+++ b/src/test/java/net/tigrisTesting/integration/EmployeeControllerIT.java
@@ -0,0 +1,187 @@
+package net.tigrisTesting.integration;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import net.tigrisTesting.model.Employee;
+import net.tigrisTesting.repository.EmployeeRepository;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+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.http.MediaType;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.ResultActions;
+import org.testcontainers.junit.jupiter.Testcontainers;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+@SpringBootTest(webEnvironment=SpringBootTest.WebEnvironment.RANDOM_PORT)
+@AutoConfigureMockMvc
+@Testcontainers
+public class EmployeeControllerIT extends AbstractContainerBaseTest {
+
+ @Autowired
+ private MockMvc mockMvc;
+ @Autowired
+ private EmployeeRepository employeeRepository;
+
+ @Autowired
+ private ObjectMapper objectMapper;
+
+ @BeforeEach
+ void setup(){
+ employeeRepository.deleteAll();
+ }
+
+ @Test
+ public void givenEmployeeObject_whenEmployeeCreate_thenReturnEmployeeObject() throws Exception {
+
+ //given --precondition operation
+ Employee employee = Employee.builder()
+ .firstName("bilal")
+ .lastName("yakut")
+ .email("bilal@mail.com")
+ .build();
+ //when --action that we are going test
+
+ ResultActions response = mockMvc.perform(post("/api/employee/")
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(objectMapper.writeValueAsString(employee)));
+
+ //then verify the output
+ response
+ .andDo(print())
+ .andExpect(status().isCreated())
+ .andExpect(jsonPath("$.firstName", is(employee.getFirstName())))
+ .andExpect(jsonPath("$.lastName", is(employee.getLastName())))
+ .andExpect(jsonPath("$.email", is(employee.getEmail())));
+
+ }
+
+ @Test
+ @DisplayName("Test for get All employee Rest Api")
+ public void givenListOfEmployee_whenGetAllEmployees_thenReturnListOfEmployees() throws Exception {
+ //given --precondition operation
+ List listOfEmployees = new ArrayList<>();
+ listOfEmployees.add(Employee.builder().firstName("bilal").lastName("yakut").email("bilal@mail.com").build());
+ listOfEmployees.add(Employee.builder().firstName("jenny").lastName("jenny").email("jenn@mail.com").build());
+ employeeRepository.saveAll(listOfEmployees);
+
+ //when --action that we are going test
+ ResultActions response = mockMvc.perform(get("/api/employee/"));
+
+ //then verify the output
+ response.andExpect(status().isOk())
+ .andExpect(jsonPath("$.size()", is(listOfEmployees.size())));
+ }
+
+ @Test
+ @DisplayName("GetEmployeeById rest controller operation")
+ public void givenEmployeeId_whenGetEmployeeById_thenReturnEmployeeObject() throws Exception {
+ //given --precondition operation
+
+ Employee employee = Employee.builder().firstName("bilal").lastName("yakut").email("bilal@mail.com").build();
+ employeeRepository.save(employee);
+
+ //when --action that we are going test
+ ResultActions response = mockMvc.perform(get("/api/employee/{id}", employee.getId()));
+
+ //then verify the output
+ response
+ .andDo(print())
+ .andExpect(status().isOk())
+ .andExpect(jsonPath("$.firstName", is(employee.getFirstName())))
+ .andExpect(jsonPath("$.lastName", is(employee.getLastName())))
+ .andExpect(jsonPath("$.email", is(employee.getEmail())));
+
+ }
+
+ // JUnit test for update employee REST API - positive scenario
+ @Test
+ public void givenUpdatedEmployee_whenUpdateEmployee_thenReturnUpdateEmployeeObject() throws Exception{
+ // given - precondition or setup
+ Employee savedEmployee = Employee.builder()
+ .firstName("bilal")
+ .lastName("yakut")
+ .email("bilal@mail.com")
+ .build();
+ employeeRepository.save(savedEmployee);
+
+ Employee updatedEmployee = Employee.builder()
+ .firstName("Billy")
+ .lastName("ykt")
+ .email("billy@mail.com")
+ .build();
+
+ // when - action or the behaviour that we are going test
+ ResultActions response = mockMvc.perform(put("/api/employee/{id}", savedEmployee.getId())
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(objectMapper.writeValueAsString(updatedEmployee)));
+
+
+ // then - verify the output
+ response.andExpect(status().isOk())
+ .andDo(print())
+ .andExpect(jsonPath("$.firstName", is(updatedEmployee.getFirstName())))
+ .andExpect(jsonPath("$.lastName", is(updatedEmployee.getLastName())))
+ .andExpect(jsonPath("$.email", is(updatedEmployee.getEmail())));
+ }
+
+ // JUnit test for update employee REST API - negative scenario
+ @Test
+ public void givenUpdatedEmployee_whenUpdateEmployee_thenReturn404() throws Exception{
+ // given - precondition or setup
+ long employeeId = 1L;
+ Employee savedEmployee = Employee.builder()
+ .firstName("bilal")
+ .lastName("yakut")
+ .email("bilal@mail.com")
+ .build();
+ employeeRepository.save(savedEmployee);
+
+ Employee updatedEmployee = Employee.builder()
+ .firstName("Billy")
+ .lastName("ykt")
+ .email("billy@mail.com")
+ .build();
+
+ // when - action or the behaviour that we are going test
+ ResultActions response = mockMvc.perform(put("/api/employee/{id}", employeeId)
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(objectMapper.writeValueAsString(updatedEmployee)));
+
+ // then - verify the output
+ response.andExpect(status().isNotFound())
+ .andDo(print());
+ }
+
+
+ //test for delete employee Rest Api
+ @Test
+ public void givenEmployeeId_whenDeleteEmployee_thenReturn200() throws Exception {
+ //given --precondition operation
+ Employee savedEmployee = Employee.builder()
+ .firstName("bilal")
+ .lastName("yakut")
+ .email("bilal@mail.com")
+ .build();
+ employeeRepository.save(savedEmployee);
+
+ //when --action that we are going test
+ ResultActions response = mockMvc.perform(delete("/api/employee/{id}", savedEmployee.getId()));
+
+ //then verify the output
+ response.andExpect(status().isOk())
+ .andDo(print());
+
+ }
+
+}
diff --git a/src/test/java/net/tigrisTesting/integration/EmployeeControllerITest.java b/src/test/java/net/tigrisTesting/integration/EmployeeControllerITest.java
new file mode 100644
index 0000000..56cca02
--- /dev/null
+++ b/src/test/java/net/tigrisTesting/integration/EmployeeControllerITest.java
@@ -0,0 +1,182 @@
+package net.tigrisTesting.integration;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import net.tigrisTesting.model.Employee;
+import net.tigrisTesting.repository.EmployeeRepository;
+import static org.hamcrest.CoreMatchers.*;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+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.http.MediaType;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.ResultActions;
+import java.util.ArrayList;
+import java.util.List;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+@SpringBootTest(webEnvironment=SpringBootTest.WebEnvironment.RANDOM_PORT)
+@AutoConfigureMockMvc
+public class EmployeeControllerITest {
+
+ @Autowired
+ private MockMvc mockMvc;
+ @Autowired
+ private EmployeeRepository employeeRepository;
+
+ @Autowired
+ private ObjectMapper objectMapper;
+
+ @BeforeEach
+ void setup(){
+ employeeRepository.deleteAll();
+ }
+
+ @Test
+ public void givenEmployeeObject_whenEmployeeCreate_thenReturnEmployeeObject() throws Exception {
+ //given --precondition operation
+ Employee employee = Employee.builder()
+ .firstName("bilal")
+ .lastName("yakut")
+ .email("bilal@mail.com")
+ .build();
+ //when --action that we are going test
+
+ ResultActions response = mockMvc.perform(post("/api/employee/")
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(objectMapper.writeValueAsString(employee)));
+
+ //then verify the output
+ response
+ .andDo(print())
+ .andExpect(status().isCreated())
+ .andExpect(jsonPath("$.firstName", is(employee.getFirstName())))
+ .andExpect(jsonPath("$.lastName", is(employee.getLastName())))
+ .andExpect(jsonPath("$.email", is(employee.getEmail())));
+
+ }
+
+ @Test
+ @DisplayName("Test for get All employee Rest Api")
+ public void givenListOfEmployee_whenGetAllEmployees_thenReturnListOfEmployees() throws Exception {
+ //given --precondition operation
+ List listOfEmployees = new ArrayList<>();
+ listOfEmployees.add(Employee.builder().firstName("bilal").lastName("yakut").email("bilal@mail.com").build());
+ listOfEmployees.add(Employee.builder().firstName("jenny").lastName("jenny").email("jenn@mail.com").build());
+ employeeRepository.saveAll(listOfEmployees);
+
+ //when --action that we are going test
+ ResultActions response = mockMvc.perform(get("/api/employee/"));
+
+ //then verify the output
+ response.andExpect(status().isOk())
+ .andExpect(jsonPath("$.size()", is(listOfEmployees.size())));
+ }
+
+ @Test
+ @DisplayName("GetEmployeeById rest controller operation")
+ public void givenEmployeeId_whenGetEmployeeById_thenReturnEmployeeObject() throws Exception {
+ //given --precondition operation
+
+ Employee employee = Employee.builder().firstName("bilal").lastName("yakut").email("bilal@mail.com").build();
+ employeeRepository.save(employee);
+
+ //when --action that we are going test
+ ResultActions response = mockMvc.perform(get("/api/employee/{id}", employee.getId()));
+
+ //then verify the output
+ response
+ .andDo(print())
+ .andExpect(status().isOk())
+ .andExpect(jsonPath("$.firstName", is(employee.getFirstName())))
+ .andExpect(jsonPath("$.lastName", is(employee.getLastName())))
+ .andExpect(jsonPath("$.email", is(employee.getEmail())));
+
+ }
+
+ // JUnit test for update employee REST API - positive scenario
+ @Test
+ public void givenUpdatedEmployee_whenUpdateEmployee_thenReturnUpdateEmployeeObject() throws Exception{
+ // given - precondition or setup
+ Employee savedEmployee = Employee.builder()
+ .firstName("bilal")
+ .lastName("yakut")
+ .email("bilal@mail.com")
+ .build();
+ employeeRepository.save(savedEmployee);
+
+ Employee updatedEmployee = Employee.builder()
+ .firstName("Billy")
+ .lastName("ykt")
+ .email("billy@mail.com")
+ .build();
+
+ // when - action or the behaviour that we are going test
+ ResultActions response = mockMvc.perform(put("/api/employee/{id}", savedEmployee.getId())
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(objectMapper.writeValueAsString(updatedEmployee)));
+
+
+ // then - verify the output
+ response.andExpect(status().isOk())
+ .andDo(print())
+ .andExpect(jsonPath("$.firstName", is(updatedEmployee.getFirstName())))
+ .andExpect(jsonPath("$.lastName", is(updatedEmployee.getLastName())))
+ .andExpect(jsonPath("$.email", is(updatedEmployee.getEmail())));
+ }
+
+ // JUnit test for update employee REST API - negative scenario
+ @Test
+ public void givenUpdatedEmployee_whenUpdateEmployee_thenReturn404() throws Exception{
+ // given - precondition or setup
+ long employeeId = 1L;
+ Employee savedEmployee = Employee.builder()
+ .firstName("bilal")
+ .lastName("yakut")
+ .email("bilal@mail.com")
+ .build();
+ employeeRepository.save(savedEmployee);
+
+ Employee updatedEmployee = Employee.builder()
+ .firstName("Billy")
+ .lastName("ykt")
+ .email("billy@mail.com")
+ .build();
+
+ // when - action or the behaviour that we are going test
+ ResultActions response = mockMvc.perform(put("/api/employee/{id}", employeeId)
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(objectMapper.writeValueAsString(updatedEmployee)));
+
+ // then - verify the output
+ response.andExpect(status().isNotFound())
+ .andDo(print());
+ }
+
+
+ //test for delete employee Rest Api
+ @Test
+ public void givenEmployeeId_whenDeleteEmployee_thenReturn200() throws Exception {
+ //given --precondition operation
+ Employee savedEmployee = Employee.builder()
+ .firstName("bilal")
+ .lastName("yakut")
+ .email("bilal@mail.com")
+ .build();
+ employeeRepository.save(savedEmployee);
+
+ //when --action that we are going test
+ ResultActions response = mockMvc.perform(delete("/api/employee/{id}", savedEmployee.getId()));
+
+ //then verify the output
+ response.andExpect(status().isOk())
+ .andDo(print());
+
+ }
+
+}
diff --git a/src/test/java/net/tigrisTesting/repository/EmployeeRepositoryITest.java b/src/test/java/net/tigrisTesting/repository/EmployeeRepositoryITest.java
new file mode 100644
index 0000000..d2ded54
--- /dev/null
+++ b/src/test/java/net/tigrisTesting/repository/EmployeeRepositoryITest.java
@@ -0,0 +1,233 @@
+package net.tigrisTesting.repository;
+
+import net.tigrisTesting.integration.AbstractContainerBaseTest;
+import net.tigrisTesting.model.Employee;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
+import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
+
+import java.util.List;
+import java.util.Optional;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+
+@DataJpaTest
+@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
+class EmployeeRepositoryITest extends AbstractContainerBaseTest {
+
+ @Autowired
+ private EmployeeRepository employeeRepository;
+ private Employee employee;
+
+ @BeforeEach
+ public void setup(){
+ employee = Employee.builder()
+ .firstName("bilal")
+ .lastName("yakut")
+ .email("bilalykt@mail.com")
+ .build();
+ }
+
+ //JUnit test for save employee operation
+
+ @Test
+ @DisplayName("Saving employee operation")
+ public void givenEmployeeObject_whenSave_thenReturnSavedEmployee() {
+
+ //given - precondition or setup
+ /* Employee employee = Employee.builder()
+ .firstName("bilal")
+ .lastName("yakut")
+ .email("bilalykt@mail.com")
+ .build();*/
+
+ //when -action or the behavior that we are going test
+
+ Employee savedEmployee = employeeRepository.save(employee);
+
+ //then verify the output
+
+ assertThat(savedEmployee).isNotNull();
+ assertThat(savedEmployee.getId()).isGreaterThan(0);
+
+ }
+
+ //JUnit test for
+ @Test
+ @DisplayName("Get All Employee operation")
+ public void givenEmployeeList_whenFindAll_thenEmployeeList() {
+ //given --precondition operation
+ Employee employee1 = Employee.builder()
+ .firstName("bilal")
+ .lastName("yakut")
+ .email("bilalykt@mail.com")
+ .build();
+ Employee employee2 = Employee.builder()
+ .firstName("jennifer")
+ .lastName("jennifer")
+ .email("jennifer@mail.com")
+ .build();
+ Employee employee3 = Employee.builder()
+ .firstName("ema")
+ .lastName("ema")
+ .email("ema@mail.com")
+ .build();
+
+ employeeRepository.save(employee1);
+ employeeRepository.save(employee2);
+ employeeRepository.save(employee3);
+
+ //when --action that we are going test
+ List employeeList = employeeRepository.findAll();
+
+
+ //then verify the output
+ assertThat(employeeList).isNotNull();
+ assertThat(employeeList.size()).isEqualTo(3);
+ }
+
+
+ //test for getOneEmployeeById operation
+ @Test
+ @DisplayName("Get Employee By Id operation")
+ public void givenEmployeeObject_whenFindEmployeeById_thenReturnEmployeeObject() {
+ //given --precondition operation
+ employeeRepository.save(employee);
+
+ //when --action that we are going test
+ Employee employeeDb = employeeRepository.findById(employee.getId()).get();
+
+ //then verify the output
+ assertThat(employeeDb).isNotNull();
+
+
+ }
+
+ //test for get Employee by Email operation
+ @Test
+ @DisplayName("Get Employee By Email operation")
+ public void givenEmployeeMail_whenFindEmployeeByEmail_thenEmployeeObject() {
+ //given --precondition operation
+
+ employeeRepository.save(employee);
+
+ //when --action that we are going test
+ Employee employeeDb = employeeRepository.findByEmail(employee.getEmail());
+
+ //then verify the output
+ assertThat(employeeDb).isNotNull();
+ }
+
+ //test for update employee operation
+ @Test
+ @DisplayName("update Employee with by id operation")
+ public void givenEmployeeObject_whenUpdateEmployee_thenReturnEmployeeObject() {
+ //given --precondition operation
+ employeeRepository.save(employee);
+
+ //when --action that we are going test
+
+ Employee employeeDb = employeeRepository.findById(employee.getId()).get();
+ employeeDb.setEmail("billy@mail.com");
+ employeeDb.setFirstName("bilal");
+ employeeDb.setLastName("yakut");
+ Employee updatedEmployee = employeeRepository.save(employeeDb);
+ //then verify the output
+ assertThat(updatedEmployee.getEmail()).isEqualTo("billy@mail.com");
+ assertThat(updatedEmployee.getFirstName()).isEqualTo("bilal");
+ assertThat(updatedEmployee.getLastName()).isEqualTo("yakut");
+
+
+ }
+
+
+ //test for delete employee operation
+ @Test
+ @DisplayName("delete employee operation")
+ public void givenEmployeeObject_whenDeleteEmployee_thenRemoveEmployee() {
+ //given --precondition operation
+ employeeRepository.save(employee);
+
+ //when --action that we are going test
+ //employeeRepository.deleteById(employee.getId());
+ employeeRepository.delete(employee);
+ Optional optionalEmployee = employeeRepository.findById(employee.getId());
+
+ //then verify the output
+ assertThat(optionalEmployee).isEmpty();
+ }
+
+
+ //test for custom query jpql get employee custom query with index
+ @Test
+ @DisplayName("Find Employee by firstName and lastName")
+ public void givenFirstNameAndLastName_whenFindEmployeeJPQL_thenReturnEmployeeObject() {
+ //given --precondition operation
+ employeeRepository.save(employee);
+ String firstName="bilal";
+ String lastName="yakut";
+
+ //when --action that we are going test
+ Employee employeeDb = employeeRepository.findByJPQL(firstName, lastName);
+
+ //then verify the output
+ assertThat(employeeDb).isNotNull();
+
+ }
+
+ //test for custom query jpql get employee custom query with name params
+ @Test
+ @DisplayName("Find Employee by firstName and lastName with params")
+ public void givenFirstNameAndLastName_whenFindEmployeeJPQLParams_thenReturnEmployeeObject() {
+ //given --precondition operation
+ employeeRepository.save(employee);
+ String firstName="bilal";
+ String lastName="yakut";
+
+ //when --action that we are going test
+ Employee employeeDb = employeeRepository.findByJPQLParams(firstName, lastName);
+
+ //then verify the output
+ assertThat(employeeDb).isNotNull();
+
+ }
+
+
+ //test for custom native query get employee ,custom query with index params
+ @Test
+ @DisplayName("Find Employee by firstName and lastName ")
+ public void givenFirstNameAndLastName_whenFindEmployeeNativeIndexSQL_thenReturnEmployeeObject() {
+ //given --precondition operation
+ employeeRepository.save(employee);
+ String firstName="bilal";
+ String lastName="yakut";
+
+ //when --action that we are going test
+ Employee employeeDb = employeeRepository.findByNativeSql(firstName, lastName);
+
+ //then verify the output
+ assertThat(employeeDb).isNotNull();
+
+ }
+
+ //test for custom native query get employee ,custom query with named params
+ @Test
+ @DisplayName("Find Employee by firstName and lastName ")
+ public void givenFirstNameAndLastName_whenFindEmployeeNativeNamedSQL_thenReturnEmployeeObject() {
+ //given --precondition operation
+ employeeRepository.save(employee);
+ String firstName="bilal";
+ String lastName="yakut";
+
+ //when --action that we are going test
+ Employee employeeDb = employeeRepository.findByNativeNamedParams(firstName, lastName);
+
+ //then verify the output
+ assertThat(employeeDb).isNotNull();
+
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/net/tigrisTesting/repository/EmployeeRepositoryTest.java b/src/test/java/net/tigrisTesting/repository/EmployeeRepositoryTest.java
index 02a0936..6e58189 100644
--- a/src/test/java/net/tigrisTesting/repository/EmployeeRepositoryTest.java
+++ b/src/test/java/net/tigrisTesting/repository/EmployeeRepositoryTest.java
@@ -22,11 +22,11 @@ class EmployeeRepositoryTest {
@BeforeEach
public void setup(){
- employee = Employee.builder()
- .firstName("bilal")
- .lastName("yakut")
- .email("bilalykt@mail.com")
- .build();
+ employee = Employee.builder()
+ .firstName("bilal")
+ .lastName("yakut")
+ .email("bilalykt@mail.com")
+ .build();
}
//JUnit test for save employee operation