package br.com.dextra.dextranet.grupo.servico.google;
import static br.com.dextra.dextranet.persistencia.TesteUtils.criarGrupoGoogle;
import static org.junit.Assert.assertEquals;
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 org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import br.com.dextra.teste.TesteIntegracaoBase;
import com.google.api.services.admin.directory.model.Group;
import com.google.api.services.admin.directory.model.Member;
public class AprovisionamentoTest extends TesteIntegracaoBase {
private Aprovisionamento aprovisionamento = new Aprovisionamento();
private String emailGrupo = "grupo@dextra-sw.com";
@Rule
public ExpectedException expectedEx = ExpectedException.none();
@Before
@After
public void initial() throws IOException, GeneralSecurityException, URISyntaxException {
aprovisionamento.removerGrupo(emailGrupo);
}
@Test
public void testaCriarGrupo() throws IOException, GeneralSecurityException, URISyntaxException,
InterruptedException {
String nomeGrupo = "Grupo 1";
String descricaoGrupo = "Grupo 1";
aprovisionamento.criarGrupo(nomeGrupo, emailGrupo, descricaoGrupo);
Group group = aprovisionamento.obterGrupo(emailGrupo);
assertEquals(emailGrupo, group.getEmail());
}
@Test
public void testarCriarGrupoComMembros() throws IOException, GeneralSecurityException, URISyntaxException {
String nomeGrupo = "Grupo 1";
String descricaoGrupo = "Grupo 1";
String emailusuario1 = "usuario.1@dextra-sw.com";
String emailusuario2 = "usuario.2@dextra-sw.com";
List<String> emailMembros = Arrays.asList(emailusuario1, emailusuario2);
Group grupo = aprovisionamento.criarGrupo(nomeGrupo, emailGrupo, descricaoGrupo);
aprovisionamento.adicionarMembros(emailMembros, grupo);
Group grupoGoogle = aprovisionamento.obterGrupo(emailGrupo);
List<Member> membrosSearch = aprovisionamento.obterMembros(grupoGoogle);
assertTrue(membrosContains(membrosSearch, emailusuario1));
assertTrue(membrosContains(membrosSearch, emailusuario2));
}
public void testarExcluirMembrosDoGrupo() throws IOException, GeneralSecurityException, URISyntaxException {
List<String> emailMembros = Arrays.asList("usuario.1@dextra-sw.com", "usuario.2@dextra-sw.com");
Group group = criarGrupoComMembros(emailGrupo, emailMembros);
group = aprovisionamento.obterGrupo(emailGrupo);
aprovisionamento.removerMembros(Arrays.asList("usuario.1@dextra-sw.com"), group);
List<Member> members = aprovisionamento.obterMembros(group);
assertTrue(members.size() == 1);
assertEquals("usuario.2@dextra-sw.com", members.get(0));
}
@Test
public void testaRemoverMembrosGrupo() throws IOException, GeneralSecurityException, URISyntaxException {
String usuario1 = "usuario.1@dextra-sw.com";
String usuario2 = "usuario.2@dextra-sw.com";
List<String> emailMembros = Arrays.asList(usuario1, usuario2);
criarGrupoComMembros(emailGrupo, emailMembros);
Group grupo = aprovisionamento.obterGrupo(emailGrupo);
aprovisionamento.removerMembros(Arrays.asList(usuario1), grupo);
List<Member> members = aprovisionamento.obterMembros(grupo);
assertTrue(members.size() == 1);
assertEquals(usuario2, members.get(0).getEmail());
}
@Test
public void testaAdicionarMembrosGrupo() throws IOException, GeneralSecurityException, URISyntaxException {
Group grupo = criarGrupoGoogle(emailGrupo);
aprovisionamento.adicionarMembros(Arrays.asList("usuario.1@dextra-sw.com", "usuario.2@dextra-sw.com"), grupo);
List<Member> members = aprovisionamento.obterMembros(grupo);
assertTrue(members.size() == 2);
}
@Test
public void testAdicionarMembroEmailInvalido() throws IOException, GeneralSecurityException, URISyntaxException {
expectedEx.expect(RuntimeException.class);
expectedEx.expectMessage("renan.silva() is not a valid email address.");
Group grupo = criarGrupoGoogle(emailGrupo);
aprovisionamento.adicionarMembros(Arrays.asList("renan.silva()"), grupo);
}
private Boolean membrosContains(List<Member> membros, String email) {
for (Member member : membros) {
if (member.getEmail().equals(email)) {
return true;
}
}
return false;
}
private Group criarGrupoComMembros(String emailGrupo, List<String> emailsMembros) throws IOException,
GeneralSecurityException, URISyntaxException {
Group group = criarGrupoGoogle(emailGrupo);
aprovisionamento.adicionarMembros(emailsMembros, group);
return group;
}
}