package com.amplywealth.auth.controller; import static org.mockito.Mockito.any; import static org.mockito.Mockito.when; import com.amplywealth.auth.data.model.enums.TokenValidityEnum; import com.amplywealth.auth.data.payload.request.ServiceTokenRequest; import com.amplywealth.auth.data.payload.request.ServiceTokenVerificationRequest; import com.amplywealth.auth.data.payload.response.ServiceLoginResponse; import com.amplywealth.auth.data.payload.response.TokenValidityResponse; import com.amplywealth.auth.service.S2SAuthService; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; 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 = {S2SAuthController.class}) @ExtendWith(SpringExtension.class) class S2SAuthControllerTest { @Autowired private S2SAuthController s2SAuthController; @MockBean private S2SAuthService s2SAuthService; /** * Method under test: {@link S2SAuthController#getToken(ServiceTokenRequest)} */ @Test void testGetToken() throws Exception { when(s2SAuthService.getAccessToken((ServiceTokenRequest) any())).thenReturn(new ServiceLoginResponse("ABC123", 1)); ServiceTokenRequest serviceTokenRequest = new ServiceTokenRequest(); serviceTokenRequest.setClientId("42"); serviceTokenRequest.setClientSecret("Client Secret"); serviceTokenRequest.setScopes("Scopes"); String content = (new ObjectMapper()).writeValueAsString(serviceTokenRequest); MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/api/v1/auth/service/token") .contentType(MediaType.APPLICATION_JSON) .content(content); MockMvcBuilders.standaloneSetup(s2SAuthController) .build() .perform(requestBuilder) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.content().contentType("application/json")) .andExpect(MockMvcResultMatchers.content() .string( "{\"message\":[\"Token fetched successfully.\"],\"http_code\":200,\"status\":true,\"data\":{\"serviceAuth\":[{" + "\"accessToken\":\"ABC123\",\"expiresIn\":1}]}}")); } /** * Method under test: {@link S2SAuthController#verifyToken(ServiceTokenVerificationRequest)} */ @Test void testVerifyToken() throws Exception { when(s2SAuthService.verifyToken((ServiceTokenVerificationRequest) any())) .thenReturn(new TokenValidityResponse(TokenValidityEnum.VALID)); ServiceTokenVerificationRequest serviceTokenVerificationRequest = new ServiceTokenVerificationRequest(); serviceTokenVerificationRequest.setAccessToken("ABC123"); String content = (new ObjectMapper()).writeValueAsString(serviceTokenVerificationRequest); MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/api/v1/auth/service/token/verify") .contentType(MediaType.APPLICATION_JSON) .content(content); MockMvcBuilders.standaloneSetup(s2SAuthController) .build() .perform(requestBuilder) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.content().contentType("application/json")) .andExpect(MockMvcResultMatchers.content() .string( "{\"message\":[\"Token found valid.\"],\"http_code\":200,\"status\":true,\"data\":{\"serviceAuth\":[{\"status\":" + "\"VALID\"}]}}")); } /** * Method under test: {@link S2SAuthController#verifyToken(ServiceTokenVerificationRequest)} */ @Test void testVerifyToken2() throws Exception { when(s2SAuthService.verifyToken((ServiceTokenVerificationRequest) any())).thenReturn(null); ServiceTokenVerificationRequest serviceTokenVerificationRequest = new ServiceTokenVerificationRequest(); serviceTokenVerificationRequest.setAccessToken("ABC123"); String content = (new ObjectMapper()).writeValueAsString(serviceTokenVerificationRequest); MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/api/v1/auth/service/token/verify") .contentType(MediaType.APPLICATION_JSON) .content(content); MockMvcBuilders.standaloneSetup(s2SAuthController) .build() .perform(requestBuilder) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.content().contentType("application/json")) .andExpect(MockMvcResultMatchers.content() .string("{\"message\":[\"Token found valid.\"],\"http_code\":200,\"status\":true,\"data\":{}}")); } /** * Method under test: {@link S2SAuthController#getToken(ServiceTokenRequest)} */ @Test void testGetToken2() throws Exception { when(s2SAuthService.getAccessToken((ServiceTokenRequest) any())).thenReturn(null); ServiceTokenRequest serviceTokenRequest = new ServiceTokenRequest(); serviceTokenRequest.setClientId("42"); serviceTokenRequest.setClientSecret("Client Secret"); serviceTokenRequest.setScopes("Scopes"); String content = (new ObjectMapper()).writeValueAsString(serviceTokenRequest); MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/api/v1/auth/service/token") .contentType(MediaType.APPLICATION_JSON) .content(content); MockMvcBuilders.standaloneSetup(s2SAuthController) .build() .perform(requestBuilder) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.content().contentType("application/json")) .andExpect(MockMvcResultMatchers.content() .string("{\"message\":[\"Token fetched successfully.\"],\"http_code\":200,\"status\":true,\"data\":{}}")); } }