package com.ufund.api.ufundapi.controller; import java.io.IOException; import java.util.Map; import static java.util.Map.entry; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.ufund.api.ufundapi.service.AuthService; @RestController @RequestMapping("auth") public class AuthControllerTest { private AuthController authController; private AuthService mockAuthService; private Map authMap; @BeforeEach private void setupAuthController() { mockAuthService = mock(AuthService.class); authController = new AuthController(mockAuthService); authMap = Map.ofEntries( entry("Bob", "123") ); } @Test private void testLogin() throws IllegalAccessException, IOException { // Setup String key = "123"; // Mock when(mockAuthService.login(any(), any())).thenReturn(key); // Invoke ResponseEntity response = authController.login(authMap); // Analyze assertEquals(HttpStatus.OK, response.getStatusCode()); assertEquals(key, response.getBody()); } @Test private void testLoginUnauthorized() throws IllegalAccessException, IOException { // Setup String key = "123"; // Mock when(mockAuthService.login(any(), any())).thenThrow(IllegalAccessException.class); // Invoke ResponseEntity response = authController.login(authMap); // Analyze assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode()); } @Test private void testLoginIOException() throws IllegalAccessException, IOException { // Setup String key = "123"; // Mock when(mockAuthService.login(any(), any())).thenThrow(IOException.class); // Invoke ResponseEntity response = authController.login(authMap); // Analyze assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); } @Test void testLogout() throws IllegalAccessException, IOException { // Setup String key = "123"; // Mock when(mockAuthService.login(any(), any())).thenReturn(key); // Invoke ResponseEntity response = authController.login(authMap); // Analyze assertEquals(HttpStatus.OK, response.getStatusCode()); assertEquals(key, response.getBody()); } @Test void testLogoutIOException() throws IllegalAccessException, IOException { // Setup String key = "123"; // Mock when(mockAuthService.login(any(), any())).thenThrow(IOException.class); // Invoke ResponseEntity response = authController.login(authMap); // Analyze assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); } }