package br.gov.servicos.editor.conteudo.cartas;
import br.gov.servicos.editor.conteudo.ConteudoVersionado;
import br.gov.servicos.editor.conteudo.ConteudoVersionadoFactory;
import br.gov.servicos.editor.conteudo.TipoPagina;
import br.gov.servicos.editor.security.TipoPermissao;
import br.gov.servicos.editor.security.UserProfiles;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.security.access.AccessDeniedException;
import java.util.function.Supplier;
import static br.gov.servicos.editor.conteudo.TipoPagina.SERVICO;
import static br.gov.servicos.editor.utils.TestData.PROFILE;
import static org.mockito.BDDMockito.given;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.verify;
@RunWith(MockitoJUnitRunner.class)
public class ExcluirPaginaControllerTest {
@Mock
ConteudoVersionado carta;
@Mock
UserProfiles userProfiles;
@Mock
ConteudoVersionadoFactory factory;
@Captor
ArgumentCaptor<Supplier<Void>> captor;
ExcluirPaginaController controller;
@Before
public void setUp() throws Exception {
given(factory.pagina(anyString(), eq(SERVICO)))
.willReturn(carta);
given(carta.existe())
.willReturn(true);
controller = new ExcluirPaginaController(userProfiles, factory);
}
@Test
public void removeCartaExistente() throws Exception {
given(userProfiles.temPermissaoParaTipoPagina(eq(TipoPermissao.EXCLUIR), any(TipoPagina.class))).willReturn(true);
given(userProfiles.get())
.willReturn(PROFILE);
controller.remover("servico", "");
verify(carta).remover(PROFILE);
}
@Test(expected = AccessDeniedException.class)
public void retornarAcessoNegadoCasoUsuarioNaoTenhaAcesso() throws ConteudoInexistenteException {
given(userProfiles.temPermissaoParaTipoPagina(eq(TipoPermissao.EXCLUIR), any(TipoPagina.class))).willReturn(false);
given(userProfiles.temPermissaoParaTipoPaginaOrgaoEspecifico(eq(TipoPermissao.PUBLICAR), any(TipoPagina.class), anyString())).willReturn(false);
controller.remover("servico", "");
}
}