package br.gov.servicos.editor.conteudo.cartas;
import br.gov.servicos.editor.conteudo.TipoPagina;
import org.junit.Before;
import org.junit.Test;
import static br.gov.servicos.editor.conteudo.TipoPagina.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
public class DescartarAlteracoesPaginaControllerIntegrationTest extends RepositorioGitIntegrationTest {
public static final String PAGINA_A = "<pagina-tematica><url>http://estruturaorganizacional.dados.gov.br/id/unidade-organizacional/1934</url><nome>Pagina A</nome></pagina-tematica>";
public static final String PAGINA_A_2 = "<pagina-tematica><url>http://estruturaorganizacional.dados.gov.br/id/unidade-organizacional/1934</url><nome>Pagina A</nome><conteudo>conteudo</conteudo></pagina-tematica>";
public static final String CARTA_A = "<servico><url>http://estruturaorganizacional.dados.gov.br/id/unidade-organizacional/1934</url><nome>Carta A</nome></servico>";
public static final String CARTA_A_2 = "<servico><url>http://estruturaorganizacional.dados.gov.br/id/unidade-organizacional/1934</url><nome>Carta A</nome><sigla>CA</sigla></servico>";
public static final String ORGAO_A = "<orgao><url>http://estruturaorganizacional.dados.gov.br/id/unidade-organizacional/1934</url><nome>Carta A</nome></orgao>";
public static final String ORGAO_A_2 = "<orgao><url>http://estruturaorganizacional.dados.gov.br/id/unidade-organizacional/1934</url><nome>Carta A</nome><conteudo>CA</conteudo></orgao>";
@Before
public void setup() {
setupBase()
.carta("carta-a", CARTA_A)
.paginaTematica("pagina-a", PAGINA_A)
.orgao("orgao-a", ORGAO_A)
.build();
}
@Test
public void descartarDeServicoAlteracoesDeveVoltarParaVersaoPublicada() throws Exception {
descartarAlteracoesDeveVoltarParaVersaoPublicada(SERVICO, "carta-a", CARTA_A, CARTA_A_2);
}
@Test
public void descartarDePaginaTematicaAlteracoesDeveVoltarParaVersaoPublicada() throws Exception {
descartarAlteracoesDeveVoltarParaVersaoPublicada(PAGINA_TEMATICA, "pagina-a", PAGINA_A, PAGINA_A_2);
}
@Test
public void descartarDeOrgaoAlteracoesDeveVoltarParaVersaoPublicada() throws Exception {
descartarAlteracoesDeveVoltarParaVersaoPublicada(ORGAO, "orgao-a", ORGAO_A, ORGAO_A_2);
}
private void descartarAlteracoesDeveVoltarParaVersaoPublicada(TipoPagina tipo, String id, String conteudo1, String conteudo2) throws Exception {
api.salvarPagina(tipo, id, conteudo2)
.andExpect(status().is3xxRedirection());
api.editarPagina(tipo, id)
.andExpect(status().isOk())
.andExpect(content().xml(conteudo2));
api.descartarPagina(tipo, id)
.andExpect(status().isOk());
api.editarPagina(tipo, id)
.andExpect(status().isOk())
.andExpect(content().xml(conteudo1));
}
@Test
public void descartarAposRenomearDeveVoltarParaVersaoPublicada() throws Exception {
api.salvarCarta("carta-a", "<servico><url>http://estruturaorganizacional.dados.gov.br/id/unidade-organizacional/1934</url><nome>Carta A</nome><sigla>CA</sigla></servico>")
.andExpect(status().is3xxRedirection());
api.editarCarta("carta-a")
.andExpect(status().isOk())
.andExpect(content().xml("<servico><url>http://estruturaorganizacional.dados.gov.br/id/unidade-organizacional/1934</url><nome>Carta A</nome><sigla>CA</sigla></servico>"));
api.renomearCarta("carta-a", "Carta B")
.andExpect(status().isOk());
api.editarCarta("carta-b")
.andExpect(status().isOk())
.andExpect(content().xml("<servico><url>http://estruturaorganizacional.dados.gov.br/id/unidade-organizacional/1934</url><nome>Carta B</nome><sigla>CA</sigla></servico>"));
api.descartarCarta("carta-b")
.andExpect(status().isOk());
api.editarCarta("carta-b")
.andExpect(status().isOk())
.andExpect(content().xml("<servico><url>http://estruturaorganizacional.dados.gov.br/id/unidade-organizacional/1934</url><nome>Carta B</nome></servico>"));
}
@Test
public void descartarAlteracoesDeNovoServicoSemEstarPublicadaNadaAcontece() throws Exception {
descartarAlteracoesDeDocumentoNovoSemEstarPublicadaNadaAcontece(SERVICO, "carta-nova", CARTA_A);
}
@Test
public void descartarAlteracoesDeNovaPaginaTematicaSemEstarPublicadaNadaAcontece() throws Exception {
descartarAlteracoesDeDocumentoNovoSemEstarPublicadaNadaAcontece(PAGINA_TEMATICA, "pagina-nova", PAGINA_A);
}
@Test
public void descartarAlteracoesDeNovoOrgaoSemEstarPublicadaNadaAcontece() throws Exception {
descartarAlteracoesDeDocumentoNovoSemEstarPublicadaNadaAcontece(ORGAO, "orgao-nova", ORGAO_A);
}
private void descartarAlteracoesDeDocumentoNovoSemEstarPublicadaNadaAcontece(TipoPagina tipo, String id, String conteudo) throws Exception {
api.salvarPagina(tipo, id, conteudo)
.andExpect(status().is3xxRedirection());
api.editarPagina(tipo, id)
.andExpect(status().isOk())
.andExpect(content().xml(conteudo));
api.descartarPagina(tipo, id)
.andExpect(status().is(406));
}
@Test
public void descartarAlteracoesInexistentesRetornaStatusOk() throws Exception {
api.descartarCarta("nao-existe")
.andExpect(status().isNotFound());
api.descartarPagina(PAGINA_TEMATICA, "nao-existe")
.andExpect(status().isNotFound());
api.descartarPagina(ORGAO, "nao-existe")
.andExpect(status().isNotFound());
}
@Test
public void descartarAlteracoesDeServicosSemEdicoesRetornaStatusOk() throws Exception {
descartarAlteracoesSemEdicoesRetornaStatusOk(SERVICO, "carta-a");
}
@Test
public void descartarAlteracoesDePaginaTematicaSemEdicoesRetornaStatusOk() throws Exception {
descartarAlteracoesSemEdicoesRetornaStatusOk(PAGINA_TEMATICA, "pagina-a");
}
@Test
public void descartarAlteracoesDeOrgaoSemEdicoesRetornaStatusOk() throws Exception {
descartarAlteracoesSemEdicoesRetornaStatusOk(ORGAO, "orgao-a");
}
private void descartarAlteracoesSemEdicoesRetornaStatusOk(TipoPagina tipo, String id) throws Exception {
api.descartarPagina(tipo, id)
.andExpect(status().isOk());
}
}