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; } } }
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); }
private async Task InserirFuncionarioAsync(FuncionarioGoogle funcionarioGoogle) { if (_deveExecutarIntegracao) { funcionarioGoogle.Indice = await mediator.Send(new IncluirUsuarioCommand(funcionarioGoogle)); } }
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 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); }
private async Task IncluirCursoDoFuncionarioComErroAsync(FuncionarioGoogle funcionarioGoogle, string mensagem) { var command = new IncluirCursoUsuarioErroCommand( funcionarioGoogle.Rf, ExecucaoTipo.FuncionarioCursoAdicionar, ErroTipo.Negocio, mensagem); await mediator.Send(command); }
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); }
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; } }
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; }
private async Task InserirFuncionarioAsync(FuncionarioGoogle funcionarioGoogle) { funcionarioGoogle.Indice = await mediator.Send(new IncluirUsuarioCommand(funcionarioGoogle)); await IniciarSyncGoogleCursosDoFuncionarioAsync(funcionarioGoogle); }
public InserirFuncionarioGoogleCommand(FuncionarioGoogle funcionarioGoogle) { FuncionarioGoogle = funcionarioGoogle; }
public IncluirUsuarioCommand(FuncionarioGoogle funcionarioGoogle) : this(usuarioGoogle : funcionarioGoogle) { Id = funcionarioGoogle.Rf; }