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; } } }
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); }
private async Task IniciarSyncGoogleUsuariosDoCursoAsync(CursoGoogle cursoGoogle) { await IniciarSyncGoogleProfessoresDoCursoAsync(cursoGoogle); await IniciarSyncGoogleAlunosDoCursoAsync(cursoGoogle); if (cursoGoogle.TurmaTipo != TurmaTipo.Programa) { await IniciarSyncGoogleFuncionariosDoCursoAsync(cursoGoogle); } }
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; }
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; } }
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); }
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); }
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); }
public AlterarCursoCommand(CursoGoogle curso) { Curso = curso; }
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; } } }
public InserirCursoGoogleCommand(CursoGoogle cursoGoogle) { CursoGoogle = cursoGoogle; }
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; } } }
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; } } }