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());
+ }
+}