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);
        }
        private async Task InserirAlunoCursoGoogleAsync(AlunoGoogle alunoGoogle, CursoGoogle cursoGoogle)
        {
            var alunoCursoGoogle = new AlunoCursoGoogle(alunoGoogle.Indice, cursoGoogle.Id);

            try
            {
                var professorCursoSincronizado = await mediator.Send(new InserirAlunoCursoGoogleCommand(alunoCursoGoogle, alunoGoogle.Email));

                if (professorCursoSincronizado)
                {
                    await InserirAlunoCursoAsync(alunoCursoGoogle);
                }
            }
            catch (GoogleApiException gEx)
            {
                if (gEx.EhErroDeDuplicidade())
                {
                    await InserirAlunoCursoAsync(alunoCursoGoogle);
                }
                else
                {
                    throw;
                }
            }
        }
コード例 #3
0
        private async Task Valida_Tratamento_De_Aluno_Ja_Incluso_No_Curso_Deve_Retornar_True()
        {
            // Arrange
            var alunoCurso  = new AlunoCursoEol(1234567, 1010, 6);
            var alunoGoogle = new AlunoGoogle(1234567, "José da Silva", "*****@*****.**", string.Empty);
            var cursoGoogle = new CursoGoogle("Curso Google", "Seção", 1010, 6, "*****@*****.**");

            mediator.Setup(a => a.Send(It.IsAny <ObterAlunosPorCodigosQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new List <AlunoGoogle> {
                alunoGoogle
            });

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

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

            var alunoCursoJson = JsonConvert.SerializeObject(alunoCurso);
            var mensagem       = new MensagemRabbit(alunoCursoJson);

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

            // Assert
            Assert.True(retorno);
        }
        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 Valida_Tratamento_De_Excecoes_Do_Google_Deve_Devolver_A_GoogleApiExption_Disparada()
        {
            // Arrange
            var professorCurso  = new ProfessorCursoEol(1234567, 1010, 6);
            var professorGoogle = new ProfessorGoogle(1234567, "José da Silva", "*****@*****.**", string.Empty);
            var cursoGoogle     = new CursoGoogle("Curso Google", "Seção", 1010, 6, "*****@*****.**");

            mediator.Setup(a => a.Send(It.IsAny <ObterProfessoresPorRfsQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new List <ProfessorGoogle> {
                professorGoogle
            });

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

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

            var googleException = new GoogleApiException(string.Empty, "Erro no Google Classroom.");

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

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

            var professorCursoJson = JsonConvert.SerializeObject(professorCurso);
            var mensagem           = new MensagemRabbit(professorCursoJson);

            // Assert
            await Assert.ThrowsAsync <GoogleApiException>(() => inserirProfessorCursoGoogleUseCase.Executar(mensagem));
        }
        private async Task Valida_Tratamento_De_Duplicidade_No_Google_Deve_Retornar_True()
        {
            // Arrange
            var professorCurso  = new ProfessorCursoEol(1234567, 1010, 6);
            var professorGoogle = new ProfessorGoogle(1234567, "José da Silva", "*****@*****.**", string.Empty);
            var cursoGoogle     = new CursoGoogle("Curso Google", "Seção", 1010, 6, "*****@*****.**");

            mediator.Setup(a => a.Send(It.IsAny <ObterProfessoresPorRfsQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new List <ProfessorGoogle> {
                professorGoogle
            });

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

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

            var googleDuplicidadeException = GerarExcecaoDeDuplicidadeDoGoogle();

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

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

            var professorCursoJson = JsonConvert.SerializeObject(professorCurso);
            var mensagem           = new MensagemRabbit(professorCursoJson);

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

            // Assert
            Assert.True(retorno);
        }
コード例 #7
0
        private async Task IniciarSyncGoogleUsuariosDoCursoAsync(CursoGoogle cursoGoogle)
        {
            await IniciarSyncGoogleProfessoresDoCursoAsync(cursoGoogle);
            await IniciarSyncGoogleAlunosDoCursoAsync(cursoGoogle);

            if (cursoGoogle.TurmaTipo != TurmaTipo.Programa)
            {
                await IniciarSyncGoogleFuncionariosDoCursoAsync(cursoGoogle);
            }
        }
コード例 #8
0
 public InserirCursoCommand(CursoGoogle cursoGoogle)
 {
     Id      = cursoGoogle.Id;
     Email   = cursoGoogle.Email;
     Nome    = cursoGoogle.Nome;
     Secao   = cursoGoogle.Secao;
     TurmaId = cursoGoogle.TurmaId;
     ComponenteCurricularId = cursoGoogle.ComponenteCurricularId;
     DataInclusao           = cursoGoogle.DataInclusao;
 }
コード例 #9
0
        public async Task <bool> Executar(MensagemRabbit mensagemRabbit)
        {
            if (mensagemRabbit.Mensagem is null)
            {
                throw new NegocioException("Não foi possível incluir o curso. A mensagem enviada é inválida.");
            }

            var cursoParaIncluir = JsonConvert.DeserializeObject <CursoEol>(mensagemRabbit.Mensagem.ToString());

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

            try
            {
                if (string.IsNullOrWhiteSpace(cursoParaIncluir.Email))
                {
                    await mediator.Send(new InserirCursoErroCommand(cursoParaIncluir.TurmaId, cursoParaIncluir.ComponenteCurricularId, string.Empty, null, ExecucaoTipo.CursoAdicionar, ErroTipo.CursoSemEmail));

                    return(false);
                }

                var cursoGoogle = new CursoGoogle(
                    cursoParaIncluir.Nome,
                    cursoParaIncluir.Secao,
                    cursoParaIncluir.TurmaId,
                    cursoParaIncluir.ComponenteCurricularId,
                    cursoParaIncluir.Email,
                    cursoParaIncluir.TurmaTipo);

                var existeCurso = await mediator.Send(new ExisteCursoPorTurmaComponenteCurricularQuery(cursoParaIncluir.TurmaId, cursoParaIncluir.ComponenteCurricularId));

                if (existeCurso)
                {
                    await IniciarSyncGoogleUsuariosDoCursoAsync(cursoGoogle);

                    return(true);
                }

                await mediator.Send(new InserirCursoGoogleCommand(cursoGoogle));

                await InserirCursoAsync(cursoGoogle);
                await IniciarSyncGoogleUsuariosDoCursoAsync(cursoGoogle);

                return(true);
            }
            catch (Exception ex)
            {
                await mediator.Send(new InserirCursoErroCommand(cursoParaIncluir.TurmaId, cursoParaIncluir.ComponenteCurricularId,
                                                                $"ex.: {ex.Message} <-> msg rabbit: {mensagemRabbit.Mensagem}", null, ExecucaoTipo.CursoAdicionar, ErroTipo.Interno));

                throw;
            }
        }
コード例 #10
0
        private async Task IniciarSyncGoogleFuncionariosDoCursoAsync(CursoGoogle cursoGoogle)
        {
            var publicarFuncionariosDoCurso = await mediator.Send(new PublicaFilaRabbitCommand(RotasRabbit.FilaCursoFuncionarioSync, RotasRabbit.FilaCursoFuncionarioSync, cursoGoogle));

            if (!publicarFuncionariosDoCurso)
            {
                await mediator.Send(new InserirCursoErroCommand(cursoGoogle.TurmaId, cursoGoogle.ComponenteCurricularId,
                                                                $"O curso Turma {cursoGoogle.TurmaId} e Componente Curricular {cursoGoogle.ComponenteCurricularId} foi incluído com sucesso, mas não foi possível iniciar a sincronização dos funcionários deste curso.",
                                                                null, ExecucaoTipo.FuncionarioCursoAdicionar, ErroTipo.Interno));
            }
        }
        private async Task IncluirCursoParaIncluirProfessoresComErroAsync(CursoGoogle cursoGoogle, string mensagem)
        {
            var command = new IncluirCursoUsuarioErroCommand(
                cursoGoogle.TurmaId,
                cursoGoogle.ComponenteCurricularId,
                ExecucaoTipo.ProfessorCursoAdicionar,
                ErroTipo.Negocio,
                mensagem);

            await mediator.Send(command);
        }
コード例 #12
0
        private async Task InserirCursoAsync(CursoGoogle cursoGoogle)
        {
            try
            {
                await mediator.Send(new InserirCursoCommand(cursoGoogle));
            }
            catch
            {
                await mediator.Send(new ArquivarCursoGoogleCommand(cursoGoogle.Id));

                throw;
            }
        }
        private async Task <long> InserirCursoGoogle(string salaVirtual)
        {
            var cursoGoogle = new CursoGoogle(salaVirtual, ConstanteFormacaoCidade.PREFIXO_SALA_VIRTUAL, ConstanteFormacaoCidade.EMAIL_DONO_CURSO);
            var cursoId     = await mediator.Send(new ExisteCursoPorNomeQuery(cursoGoogle.Nome));

            if (cursoId == 0)
            {
                await mediator.Send(new InserirCursoGoogleCommand(cursoGoogle));

                return(cursoGoogle.Id);
            }
            return(cursoId);
        }
コード例 #14
0
        private async Task IncluirCursoNoGoogle(CursoGoogle cursoGoogle, ClassroomService servicoClassroom)
        {
            var cursoParaIncluirGoogle = new Course()
            {
                Name        = cursoGoogle.Nome,
                Section     = cursoGoogle.Secao,
                OwnerId     = cursoGoogle.Email,
                CourseState = "ACTIVE",
            };

            var requestCreate = servicoClassroom.Courses.Create(cursoParaIncluirGoogle);
            var cursoIncluido = await requestCreate.ExecuteAsync();

            cursoGoogle.Id = long.Parse(cursoIncluido.Id);
        }
        private async Task Valida_Tratamento_De_Curso_Nao_Incluso_Deve_Retornar_False()
        {
            // Arrange
            var         professorCurso  = new ProfessorCursoEol(1234567, 1010, 6);
            var         professorGoogle = new ProfessorGoogle(1234567, "José da Silva", "*****@*****.**", string.Empty);
            CursoGoogle cursoGoogle     = null;

            mediator.Setup(a => a.Send(It.IsAny <ObterProfessoresPorRfsQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new List <ProfessorGoogle> {
                professorGoogle
            });

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

            var professorCursoJson = JsonConvert.SerializeObject(professorCurso);
            var mensagem           = new MensagemRabbit(professorCursoJson);

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

            // Assert
            Assert.False(retorno);
        }
コード例 #16
0
 public AlterarCursoCommand(CursoGoogle curso)
 {
     Curso = curso;
 }
コード例 #17
0
        private async Task AtribuirProfessorComoDonoDoCurso(ProfessorCursoEol professorCursoEolParaIncluir, IEnumerable <ProfessorGoogle> professor, CursoGoogle curso)
        {
            var usuarioAtual = await mediator.Send(new ObterUsuarioPorEmailQuery(curso.Email));

            var ehGestor = DonoDoCursoEhGestor(usuarioAtual);

            if (professorCursoEolParaIncluir.Modalidade != 0 && professorCursoEolParaIncluir.Modalidade != 1 && ehGestor)
            {
                var retornoGoogle = await mediator.Send(new AtribuirDonoCursoGoogleCommand(curso.Id, professor.First().GoogleClassroomId));

                if (retornoGoogle)
                {
                    curso.Email = professor.First().Email;
                    await mediator.Send(new AlterarCursoCommand(curso));
                }
            }
        }
        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;
                }
            }
        }
コード例 #19
0
 public InserirCursoGoogleCommand(CursoGoogle cursoGoogle)
 {
     CursoGoogle = cursoGoogle;
 }
コード例 #20
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;
                }
            }
        }
コード例 #21
0
        private async Task InserirProfessorCursoGoogleAsync(ProfessorGoogle professorGoogle, CursoGoogle cursoGoogle, bool existeProfessorCursoLocal)
        {
            var professorCursoGoogle = new ProfessorCursoGoogle(professorGoogle.Indice, cursoGoogle.Id);

            try
            {
                var professorCursoSincronizado = !existeProfessorCursoLocal && await mediator.Send(new InserirProfessorCursoGoogleCommand(professorCursoGoogle, professorGoogle.Email));

                if (professorCursoSincronizado && !existeProfessorCursoLocal)
                {
                    await InserirProfessorCursoAsync(professorCursoGoogle);
                }
            }
            catch (GoogleApiException gEx)
            {
                if (gEx.EhErroDeDuplicidade())
                {
                    await InserirProfessorCursoAsync(professorCursoGoogle);
                }
                else
                {
                    throw;
                }
            }
        }