diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..8b36a07ba88a21178621f5d93398142898276c5f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +# Use an official OpenJDK image as the base image +FROM openjdk:17-jdk-slim + +# Set the working directory inside the container +WORKDIR /app + +# Copy the JAR file into the container +COPY target/demo-0.0.1-SNAPSHOT.jar app.jar + +# Set the entrypoint to run the JAR +ENTRYPOINT ["java", "-jar", "app.jar"] diff --git a/deployment.yaml b/deployment.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6819b4b51cfc0504c58afe94ca57615ff6a96d7f --- /dev/null +++ b/deployment.yaml @@ -0,0 +1,32 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: springboot-app-deployment +spec: + replicas: 1 + selector: + matchLabels: + app: springboot-app + template: + metadata: + labels: + app: springboot-app + spec: + containers: + - name: springboot-container + image: us-central1-docker.pkg.dev/java-training-project-456905/springboot-repo/springboot-app + ports: + - containerPort: 8080 +--- +apiVersion: v1 +kind: Service +metadata: + name: springboot-service +spec: + type: LoadBalancer + selector: + app: springboot-app + ports: + - protocol: TCP + port: 80 + targetPort: 8080 diff --git a/src/main/java/org/example/Queries/Screenshots/img_1.png b/src/main/java/org/example/Queries/Screenshots/img_1.png new file mode 100644 index 0000000000000000000000000000000000000000..caddd0bb4469bb108b023fb28d918cdedd916c93 Binary files /dev/null and b/src/main/java/org/example/Queries/Screenshots/img_1.png differ diff --git a/src/main/java/org/example/Queries/Screenshots/img_2.png b/src/main/java/org/example/Queries/Screenshots/img_2.png new file mode 100644 index 0000000000000000000000000000000000000000..81933214907b34139f6fca75ca641ae951c9f336 Binary files /dev/null and b/src/main/java/org/example/Queries/Screenshots/img_2.png differ diff --git a/src/main/java/org/example/Queries/Screenshots/img_3.png b/src/main/java/org/example/Queries/Screenshots/img_3.png new file mode 100644 index 0000000000000000000000000000000000000000..e8c0e84376f9786eeab50dbb6d6741e74e823639 Binary files /dev/null and b/src/main/java/org/example/Queries/Screenshots/img_3.png differ diff --git a/src/main/java/org/example/Queries/Screenshots/img_4.png b/src/main/java/org/example/Queries/Screenshots/img_4.png new file mode 100644 index 0000000000000000000000000000000000000000..295dbe6b2c0bb6d8158b986f03650ac472e9a961 Binary files /dev/null and b/src/main/java/org/example/Queries/Screenshots/img_4.png differ diff --git a/src/test/java/org/example/Controller/EmployeeControllerDiffblueTest.java b/src/test/java/org/example/Controller/EmployeeControllerDiffblueTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e873886738c0a5fad49d6024da4d6ca906b8d861 --- /dev/null +++ b/src/test/java/org/example/Controller/EmployeeControllerDiffblueTest.java @@ -0,0 +1,167 @@ +package org.example.Controller; + +import static org.mockito.Mockito.anyInt; +import static org.mockito.Mockito.when; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.example.entity.Employees; +import org.example.services.EmployeeService; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +@ContextConfiguration(classes = {EmployeeController.class}) +@ExtendWith(SpringExtension.class) +class EmployeeControllerDiffblueTest { + @Autowired + private EmployeeController employeeController; + + @MockBean + private EmployeeService employeeService; + + /** + * Test {@link EmployeeController#getEmployees(int)}. + * <p> + * Method under test: {@link EmployeeController#getEmployees(int)} + */ + @Test + @DisplayName("Test getEmployees(int)") + @Tag("MaintainedByDiffblue") + void testGetEmployees() throws Exception { + // Arrange + Employees employees = new Employees(); + employees.setAge(1); + employees.setId(1); + employees.setName("Name"); + employees.setSalary(1); + when(employeeService.getEmployees(anyInt())).thenReturn(employees); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/employee/{id}", 1); + + // Act and Assert + MockMvcBuilders.standaloneSetup(employeeController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"id\":1,\"name\":\"Name\",\"age\":1,\"salary\":1}")); + } + + /** + * Test {@link EmployeeController#addEmployees(Employees)}. + * <p> + * Method under test: {@link EmployeeController#addEmployees(Employees)} + */ + @Test + @DisplayName("Test addEmployees(Employees)") + @Tag("MaintainedByDiffblue") + void testAddEmployees() throws Exception { + // Arrange + Employees employees = new Employees(); + employees.setAge(1); + employees.setId(1); + employees.setName("Name"); + employees.setSalary(1); + when(employeeService.save(Mockito.<Employees>any())).thenReturn(employees); + + Employees employees2 = new Employees(); + employees2.setAge(1); + employees2.setId(1); + employees2.setName("Name"); + employees2.setSalary(1); + String content = (new ObjectMapper()).writeValueAsString(employees2); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/employee") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + + // Act and Assert + MockMvcBuilders.standaloneSetup(employeeController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"id\":1,\"name\":\"Name\",\"age\":1,\"salary\":1}")); + } + + /** + * Test {@link EmployeeController#updateEmployees(Employees)}. + * <p> + * Method under test: {@link EmployeeController#updateEmployees(Employees)} + */ + @Test + @DisplayName("Test updateEmployees(Employees)") + @Tag("MaintainedByDiffblue") + void testUpdateEmployees() throws Exception { + // Arrange + Employees employees = new Employees(); + employees.setAge(1); + employees.setId(1); + employees.setName("Name"); + employees.setSalary(1); + when(employeeService.update(Mockito.<Employees>any())).thenReturn(employees); + + Employees employees2 = new Employees(); + employees2.setAge(1); + employees2.setId(1); + employees2.setName("Name"); + employees2.setSalary(1); + String content = (new ObjectMapper()).writeValueAsString(employees2); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.put("/employee") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + + // Act and Assert + MockMvcBuilders.standaloneSetup(employeeController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"id\":1,\"name\":\"Name\",\"age\":1,\"salary\":1}")); + } + + /** + * Test {@link EmployeeController#deleteEmployees(Employees)}. + * <p> + * Method under test: {@link EmployeeController#deleteEmployees(Employees)} + */ + @Test + @DisplayName("Test deleteEmployees(Employees)") + @Tag("MaintainedByDiffblue") + void testDeleteEmployees() throws Exception { + // Arrange + Employees employees = new Employees(); + employees.setAge(1); + employees.setId(1); + employees.setName("Name"); + employees.setSalary(1); + when(employeeService.delete(anyInt())).thenReturn(employees); + + Employees employees2 = new Employees(); + employees2.setAge(1); + employees2.setId(1); + employees2.setName("Name"); + employees2.setSalary(1); + String content = (new ObjectMapper()).writeValueAsString(employees2); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.delete("/employee") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + + // Act and Assert + MockMvcBuilders.standaloneSetup(employeeController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"id\":1,\"name\":\"Name\",\"age\":1,\"salary\":1}")); + } +} diff --git a/src/test/java/org/example/entity/EmployeesDiffblueTest.java b/src/test/java/org/example/entity/EmployeesDiffblueTest.java new file mode 100644 index 0000000000000000000000000000000000000000..892fc598efa7d1ad287eb27e06d3bde4929af68c --- /dev/null +++ b/src/test/java/org/example/entity/EmployeesDiffblueTest.java @@ -0,0 +1,47 @@ +package org.example.entity; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; + +class EmployeesDiffblueTest { + /** + * Test getters and setters. + * <p> + * Methods under test: + * <ul> + * <li>{@link Employees#setAge(int)} + * <li>{@link Employees#setId(int)} + * <li>{@link Employees#setName(String)} + * <li>{@link Employees#setSalary(int)} + * <li>{@link Employees#getAge()} + * <li>{@link Employees#getId()} + * <li>{@link Employees#getName()} + * <li>{@link Employees#getSalary()} + * </ul> + */ + @Test + @DisplayName("Test getters and setters") + @Tag("MaintainedByDiffblue") + void testGettersAndSetters() { + // Arrange + Employees employees = new Employees(); + + // Act + employees.setAge(1); + employees.setId(1); + employees.setName("Name"); + employees.setSalary(1); + int actualAge = employees.getAge(); + int actualId = employees.getId(); + String actualName = employees.getName(); + + // Assert + assertEquals("Name", actualName); + assertEquals(1, actualAge); + assertEquals(1, actualId); + assertEquals(1, employees.getSalary()); + } +} diff --git a/src/test/java/org/example/services/EmployeeServiceDiffblueTest.java b/src/test/java/org/example/services/EmployeeServiceDiffblueTest.java new file mode 100644 index 0000000000000000000000000000000000000000..baeb54f9ff2681437228b97a847ac90b04d6ee3c --- /dev/null +++ b/src/test/java/org/example/services/EmployeeServiceDiffblueTest.java @@ -0,0 +1,188 @@ +package org.example.services; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.isA; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.Optional; + +import org.example.entity.Employees; +import org.example.repository.EmployeeRepository; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.data.repository.CrudRepository; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +@ContextConfiguration(classes = {EmployeeService.class}) +@ExtendWith(SpringExtension.class) +class EmployeeServiceDiffblueTest { + @MockBean + private EmployeeRepository employeeRepository; + + @Autowired + private EmployeeService employeeService; + + /** + * Test {@link EmployeeService#save(Employees)}. + * <p> + * Method under test: {@link EmployeeService#save(Employees)} + */ + @Test + @DisplayName("Test save(Employees)") + @Tag("MaintainedByDiffblue") + void testSave() { + // Arrange + Employees employees = new Employees(); + employees.setAge(1); + employees.setId(1); + employees.setName("Name"); + employees.setSalary(1); + when(employeeRepository.save(Mockito.<Employees>any())).thenReturn(employees); + + Employees employee = new Employees(); + employee.setAge(1); + employee.setId(1); + employee.setName("Name"); + employee.setSalary(1); + + // Act + Employees actualSaveResult = employeeService.save(employee); + + // Assert + verify(employeeRepository).save(isA(Employees.class)); + assertSame(employees, actualSaveResult); + } + + /** + * Test {@link EmployeeService#getEmployees(int)}. + * <ul> + * <li>Given {@link Employees} (default constructor) Age is one.</li> + * <li>Then return {@link Employees} (default constructor).</li> + * </ul> + * <p> + * Method under test: {@link EmployeeService#getEmployees(int)} + */ + @Test + @DisplayName("Test getEmployees(int); given Employees (default constructor) Age is one; then return Employees (default constructor)") + @Tag("MaintainedByDiffblue") + void testGetEmployees_givenEmployeesAgeIsOne_thenReturnEmployees() { + // Arrange + Employees employees = new Employees(); + employees.setAge(1); + employees.setId(1); + employees.setName("Name"); + employees.setSalary(1); + Optional<Employees> ofResult = Optional.of(employees); + when(employeeRepository.findById(Mockito.<Integer>any())).thenReturn(ofResult); + + // Act + Employees actualEmployees = employeeService.getEmployees(1); + + // Assert + verify(employeeRepository).findById(eq(1)); + assertSame(employees, actualEmployees); + } + + /** + * Test {@link EmployeeService#update(Employees)}. + * <ul> + * <li>Given {@link EmployeeRepository} {@link CrudRepository#findById(Object)} return of {@link Employees} (default constructor).</li> + * <li>Then return {@link Employees} (default constructor).</li> + * </ul> + * <p> + * Method under test: {@link EmployeeService#update(Employees)} + */ + @Test + @DisplayName("Test update(Employees); given EmployeeRepository findById(Object) return of Employees (default constructor); then return Employees (default constructor)") + @Tag("MaintainedByDiffblue") + void testUpdate_givenEmployeeRepositoryFindByIdReturnOfEmployees_thenReturnEmployees() { + // Arrange + Employees employees = new Employees(); + employees.setAge(1); + employees.setId(1); + employees.setName("Name"); + employees.setSalary(1); + Optional<Employees> ofResult = Optional.of(employees); + + Employees employees2 = new Employees(); + employees2.setAge(1); + employees2.setId(1); + employees2.setName("Name"); + employees2.setSalary(1); + when(employeeRepository.save(Mockito.<Employees>any())).thenReturn(employees2); + when(employeeRepository.findById(Mockito.<Integer>any())).thenReturn(ofResult); + + Employees employee = new Employees(); + employee.setAge(1); + employee.setId(1); + employee.setName("Name"); + employee.setSalary(1); + + // Act + Employees actualUpdateResult = employeeService.update(employee); + + // Assert + verify(employeeRepository).findById(eq(1)); + verify(employeeRepository).save(isA(Employees.class)); + assertSame(employees2, actualUpdateResult); + } + + /** + * Test {@link EmployeeService#delete(int)}. + * <p> + * Method under test: {@link EmployeeService#delete(int)} + */ + @Test + @DisplayName("Test delete(int)") + @Tag("MaintainedByDiffblue") + void testDelete() { + // Arrange + doNothing().when(employeeRepository).deleteById(Mockito.<Integer>any()); + + // Act + Employees actualDeleteResult = employeeService.delete(1); + + // Assert + verify(employeeRepository).deleteById(eq(1)); + assertNull(actualDeleteResult.getName()); + assertEquals(0, actualDeleteResult.getAge()); + assertEquals(0, actualDeleteResult.getId()); + assertEquals(0, actualDeleteResult.getSalary()); + } + + /** + * Test getters and setters. + * <p> + * Methods under test: + * <ul> + * <li>{@link EmployeeService#setEmployeeRepository(EmployeeRepository)} + * <li>{@link EmployeeService#getEmployeeRepository()} + * </ul> + */ + @Test + @DisplayName("Test getters and setters") + @Tag("MaintainedByDiffblue") + void testGettersAndSetters() { + // Arrange + EmployeeService employeeService = new EmployeeService(); + EmployeeRepository employeeRepository = mock(EmployeeRepository.class); + + // Act + employeeService.setEmployeeRepository(employeeRepository); + + // Assert + assertSame(employeeRepository, employeeService.getEmployeeRepository()); + } +}