package com.mongo.demo.controller; import com.mongo.demo.dto.EmployeeDto; import com.mongo.demo.entity.Employee; import com.mongo.demo.service.EmployeeService; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import reactor.core.publisher.Mono; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.*; class EmployeeControllerTest { @Mock EmployeeService service; @InjectMocks EmployeeController employeeController; @BeforeEach void setUp() { MockitoAnnotations.openMocks(this); } @Test void testGetEmployeesDetails() { when(service.getEmployeesDetails()).thenReturn(buildEmployeeList()); Mono> result = employeeController.getEmployeesDetails(); result.subscribe(employees -> { Assertions.assertEquals("1", employees.get(0).getId()); }); } private Mono> buildEmployeeList() { List employeeList=new ArrayList<>(); Employee employeeDto=new Employee(); employeeDto.setId("1"); employeeDto.setName("Bala"); employeeDto.setDesignation("Module Lead"); employeeDto.setSalary(new BigDecimal(100000)); employeeList.add(employeeDto); return Mono.just(employeeList); } @Test void testGetEmployeeDetails() { when(service.getEmployeeDetails(anyString())).thenReturn(buildCreateEmployee()); Mono result = employeeController.getEmployeeDetails("2"); result.subscribe(employeeDto -> { Assertions.assertEquals("2", employeeDto.getId()); }); } @Test void testGetEmployeeDetailsWithNoID() { when(service.getEmployeeDetails(anyString())).thenThrow(new RuntimeException()); assertThrows(RuntimeException.class, () -> { Mono result = employeeController.getEmployeeDetails("id"); result.subscribe(); // This line is optional, depending on what you want to do after the exception is thrown }); } @Test void testCreateEmployee() { when(service.createEmployee(any())).thenReturn(buildCreateEmployee()); Mono result = employeeController.createEmployee(any()); result.subscribe( employeeDto-> { Assertions.assertEquals("2", employeeDto.getId()); }); } private Mono buildCreateEmployee() { EmployeeDto employeeDto=new EmployeeDto(); employeeDto.setId("2"); employeeDto.setName("Mahesh"); employeeDto.setDesignation("Software Engineer"); employeeDto.setSalary(new BigDecimal(5021)); return Mono.just(employeeDto); } @Test void testDeleteEmployee() { when(service.deleteEmployee(anyString())).thenReturn(Mono.just("SUCCESS")); Mono result = employeeController.deleteEmployee("id"); Assertions.assertEquals("SUCCESS", result.block()); } }