package br.gov.servicos.servico; import br.gov.servicos.cms.PaginaEstatica; import com.github.slugify.Slugify; import lombok.experimental.FieldDefaults; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import java.io.IOException; import static br.gov.servicos.fixtures.TestData.SERVICO; import static br.gov.servicos.v3.schema.SegmentoDaSociedade.CIDADAOS; import static br.gov.servicos.v3.schema.SegmentoDaSociedade.EMPRESAS; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; import static lombok.AccessLevel.PRIVATE; import static org.mockito.BDDMockito.given; import static org.springframework.test.web.ModelAndViewAssert.assertModelAttributeValue; import static org.springframework.test.web.ModelAndViewAssert.assertViewName; @RunWith(MockitoJUnitRunner.class) @FieldDefaults(level = PRIVATE) public class PublicoAlvoControllerTest { @Mock(answer = Answers.RETURNS_SMART_NULLS) ServicoRepository servicos; PublicoAlvoController publicosAlvo; @Before public void setUp() throws IOException { given(servicos.findBySegmentoDaSociedade(CIDADAOS)).willReturn(asList( SERVICO.withNome("XXXX").withSegmentosDaSociedade(asList(CIDADAOS, EMPRESAS)), SERVICO.withNome("AAAA").withSegmentosDaSociedade(asList(CIDADAOS, EMPRESAS)))); given(servicos.findBySegmentoDaSociedade(EMPRESAS)).willReturn(asList( SERVICO.withNome("FFFF").withSegmentosDaSociedade(asList(CIDADAOS, EMPRESAS)), SERVICO.withNome("AAAA").withSegmentosDaSociedade(asList(CIDADAOS, EMPRESAS)))); publicosAlvo = new PublicoAlvoController(servicos, new Slugify()); } @Test public void deveRedirecionarParaPaginaDePublicosAlvo() { assertViewName(publicosAlvo.publicoAlvo(CIDADAOS, null), "publico-alvo"); } @Test public void deveRetornarOsServicosRelacionadosAoPublicoAlvo() { assertModelAttributeValue(publicosAlvo.publicoAlvo(CIDADAOS, null), "servicos", asList(PaginaEstatica.fromServico(SERVICO.withNome("AAAA")), PaginaEstatica.fromServico(SERVICO.withNome("XXXX")))); } @Test public void deveRetornarOPublicoAlvoPesquisado() { assertModelAttributeValue(publicosAlvo.publicoAlvo(CIDADAOS, null), "publicoAlvo", CIDADAOS); } @Test public void deveRetornarAsLetrasDisponiveis() { assertModelAttributeValue(publicosAlvo.publicoAlvo(CIDADAOS, null), "letras", asList('A', 'X')); assertModelAttributeValue(publicosAlvo.publicoAlvo(EMPRESAS, null), "letras", asList('A', 'F')); } @Test public void deveRetornarALetraAtiva() { assertModelAttributeValue(publicosAlvo.publicoAlvo(CIDADAOS, 'x'), "letraAtiva", 'X'); } @Test public void deveFiltrarPelaLetraInformada() { assertModelAttributeValue(publicosAlvo.publicoAlvo(CIDADAOS, 'X'), "servicos", singletonList(PaginaEstatica.fromServico(SERVICO.withNome("XXXX")))); } }