public async Task <bool> Executar(MensagemRabbit mensagemRabbit)
        {
            var filtro = mensagemRabbit.Mensagem.ToString() != null?mensagemRabbit.ObterObjetoMensagem <FiltroCargaInicialDto>() : null;

            var ultimaAtualizacao = await mediator.Send(new ObterDataUltimaExecucaoPorTipoQuery(ExecucaoTipo.AtribuicaoProfessorCursoAdicionar));

            var paginacao = new Paginacao(0, 0);
            var parametrosCargaInicialDto = filtro != null ? new ParametrosCargaInicialDto(filtro.TiposUes, filtro.Ues, filtro.Turmas, DateTime.Today.Year) :
                                            await mediator.Send(new ObterParametrosCargaIncialPorAnoQuery(DateTime.Today.Year));

            var atribuicoesDeCursosProfessores = await mediator.Send(new ObterAtribuicoesDeCursosDosProfessoresQuery(ultimaAtualizacao, paginacao, parametrosCargaInicialDto));

            foreach (var atribuicaoDeCursoDoProfessor in atribuicoesDeCursosProfessores.Items)
            {
                var cursoDoProfessorParaIncluir = new ProfessorCursoEol(atribuicaoDeCursoDoProfessor.Rf, atribuicaoDeCursoDoProfessor.TurmaId, atribuicaoDeCursoDoProfessor.ComponenteCurricularId, atribuicaoDeCursoDoProfessor.Modalidade);

                try
                {
                    var publicarProfessor = await mediator.Send(new PublicaFilaRabbitCommand(RotasRabbit.FilaProfessorCursoIncluir, RotasRabbit.FilaProfessorCursoIncluir, cursoDoProfessorParaIncluir));

                    if (!publicarProfessor)
                    {
                        await IncluirCursoDoProfessorComErroAsync(cursoDoProfessorParaIncluir, ObterMensagemDeErro(cursoDoProfessorParaIncluir));
                    }
                }
                catch (Exception ex)
                {
                    await IncluirCursoDoProfessorComErroAsync(cursoDoProfessorParaIncluir, ObterMensagemDeErro(cursoDoProfessorParaIncluir, ex));
                }
            }

            await mediator.Send(new AtualizaExecucaoControleCommand(ExecucaoTipo.AtribuicaoProfessorCursoAdicionar, DateTime.Today));

            return(true);
        }
        private async Task Valida_Tratamento_De_Professor_Ja_Incluso_No_Curso_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(true);

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

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

            // Assert
            Assert.True(retorno);
        }
        private async Task Valida_Tratamento_De_Excecoes_Ao_Comunicar_Com_Google_Deve_Devolver_A_Excecao_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 excecao = new NullReferenceException("Erro ao se comunicar Google Classroom.");

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

            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 <NullReferenceException>(() => inserirProfessorCursoGoogleUseCase.Executar(mensagem));
        }
        private static string ObterMensagemDeErro(ProfessorCursoEol cursoDoprofessorParaIncluirGoogle, Exception ex = null)
        {
            var mensagem = $"Não foi possível inserir o curso [TurmaId:{cursoDoprofessorParaIncluirGoogle.TurmaId}, ComponenteCurricularId:{cursoDoprofessorParaIncluirGoogle.ComponenteCurricularId}] professor RF{cursoDoprofessorParaIncluirGoogle.Rf} na fila para inclusão no Google Classroom.";

            if (ex is null)
            {
                return(mensagem);
            }
            return($"{mensagem}. {ex.InnerException?.Message ?? ex.Message}. {ex.StackTrace}");
        }
        private async Task IncluirCursoDoProfessorComErroAsync(ProfessorCursoEol cursoDoprofessorParaIncluirGoogle, string mensagem)
        {
            var command = new IncluirCursoUsuarioErroCommand(
                cursoDoprofessorParaIncluirGoogle.Rf,
                cursoDoprofessorParaIncluirGoogle.TurmaId,
                cursoDoprofessorParaIncluirGoogle.ComponenteCurricularId,
                ExecucaoTipo.ProfessorCursoAdicionar,
                ErroTipo.Negocio,
                mensagem);

            await mediator.Send(command);
        }
        public async Task <bool> Executar(AtribuirProfessorCursoDto atribuirProfessorCursoDto)
        {
            var professorCursoEol = new ProfessorCursoEol(atribuirProfessorCursoDto.Rf, atribuirProfessorCursoDto.TurmaId, atribuirProfessorCursoDto.ComponenteCurricularId);

            var publicarProfessorCurso = await mediator.Send(new PublicaFilaRabbitCommand(RotasRabbit.FilaProfessorCursoIncluir, RotasRabbit.FilaProfessorCursoIncluir, professorCursoEol));

            if (!publicarProfessorCurso)
            {
                throw new NegocioException("Não foi possível realizar a requisição para atribuir o professor ao curso.");
            }

            return(publicarProfessorCurso);
        }
        private async Task Valida_Tratamento_De_Professor_Nao_Incluso_Deve_Retornar_False()
        {
            // Arrange
            var professorCurso = new ProfessorCursoEol(1234567, 1010, 6);

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

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

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

            // Assert
            Assert.False(retorno);
        }
Exemple #8
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));
                }
            }
        }