private async Task Valida_Tratamento_De_Excecoes_Ao_Comunicar_Com_Google_Deve_Devolver_A_Excecao_Disparada()
        {
            // Arrange
            var funcionarioCurso  = new FuncionarioCursoEol(1234567, 1010, 6);
            var funcionarioGoogle = new FuncionarioGoogle(1234567, "José da Silva", "*****@*****.**", string.Empty);
            var cursoGoogle       = new CursoGoogle("Curso Google", "Seção", 1010, 6, "*****@*****.**");

            mediator.Setup(a => a.Send(It.IsAny <ObterFuncionariosGooglePorRfsQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new List <FuncionarioGoogle> {
                funcionarioGoogle
            });

            mediator.Setup(a => a.Send(It.IsAny <ObterCursoPorTurmaComponenteCurricularQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(cursoGoogle);

            mediator.Setup(a => a.Send(It.IsAny <ExisteFuncionarioCursoGoogleQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(false);

            var excecao = new NullReferenceException("Erro ao se comunicar Google Classroom.");

            mediator.Setup(a => a.Send(It.IsAny <InserirFuncionarioCursoGoogleCommand>(), It.IsAny <CancellationToken>()))
            .Throws(excecao);

            mediator.Setup(a => a.Send(It.IsAny <IncluirCursoUsuarioCommand>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(10);

            var funcionarioCursoJson = JsonConvert.SerializeObject(funcionarioCurso);
            var mensagem             = new MensagemRabbit(funcionarioCursoJson);

            // Assert
            await Assert.ThrowsAsync <NullReferenceException>(() => inserirFuncionarioCursoGoogleUseCase.Executar(mensagem));
        }
        private async Task InserirFuncionarioCursoGoogleAsync(FuncionarioGoogle funcionarioGoogle, CursoGoogle cursoGoogle)
        {
            var funcionarioCursoGoogle = new FuncionarioCursoGoogle(funcionarioGoogle.Indice, cursoGoogle.Id);

            try
            {
                var funcionarioCursoSincronizado = await mediator.Send(new InserirFuncionarioCursoGoogleCommand(funcionarioCursoGoogle, funcionarioGoogle.Email));

                if (funcionarioCursoSincronizado)
                {
                    await InserirFuncionarioCursoAsync(funcionarioCursoGoogle);
                }
            }
            catch (GoogleApiException gEx)
            {
                if (gEx.EhErroDeDuplicidade())
                {
                    await InserirFuncionarioCursoAsync(funcionarioCursoGoogle);
                }
                else
                {
                    throw;
                }
            }
        }
Exemplo n.º 3
0
        private async Task InserirFuncionarioGoogleAsync(FuncionarioGoogle funcionarioGoogle)
        {
            try
            {
                var funcionarioSincronizado = await mediator.Send(new InserirFuncionarioGoogleCommand(funcionarioGoogle));

                if (!funcionarioSincronizado)
                {
                    await mediator.Send(new IncluirUsuarioErroCommand(funcionarioGoogle?.Rf, funcionarioGoogle?.Email,
                                                                      $"Não foi possível incluir o funcionário no Google Classroom. {funcionarioGoogle}", UsuarioTipo.Funcionario, ExecucaoTipo.FuncionarioAdicionar));

                    return;
                }

                await InserirFuncionarioAsync(funcionarioGoogle);
            }
            catch (GoogleApiException gEx)
            {
                if (gEx.EhErroDeDuplicidade())
                {
                    await InserirFuncionarioAsync(funcionarioGoogle);
                }
                else
                {
                    throw;
                }
            }
        }
        private async Task Valida_Tratamento_De_Funcionario_Ja_Incluso_No_Curso_Deve_Retornar_True()
        {
            // Arrange
            var funcionarioCurso  = new FuncionarioCursoEol(1234567, 1010, 6);
            var funcionarioGoogle = new FuncionarioGoogle(1234567, "José da Silva", "*****@*****.**", string.Empty);
            var cursoGoogle       = new CursoGoogle("Curso Google", "Seção", 1010, 6, "*****@*****.**");

            mediator.Setup(a => a.Send(It.IsAny <ObterFuncionariosGooglePorRfsQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new List <FuncionarioGoogle> {
                funcionarioGoogle
            });

            mediator.Setup(a => a.Send(It.IsAny <ObterCursoPorTurmaComponenteCurricularQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(cursoGoogle);

            mediator.Setup(a => a.Send(It.IsAny <ExisteFuncionarioCursoGoogleQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(true);

            var funcionarioCursoJson = JsonConvert.SerializeObject(funcionarioCurso);
            var mensagem             = new MensagemRabbit(funcionarioCursoJson);

            // Act
            var retorno = await inserirFuncionarioCursoGoogleUseCase.Executar(mensagem);

            // Assert
            Assert.True(retorno);
        }
Exemplo n.º 5
0
 private async Task InserirFuncionarioAsync(FuncionarioGoogle funcionarioGoogle)
 {
     if (_deveExecutarIntegracao)
     {
         funcionarioGoogle.Indice = await mediator.Send(new IncluirUsuarioCommand(funcionarioGoogle));
     }
 }
Exemplo n.º 6
0
        private async Task InserirFuncionarioCursoGoogleAsync(FuncionarioGoogle funcionarioGoogle, CursoGoogle cursoGoogle)
        {
            var funcionarioCursoGoogle = new FuncionarioCursoGoogle(funcionarioGoogle.Indice, cursoGoogle.Id);

            try
            {
                var funcionarioCursoSincronizado = await mediator.Send(new InserirFuncionarioCursoGoogleCommand(funcionarioCursoGoogle, funcionarioGoogle.Email));

                if (funcionarioCursoSincronizado)
                {
                    await InserirFuncionarioCursoAsync(funcionarioCursoGoogle);
                }
            }
            catch (GoogleApiException gEx)
            {
                if (gEx.EhErroDeDuplicidade())
                {
                    await InserirFuncionarioCursoAsync(funcionarioCursoGoogle);
                }
                else if (gEx.RegistroNaoEncontrado())
                {
                    throw new NegocioException("Funcionário não localizado no Google Classroom");
                }
                else
                {
                    throw;
                }
            }
        }
Exemplo n.º 7
0
        private async Task IniciarSyncGoogleCursosDoFuncionarioAsync(FuncionarioGoogle funcionarioGoogle)
        {
            var publicarCursosDoFuncionario = await mediator.Send(new PublicaFilaRabbitCommand(RotasRabbit.FilaFuncionarioCursoSync, RotasRabbit.FilaFuncionarioCursoSync, funcionarioGoogle));

            if (!publicarCursosDoFuncionario)
            {
                await mediator.Send(new IncluirUsuarioErroCommand(funcionarioGoogle?.Rf, funcionarioGoogle?.Email,
                                                                  $"O funionário RF{funcionarioGoogle.Rf} foi incluído com sucesso, mas não foi possível iniciar a sincronização dos cursos deste funcionário.", UsuarioTipo.Funcionario, ExecucaoTipo.FuncionarioCursoAdicionar));
            }
        }
        public void Valida_Tratamento_Da_Formatacao_De_Nomes_Passandos_Os_Resultados_Esperados(string nome, string sobrenomeEsperado, string nomeEsperado)
        {
            // Arrange
            var funcionario = new FuncionarioGoogle(1, nome, "email", "organizationPath");

            // Assert
            Assert.NotNull(funcionario);
            Assert.Equal(sobrenomeEsperado, funcionario.Sobrenome);
            Assert.Equal(nomeEsperado, funcionario.Nome);
        }
Exemplo n.º 9
0
        private async Task IncluirCursoDoFuncionarioComErroAsync(FuncionarioGoogle funcionarioGoogle, string mensagem)
        {
            var command = new IncluirCursoUsuarioErroCommand(
                funcionarioGoogle.Rf,
                ExecucaoTipo.FuncionarioCursoAdicionar,
                ErroTipo.Negocio,
                mensagem);

            await mediator.Send(command);
        }
Exemplo n.º 10
0
        private async Task <FuncionarioGoogle> ObterFuncionario(string email)
        {
            var funcionario = await mediator.Send(new ObterFuncionarioPorEmailQuery(email));

            if (funcionario is null)
            {
                try
                {
                    var usuarioGoogle = await mediator.Send(new ObterUsuarioGoogleQuery(email));

                    if (usuarioGoogle is null)
                    {
                        throw new NegocioException("Funcionário não localizado no google classroom e nem na base de dados");
                    }

                    var funcionarioGoogle = new FuncionarioGoogle(null, usuarioGoogle.Nome, usuarioGoogle.Email, usuarioGoogle.OrganizationPath);
                    funcionarioGoogle.GoogleClassroomId = usuarioGoogle.Id;

                    await InserirFuncionarioAsync(funcionarioGoogle);

                    return(funcionarioGoogle);
                }
                catch (GoogleApiException gEx)
                {
                    if (gEx.RegistroNaoEncontrado())
                    {
                        throw new NegocioException("Funcionário não localizado no Google Classroom e nem na base de dados");
                    }
                    if (gEx.AcessoNaoAutorizado())
                    {
                        throw new NegocioException("Acesso ao Google Classroom não autorizado");
                    }
                    if (gEx.EmailContaServicoInvalido())
                    {
                        throw new NegocioException("Email ou id de acesso ao Google Classrom inválido");
                    }
                }
            }

            return(funcionario);
        }
Exemplo n.º 11
0
        public async Task <bool> Executar(MensagemRabbit mensagemRabbit)
        {
            if (mensagemRabbit.Mensagem is null)
            {
                throw new NegocioException("Não foi possível incluir o funcionário. A mensagem enviada é inválida.");
            }

            var funcionarioParaIncluir = JsonConvert.DeserializeObject <FuncionarioEol>(mensagemRabbit.Mensagem.ToString());

            if (funcionarioParaIncluir is null)
            {
                return(true);
            }

            try
            {
                var funcionarioGoogle = new FuncionarioGoogle(funcionarioParaIncluir.Rf, funcionarioParaIncluir.Nome, funcionarioParaIncluir.Email, funcionarioParaIncluir.OrganizationPath);

                var funcionarioJaIncluido = await mediator.Send(new ExisteFuncionarioPorRfQuery(funcionarioParaIncluir.Rf));

                if (funcionarioJaIncluido)
                {
                    await IniciarSyncGoogleCursosDoFuncionarioAsync(funcionarioGoogle);

                    return(true);
                }

                await InserirFuncionarioGoogleAsync(funcionarioGoogle);

                return(true);
            }
            catch (Exception ex)
            {
                await mediator.Send(new IncluirUsuarioErroCommand(funcionarioParaIncluir?.Rf, funcionarioParaIncluir?.Email,
                                                                  $"ex.: {ex.Message} <-> msg rabbit: {mensagemRabbit}. StackTrace:{ex.StackTrace}.", UsuarioTipo.Funcionario, ExecucaoTipo.FuncionarioAdicionar));

                throw;
            }
        }
Exemplo n.º 12
0
        private async Task IncluirFuncionarioNoGoogle(FuncionarioGoogle funcionarioGoogle, DirectoryService diretorioClassroom)
        {
            var usuarioParaIncluirNoGoogle = new User
            {
                Name = new UserName {
                    FamilyName = funcionarioGoogle.Sobrenome, GivenName = funcionarioGoogle.PrimeiroNome, FullName = funcionarioGoogle.Nome
                },
                PrimaryEmail = funcionarioGoogle.Email,
                OrgUnitPath  = funcionarioGoogle.OrganizationPath,
                Password     = configuration["GoogleClassroomConfig:PasswordPadraoParaUsuarioNovo"],
                ChangePasswordAtNextLogin = true
            };

            var requestCreate   = diretorioClassroom.Users.Insert(usuarioParaIncluirNoGoogle);
            var usuarioIncluido = await requestCreate.ExecuteAsync();

            if (usuarioIncluido is null)
            {
                throw new NegocioException("Não foi possível obter o funcionário incluído no Google Classroom.");
            }

            funcionarioGoogle.GoogleClassroomId = usuarioIncluido.Id;
        }
Exemplo n.º 13
0
 private async Task InserirFuncionarioAsync(FuncionarioGoogle funcionarioGoogle)
 {
     funcionarioGoogle.Indice = await mediator.Send(new IncluirUsuarioCommand(funcionarioGoogle));
     await IniciarSyncGoogleCursosDoFuncionarioAsync(funcionarioGoogle);
 }
Exemplo n.º 14
0
 public InserirFuncionarioGoogleCommand(FuncionarioGoogle funcionarioGoogle)
 {
     FuncionarioGoogle = funcionarioGoogle;
 }
 public IncluirUsuarioCommand(FuncionarioGoogle funcionarioGoogle)
     : this(usuarioGoogle : funcionarioGoogle)
 {
     Id = funcionarioGoogle.Rf;
 }