package br.gov.servicos.busca; import br.gov.servicos.cms.PaginaEstatica; import lombok.experimental.FieldDefaults; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.springframework.data.domain.Page; import org.springframework.data.elasticsearch.core.FacetedPageImpl; import static br.gov.servicos.fixtures.TestData.PAGINA_ESTATICA_DE_TEMATICA; import static java.util.Collections.singletonList; import static java.util.Optional.of; import static lombok.AccessLevel.PRIVATE; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.verify; import static org.springframework.test.web.ModelAndViewAssert.assertModelAttributeValue; import static org.springframework.test.web.ModelAndViewAssert.assertViewName; @RunWith(MockitoJUnitRunner.class) @FieldDefaults(level = PRIVATE) public class BuscaControllerTest { @Mock BuscadorConteudo buscador; Page<PaginaEstatica> umConteudo = new FacetedPageImpl<>(singletonList(PAGINA_ESTATICA_DE_TEMATICA)); BuscaController controller; @Before public void setUp() { controller = new BuscaController(buscador); } @Test public void buscaRedirecionaParaPaginaDeResultados() { assertViewName(controller.busca(null, 1), "resultados-busca"); } @Test public void buscaRetornaTermoBuscado() { assertModelAttributeValue(controller.busca("trabalho", 1), "termo", "trabalho"); } @Test public void buscaRetornaResultadosParaAPagina() { doReturn(umConteudo) .when(buscador) .busca(of("emprego"), 0); assertModelAttributeValue(controller.busca("emprego", 1), "resultados", umConteudo); } @Test public void deveUsarBase0AoBuscarResultadosPaginados() { controller.busca("qualquer servico", 20); verify(buscador).busca(of("qualquer servico"), 19); } @Test public void retornaSugestoesDeBusca() throws Exception { doReturn(singletonList(PAGINA_ESTATICA_DE_TEMATICA.withNome("Seguro-desemprego"))) .when(buscador) .buscaSemelhante(of("empreg")); String sugestao = controller.sugestao("empreg"); assertThat(sugestao, is("[\"empreg\", [\"Seguro-desemprego\"]]")); } @Test public void deveExibirXmlDoOpenSearch() { assertThat(controller.openSearch().getViewName(), is("opensearch")); } @Test public void deveRedirecionarEmUrlsDeBuscaLegada() { assertThat(controller.search("blah"), is("redirect:/busca?q=blah")); } }