public static void ConfigureExceptionHandler(this IApplicationBuilder app) { app.UseExceptionHandler(error => { error.Run(async context => { var exceptionHandlerFeature = context.Features.Get <IExceptionHandlerFeature>(); var exception = exceptionHandlerFeature.Error; var statusCode = exception switch { ResourceNotFoundException _ => (int)HttpStatusCode.NotFound, ModelFormatException _ => (int)HttpStatusCode.PreconditionFailed, ResourceAlreadyExistsException _ => (int)HttpStatusCode.Conflict, InvalidLoginException _ => (int)HttpStatusCode.Unauthorized, UnauthorizedException _ => (int)HttpStatusCode.Unauthorized, InvalidProductIdentifierException _ => (int)HttpStatusCode.PreconditionFailed, _ => (int)HttpStatusCode.InternalServerError }; context.Response.ContentType = "application/json"; context.Response.StatusCode = statusCode; await context.Response.WriteAsync(new ExceptionModel { StatusCode = statusCode, Message = exception.Message }.ToString()); }); }); }
void GetSchemasForms(TB_USUARIO userInfo) { try { var visitas = GetRest("api/mobile/formularios/schemas", Cache.TYPE_FORM, userInfo, 3); var request = JsonConvert.DeserializeObject <RestFormSchemasModel>(visitas).result; model.db.InsertSchema(request); } catch (Exception x) { if (!(x is NotModifiedException || x is TaskCanceledException)) { exceptionMessage = x.Message; } else if (x is InvalidLoginException) { exceptionMessage = x.Message; invalidException = (InvalidLoginException)x; throw x; } else if (x is NotModifiedException) { if (((NotModifiedException)x).typeofExeption == HttpStatusCode.NotFound) { model.dbCache.UpdateCache(Cache.TYPE_FORM, null, userInfo.ID); } } } }
public void ShouldLoginUser() { var fixture = new Fixture(); var expectedUser = fixture.Create <User>(); var testLogin = new User { Username = "******", Password = "******" }; var expectedEx = new InvalidLoginException(testLogin.Username); User actualUser = null; var userRepoMock = new Mock <IUserRepository>(); userRepoMock.Setup(m => m.LoginAsync(testLogin)).ReturnsAsync(expectedUser).Verifiable(); var contextMock = new Mock <IContext>(); contextMock.Setup(m => m.GetService <IUserRepository>()).Returns(userRepoMock.Object); contextMock.Setup(m => m.GetService <ILogger>()).Returns(new Mock <ILogger>().Object); contextMock.SetupSet(p => p.CurrentUser = It.IsAny <User>()).Callback <User>(v => actualUser = v); var model = new LoginViewModel(contextMock.Object); model.Login(testLogin).Wait(); userRepoMock.Verify(m => m.LoginAsync(testLogin), Times.Once); Assert.Equal(expectedUser, actualUser); }
/// <summary> /// Executa todos os processos do sincronizador ( Gets, Posts, Puts, envios de fotos e etc ) /// </summary> public void ExecRestApis() { try { userInfos = model.db.SelectInfoDeUsuarios(); if (userInfos != null) { if (token == null || token.Count < userInfos.Count) { GetToken(); } foreach (var userInfo in userInfos) { //importante v1: Nao alterar as ordems, senao vai da merda. SendPontoEletronico(userInfo); SendVisitasJustificadas(userInfo); SendForms(userInfo); SendVisitaAtualizada(userInfo); //importante v2: executar os gets somente apos os puts e posts. GetVisitas(userInfo); //importante v3: Quero pizza. } exceptionMessage = ""; invalidException = null; } } catch (InvalidLoginException invalidLogin) { exceptionMessage = invalidLogin.Message; invalidException = invalidLogin; throw invalidLogin; } catch (AggregateException agr) { if (!(agr.InnerException is NotModifiedException || agr.InnerException is TaskCanceledException)) { exceptionMessage = agr.InnerException.Message; } else if (agr.InnerException is InvalidLoginException) { exceptionMessage = agr.InnerException.Message; invalidException = (InvalidLoginException)agr.InnerException; throw agr; } } catch (Exception x) { if (!(x is NotModifiedException || x is TaskCanceledException)) { exceptionMessage = x.Message; } else if (x is InvalidLoginException) { exceptionMessage = x.Message; invalidException = (InvalidLoginException)x; throw x; } } }
void GetVisitas(TB_USUARIO userInfo) { var visitasIDs = new List <string>(); if (model.db.HasVisitasInDate(DateTime.Now, userInfo.ID)) { model.dbCache.UpdateCache(Cache.VISITAS_ATUALIZADAS, null, userInfo.ID); } try { var visitaCon = new PDVsRestCon(); var visitas = GetRest("api/mobile/funcionarios/" + userInfo.ID + "/visitas/" + DateTime.Now.ToString("yyyy-MM-dd"), Cache.VISITAS_ATUALIZADAS, userInfo, 3); GetProdutos(userInfo); GetSchemasForms(userInfo); var request = JsonConvert.DeserializeObject <PDVsRestModel>(visitas).result; foreach (PdvRestModel item in request) { if (item.formularios.Count > 0) { visitasIDs.Add(item.id); var isNewPDV = model.db.InsertVisitas(item.id, DateTime.Now, visitaCon.GetGEO_PT(item), item.lat, item.lng, item.formularios, userInfo.ID); if (isNewPDV) { idsPdvsNovos.Add(visitaCon.GetGEO_PT(item)); } } } } catch (Exception x) { if (!(x is NotModifiedException || x is TaskCanceledException)) { exceptionMessage = x.Message; } else if (x is InvalidLoginException) { exceptionMessage = x.Message; invalidException = (InvalidLoginException)x; throw x; } } model.db.ConluirVisitasNotInService(visitasIDs, userInfo.ID); }
public void ShouldHandleInvalidLogin() { var testLogin = new User { Username = "******", Password = "******" }; var expectedEx = new InvalidLoginException(testLogin.Username); var userRepoMock = new Mock <IUserRepository>(); userRepoMock.Setup(m => m.LoginAsync(testLogin)).ThrowsAsync(expectedEx); var contextMock = new Mock <IContext>(); contextMock.Setup(m => m.GetService <IUserRepository>()).Returns(userRepoMock.Object); contextMock.Setup(m => m.GetService <ILogger>()).Returns(new Mock <ILogger>().Object); var model = new LoginViewModel(contextMock.Object); var ex = Assert.ThrowsAsync <PublicException>(() => model.Login(testLogin)).Result; Assert.Equal("invalid-login", ex.Id); }