package it.inaf.ia2.gms.controller; import com.fasterxml.jackson.databind.ObjectMapper; import it.inaf.ia2.gms.authn.SessionData; import it.inaf.ia2.gms.model.response.PaginatedData; import it.inaf.ia2.gms.model.response.SearchResponseItem; import it.inaf.ia2.gms.model.response.UserSearchResponse; import it.inaf.ia2.gms.service.SearchService; import java.util.ArrayList; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import org.mockito.InjectMocks; import org.mockito.Mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import org.springframework.test.web.servlet.setup.MockMvcBuilders; @RunWith(MockitoJUnitRunner.class) public class SearchControllerTest { @Mock private SessionData session; @Mock private SearchService searchService; @InjectMocks private SearchController controller; private MockMvc mockMvc; private final ObjectMapper mapper = new ObjectMapper(); @Before public void init() { mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); when(session.getUserId()).thenReturn("admin_id"); } @Test public void testGenericSearch() throws Exception { PaginatedData response = new PaginatedData<>(new ArrayList<>(), 1, 10); when(searchService.search(any(), any(), anyInt(), anyInt())).thenReturn(response); mockMvc.perform(get("/search?query=searchText&page=1&pageSize=10") .contentType(MediaType.APPLICATION_JSON_UTF8)) .andExpect(status().isOk()); verify(searchService, times(1)).search(eq("searchText"), eq("admin_id"), eq(1), eq(10)); } @Test public void testUserSearch() throws Exception { when(searchService.getUserSearchResult(any(), any())).thenReturn(new UserSearchResponse()); mockMvc.perform(get("/search/user/user_id") .contentType(MediaType.APPLICATION_JSON_UTF8)) .andExpect(status().isOk()); verify(searchService, times(1)).getUserSearchResult(eq("admin_id"), eq("user_id")); } }