package br.gov.servicos.busca;
import br.gov.servicos.Main;
import br.gov.servicos.cms.PaginaEstatica;
import br.gov.servicos.cms.PaginaTematica;
import br.gov.servicos.cms.PaginaTematicaRepository;
import br.gov.servicos.servico.ServicoRepository;
import br.gov.servicos.setup.SetupTestesIntegracao;
import br.gov.servicos.v3.schema.ServicoXML;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.data.domain.Page;
import org.springframework.data.elasticsearch.core.FacetedPageImpl;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import java.util.List;
import static br.gov.servicos.fixtures.TestData.*;
import static java.util.Collections.emptyList;
import static java.util.Optional.empty;
import static java.util.Optional.of;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.hasSize;
import static org.junit.Assert.assertThat;
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Main.class)
public class BuscadorPaginaEstaticaIntegrationTest {
@Autowired
SetupTestesIntegracao setupTestesIntegracao;
@Autowired
ServicoRepository servicos;
@Autowired
PaginaTematicaRepository paginas;
@Autowired
BuscadorConteudo buscador;
@Before
public void setUp() throws Exception {
setupTestesIntegracao.setupBaseLimpa();
}
@Test
@SuppressWarnings("unchecked")
public void deveInserirUmServicoEUmConteudoERetornarDoisConteudos() throws Exception {
servicos.save(SERVICO);
paginas.save(PAGINA_TEMATICA);
List<PaginaEstatica> paginaEstaticas = ((FacetedPageImpl) buscador.busca(of("Descrição"), 0)).getContent();
assertThat(paginaEstaticas, hasSize(2));
assertThat(paginaEstaticas, hasItem(PAGINA_ESTATICA_DE_TEMATICA));
assertThat(paginaEstaticas, hasItem(PAGINA_ESTATICA_DE_SERVICO));
}
@Test
@SuppressWarnings("unchecked")
public void deveRetornarApenasConteudosQueTenhamAPalavraDescricao() throws Exception {
servicos.save(SERVICO);
servicos.save(new ServicoXML().withNome("Um titulo").withDescricao("Texto"));
paginas.save(new PaginaTematica().withId("titulo-de-conteudo").withNome("Titulo de conteudo").withConteudo("Conteudo"));
List<PaginaEstatica> paginaEstaticas = ((FacetedPageImpl) buscador.busca(of("Descrição"), 0)).getContent();
assertThat(paginaEstaticas, hasSize(1));
assertThat(paginaEstaticas.get(0).getConteudo(), is("Descrição serviço"));
}
@Test
@SuppressWarnings("unchecked")
public void deveAcharSemAcentuacao() throws Exception {
servicos.save(new ServicoXML().withId("um-titulo").withNome("Um titulo").withDescricao("Descricao"));
List<PaginaEstatica> paginaEstaticas = ((FacetedPageImpl) buscador.busca(of("Descrição"), 0)).getContent();
assertThat(paginaEstaticas, hasSize(1));
assertThat(paginaEstaticas.get(0).getConteudo(), is("Descricao"));
}
@Test
public void buscaSemelhante() throws Exception {
servicos.save(SERVICO);
servicos.save(new ServicoXML().withId("titulo-de-servico").withNome("Titulo de servico").withDescricao("Texto"));
List<PaginaEstatica> paginaEstaticas = buscador.buscaSemelhante(of("ervic"));
assertThat(paginaEstaticas, hasSize(2));
assertThat(paginaEstaticas, hasItem(PAGINA_ESTATICA_DE_SERVICO));
assertThat(paginaEstaticas, hasItem(new PaginaEstatica()
.withId("titulo-de-servico")
.withNome("Titulo de servico")
.withTipoConteudo("servico")
.withConteudo("Texto")));
}
@Test
public void deveConsiderarTermoDeBuscaVazioComoEmpty() throws Exception {
Page<PaginaEstatica> resultados = buscador.busca(of(""), 0);
assertThat(resultados.getContent(), is(emptyList()));
}
@Test
public void retornaUmaListaVaziaQuandoNaoHouverTermoDeBusca() throws Exception {
Page<PaginaEstatica> resultados = buscador.busca(empty(), 0);
assertThat(resultados.getContent(), is(emptyList()));
}
@Test
@SuppressWarnings("unchecked")
public void deveConterTipoConteudo() throws Exception {
servicos.save(SERVICO);
paginas.save(PAGINA_TEMATICA);
List<PaginaEstatica> paginaEstaticas = ((FacetedPageImpl) buscador.busca(of("Descrição"), 0)).getContent();
assertThat(paginaEstaticas, hasItem(PAGINA_ESTATICA_DE_SERVICO));
assertThat(paginaEstaticas, hasItem(PAGINA_ESTATICA_DE_TEMATICA));
assertThat(paginaEstaticas, hasSize(2));
}
@Test
public void buscaPorTermosComErrosDeDigitacao() {
servicos.save(SERVICO
.withId("passaporte")
.withNome("Passaporte")
.withDescricao("Emissão de passaportes"));
Iterable<PaginaEstatica> busca = buscador.busca(of("passapote"), 0);
PaginaEstatica resultado = busca.iterator().next();
assertThat(resultado.getId(), is("passaporte"));
}
}