package br.com.dextra.dextranet.usuario; import static br.com.dextra.dextranet.persistencia.TesteUtils.criarGrupoComOsIntegrantes; import static br.com.dextra.dextranet.persistencia.TesteUtils.criarUsuario; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.net.URISyntaxException; import java.security.GeneralSecurityException; import java.util.Arrays; import java.util.List; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import org.apache.commons.lang.StringUtils; import org.junit.After; import org.junit.Test; import br.com.dextra.dextranet.grupo.Grupo; import br.com.dextra.dextranet.grupo.GrupoRepository; import br.com.dextra.dextranet.grupo.Membro; import br.com.dextra.dextranet.grupo.MembroRepository; import br.com.dextra.dextranet.grupo.ServicoGrupo; import br.com.dextra.dextranet.grupo.ServicoGrupoRepository; import br.com.dextra.dextranet.grupo.UsuarioJSON; import br.com.dextra.dextranet.grupo.servico.google.Aprovisionamento; import br.com.dextra.dextranet.grupo.servico.google.GoogleGrupoJSON; import br.com.dextra.dextranet.persistencia.TesteUtils; import br.com.dextra.teste.TesteIntegracaoBase; import com.google.api.services.admin.directory.model.Group; import com.google.api.services.admin.directory.model.Member; import com.google.appengine.api.datastore.EntityNotFoundException; public class UsuarioRSTest extends TesteIntegracaoBase { private static final String USUARIO_LOGADO = "login.google"; private UsuarioRS usuarioRS = new UsuarioRSFake(); private UsuarioRepository repositorio = new UsuarioRepository(); private GrupoRepository repositorioGrupo = new GrupoRepository(); private MembroRepository repositorioMembro = new MembroRepository(); private ServicoGrupoRepository servicoGrupoRepository = new ServicoGrupoRepository(); private Aprovisionamento aprovisionamento = new Aprovisionamento(); private String emailGrupo = "grupo@dextra-sw.com"; private String nomeGrupo = "grupo"; @After public void removerDadosInseridos() throws IOException, GeneralSecurityException, URISyntaxException { aprovisionamento.removerGrupo(emailGrupo); } @Test public void testaAtualizacaoPermitida() throws EntityNotFoundException, GeneralSecurityException, URISyntaxException { limpaUsuariosInseridos(repositorio); Usuario usuario = new Usuario(USUARIO_LOGADO); repositorio.persiste(usuario); Usuario usuarioPersistido = repositorio.obtemPorId(usuario.getId()); assertTrue(StringUtils.isEmpty(usuarioPersistido.getNome())); assertTrue(StringUtils.isEmpty(usuarioPersistido.getApelido())); assertTrue(StringUtils.isEmpty(usuarioPersistido.getArea())); assertTrue(StringUtils.isEmpty(usuarioPersistido.getUnidade())); assertTrue(StringUtils.isEmpty(usuarioPersistido.getRamal())); assertTrue(StringUtils.isEmpty(usuarioPersistido.getTelefoneResidencial())); assertTrue(StringUtils.isEmpty(usuarioPersistido.getTelefoneCelular())); assertTrue(StringUtils.isEmpty(usuarioPersistido.getGitHub())); assertTrue(StringUtils.isEmpty(usuarioPersistido.getSkype())); assertTrue(StringUtils.isEmpty(usuarioPersistido.getBlog())); usuarioRS.atualizar(usuario.getId(), "Nome", "Apelido", "Área", "Unidade", "Ramal", "Residencial", "Celular", "GitHub", "Skype", "blog", null); usuarioPersistido = repositorio.obtemPorId(usuario.getId()); assertEquals("Nome", usuarioPersistido.getNome()); assertEquals("Apelido", usuarioPersistido.getApelido()); assertEquals("Área", usuarioPersistido.getArea()); assertEquals("Unidade", usuarioPersistido.getUnidade()); assertEquals("Ramal", usuarioPersistido.getRamal()); assertEquals("Residencial", usuarioPersistido.getTelefoneResidencial()); assertEquals("Celular", usuarioPersistido.getTelefoneCelular()); assertEquals("GitHub", usuarioPersistido.getGitHub()); assertEquals("Skype", usuarioPersistido.getSkype()); assertEquals("blog", usuarioPersistido.getBlog()); usuarioRS.atualizar(usuario.getId(), "Nome", "Apelido", "Area", "Unidade", "Ramal", "Residencial", "Celular", "GitHub", "Skype", "blog", null); usuarioPersistido = repositorio.obtemPorId(usuario.getId()); assertEquals("Area", usuarioPersistido.getArea()); } @Test public void testaAtualizacaoNaoPermitida() throws EntityNotFoundException, GeneralSecurityException, URISyntaxException { limpaUsuariosInseridos(repositorio); Usuario usuario = TesteUtils.criarUsuario("usuario1", true); TesteUtils.criarUsuario(USUARIO_LOGADO, true); Response resposta = usuarioRS.atualizar(usuario.getId(), "Nome", "Apelido", "Area", "Unidade", "Ramal", "Residencial", "Celular", "GitHub", "Skype", "blog", null); assertEquals(Status.FORBIDDEN.getStatusCode(), resposta.getStatus()); } @Test public void testaDesativacaoUsuarioProprietarioGrupo() throws EntityNotFoundException, GeneralSecurityException, URISyntaxException, IOException { limpaUsuariosInseridos(repositorio); String username1 = "usuario.1"; String username2 = "usuario.2"; Usuario usuarioLogado = criarUsuario(USUARIO_LOGADO, true); Usuario usuario1 = criarUsuario(username1, true); Usuario usuario2 = criarUsuario(username2, true); criarGrupoComOsIntegrantes("infra", true, "Infra", true, usuarioLogado); Grupo grupo = criarGrupoComOsIntegrantes(nomeGrupo, false, nomeGrupo, true, usuario2, usuario1); Group grupo2 = aprovisionamento.criarGrupo(nomeGrupo, emailGrupo, ""); aprovisionamento.adicionarMembros(Arrays.asList(usuario1.getEmail(), usuario2.getEmail()), grupo2); UsuarioJSON json = (UsuarioJSON) usuarioRS.atualizar(usuario2.getId(), null, null, null, null, null, null, null, null, null, null, false).getEntity(); Usuario retorno = repositorio.obtemPorId(usuario2.getId()); List<Grupo> grupos = repositorioGrupo.obtemPorIdIntegrante(usuario2.getId()); List<Membro> membros = repositorioMembro.obtemPorIdUsuario(usuario2.getId()); grupo = repositorioGrupo.obtemPorId(grupo.getId()); assertTrue(!grupo.getProprietario().equals(usuario2.getUsername())); assertEquals(grupo.getProprietario(), usuario1.getUsername()); assertTrue(membros.isEmpty()); assertTrue(grupos.isEmpty()); assertFalse(json.isAtivo()); assertFalse(retorno.isAtivo()); } @Test public void testaDesativacaoUsuario() throws EntityNotFoundException, GeneralSecurityException, URISyntaxException, IOException { limpaUsuariosInseridos(repositorio); Usuario usuarioLogado = criarUsuario(USUARIO_LOGADO, true); Usuario usuario1 = criarUsuario("usuario1", true); Usuario usuario2 = criarUsuario("usuario2", true); criarGrupoComOsIntegrantes("infra", true, "Infra", true, usuarioLogado); criarGrupoComOsIntegrantes(nomeGrupo, false, nomeGrupo, true, usuario2, usuario1); Group grupo = aprovisionamento.criarGrupo(nomeGrupo, emailGrupo, ""); aprovisionamento.adicionarMembros(Arrays.asList(usuario1.getEmail(), usuario2.getEmail()), grupo); UsuarioJSON json = (UsuarioJSON) usuarioRS.atualizar(usuario1.getId(), null, null, null, null, null, null, null, null, null, null, false).getEntity(); Usuario retorno = repositorio.obtemPorId(usuario1.getId()); List<Grupo> grupos = repositorioGrupo.obtemPorIdIntegrante(usuario1.getId()); List<Membro> membros = repositorioMembro.obtemPorIdUsuario(usuario1.getId()); assertTrue(membros.isEmpty()); assertTrue(grupos.isEmpty()); assertFalse(json.isAtivo()); assertFalse(retorno.isAtivo()); } @Test public void testaAtivacaoUsuario() throws EntityNotFoundException, GeneralSecurityException, URISyntaxException { limpaUsuariosInseridos(repositorio); Usuario usuarioLogado = criarUsuario(USUARIO_LOGADO, true); Usuario usuario1 = criarUsuario("usuario1", true); Usuario usuario2 = criarUsuario("usuario2", true); criarGrupoComOsIntegrantes("infra", true, "Infra", true, usuarioLogado); criarGrupoComOsIntegrantes("grupo1", false, "Grupo1", true, usuario2, usuario1); Object entity = usuarioRS.atualizar(usuario1.getId(), null, null, null, null, null, null, null, null, null, null, true) .getEntity(); UsuarioJSON json = (UsuarioJSON) entity; Usuario retorno = repositorio.obtemPorId(usuario1.getId()); assertTrue(json.isAtivo()); assertTrue(retorno.isAtivo()); } @Test public void testaRemoverUsuarioGrupo() throws GeneralSecurityException, URISyntaxException, EntityNotFoundException, IOException { String username1 = "usuario.1"; String username2 = "usuario.2"; Usuario usuario1 = criarUsuario(username1, true); Usuario usuario2 = criarUsuario(username2, true); Grupo grupo = criarGrupoComOsIntegrantes(nomeGrupo, false, nomeGrupo, true, usuario1, usuario2); Group grupo2 = aprovisionamento.criarGrupo(nomeGrupo, emailGrupo, ""); aprovisionamento.adicionarMembros(Arrays.asList(usuario1.getEmail(), usuario2.getEmail()), grupo2); List<ServicoGrupo> servicosGrupo = servicoGrupoRepository.obtemPorIdGrupo(grupo.getId()); GoogleGrupoJSON googleGrupojson = new GoogleGrupoJSON(); googleGrupojson.setEmailGrupo(nomeGrupo); googleGrupojson.setId(grupo.getId()); googleGrupojson.setIdServico(servicosGrupo.get(0).getIdServico()); UsuarioJSON usuariojson = new UsuarioJSON(); usuariojson.setEmail(usuario2.getEmail()); usuariojson.setAtivo(true); usuariojson.setApelido("usuario.2"); usuariojson.setUsername(username2); usuariojson.setNome("usuario.2"); googleGrupojson.setUsuarioJSONs(Arrays.asList(usuariojson)); usuarioRS.removerUsuarioGrupo(Arrays.asList(usuario2.getEmail()), Arrays.asList(googleGrupojson)); Group group = aprovisionamento.obterGrupo(emailGrupo); List<Member> members = aprovisionamento.obterMembros(group); assertTrue(members.size() == 1); assertEquals(username1 + "@dextra-sw.com", members.get(0).getEmail()); } @Test public void testaAjustarBanco() throws EntityNotFoundException { limpaUsuariosInseridos(repositorio); criarUsuario("usuario1", null); criarUsuario("usuario2", null); criarUsuario("usuario3", null); criarUsuario("usuario4", null); List<Usuario> usuarios = repositorio.lista(); assertEquals(4, usuarios.size()); for (Usuario usuario : usuarios) { assertNull(usuario.isAtivo()); } Response response = usuarioRS.ajustarFlagAtivoBanco(); usuarios = repositorio.lista(); for (Usuario usuario : usuarios) { assertNotNull(usuario.isAtivo()); } assertEquals(Status.OK.getStatusCode(), response.getStatus()); } public class UsuarioRSFake extends UsuarioRS { @Override protected String obtemUsernameDoUsuarioLogado() { return USUARIO_LOGADO; } } }