private async ValueTask <User> TryCatch(ReturningUserFunction returningUserFunction) { try { return(await returningUserFunction()); } catch (NullUserException nullUserException) { throw CreateAndLogValidationException(nullUserException); } catch (InvalidUserException invalidUserException) { throw CreateAndLogValidationException(invalidUserException); } catch (NotFoundUserException nullUserException) { throw CreateAndLogValidationException(nullUserException); } catch (DuplicateKeyException duplicateKeyException) { var alreadyExistsUserException = new AlreadyExistsUserException(duplicateKeyException); throw CreateAndLogValidationException(alreadyExistsUserException); } catch (SqlException sqlException) { var failedUserStorageException = new FailedUserStorageException(sqlException); throw CreateAndLogCriticalDependencyException(failedUserStorageException); } catch (DbUpdateConcurrencyException dbUpdateConcurrencyException) { var lockedUserException = new LockedUserException(dbUpdateConcurrencyException); throw CreateAndLogDependencyException(lockedUserException); } catch (DbUpdateException dbUpdateException) { var failedUserStorageException = new FailedUserStorageException(dbUpdateException); throw CreateAndLogDependencyException(failedUserStorageException); } catch (Exception exception) { var failedUserServiceException = new FailedUserServiceException(exception); throw CreateAndLogServiceException(failedUserServiceException); } }
public async Task ShouldThrowServiceExceptionOnModifyIfServiceExceptionOccursAndLogItAsync() { // given int randomNegativeNumber = GetNegativeRandomNumber(); DateTimeOffset randomDateTime = GetRandomDateTime(); User randomUser = CreateRandomUser(randomDateTime); User someUser = randomUser; someUser.CreatedDate = randomDateTime.AddMinutes(randomNegativeNumber); var serviceException = new Exception(); var failedUserServiceException = new FailedUserServiceException(serviceException); var expectedUserServiceException = new UserServiceException(failedUserServiceException); this.userManagementBrokerMock.Setup(broker => broker.SelectUserByIdAsync(It.IsAny <Guid>())) .ThrowsAsync(serviceException); this.dateTimeBrokerMock.Setup(broker => broker.GetCurrentDateTime()) .Returns(randomDateTime); // when ValueTask <User> modifyUserTask = this.userService.ModifyUserAsync(someUser); // then await Assert.ThrowsAsync <UserServiceException>(() => modifyUserTask.AsTask()); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.userManagementBrokerMock.Verify(broker => broker.SelectUserByIdAsync(It.IsAny <Guid>()), Times.Once); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs( expectedUserServiceException))), Times.Once); this.loggingBrokerMock.VerifyNoOtherCalls(); this.userManagementBrokerMock.VerifyNoOtherCalls(); this.dateTimeBrokerMock.VerifyNoOtherCalls(); }
public async Task ShouldThrowServiceExceptionOnCreateWhenExceptionOccursAndLogItAsync() { // given DateTimeOffset dateTime = GetRandomDateTime(); User randomUser = CreateRandomUser(dates: dateTime); User inputUser = randomUser; var serviceException = new Exception(); string password = GetRandomPassword(); var failedUserServiceException = new FailedUserServiceException(serviceException); var expectedAssignmentServiceException = new UserServiceException(failedUserServiceException); this.dateTimeBrokerMock.Setup(broker => broker.GetCurrentDateTime()) .Returns(dateTime); this.userManagementBrokerMock.Setup(broker => broker.InsertUserAsync(It.IsAny <User>(), It.IsAny <string>())) .ThrowsAsync(serviceException); // when ValueTask <User> registerUserTask = this.userService.RegisterUserAsync(inputUser, password); // then await Assert.ThrowsAsync <UserServiceException>(() => registerUserTask.AsTask()); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs( expectedAssignmentServiceException))), Times.Once); this.userManagementBrokerMock.Verify(broker => broker.InsertUserAsync(It.IsAny <User>(), It.IsAny <string>()), Times.Once); this.dateTimeBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.userManagementBrokerMock.VerifyNoOtherCalls(); }
private IQueryable <User> TryCatch(ReturningQueryableUserFunction returningQueryableUserFunction) { try { return(returningQueryableUserFunction()); } catch (SqlException sqlException) { var failedUserStorageException = new FailedUserStorageException(sqlException); throw CreateAndLogCriticalDependencyException(failedUserStorageException); } catch (Exception exception) { var failedUserServiceException = new FailedUserServiceException(exception); throw CreateAndLogServiceException(failedUserServiceException); } }
public async Task ShouldThrowServiceExceptionOnRetrieveWhenExceptionOccursAndLogItAsync() { // given Guid someUserId = Guid.NewGuid(); var serviceException = new Exception(); var failedUserServiceException = new FailedUserServiceException(serviceException); var expectedUserServiceException = new UserServiceException(failedUserServiceException); this.userManagementBrokerMock.Setup(broker => broker.SelectUserByIdAsync(It.IsAny <Guid>())) .ThrowsAsync(serviceException); // when ValueTask <User> retrieveUserTask = this.userService.RetrieveUserByIdAsync(someUserId); // then await Assert.ThrowsAsync <UserServiceException>(() => retrieveUserTask.AsTask()); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs( expectedUserServiceException))), Times.Once); this.userManagementBrokerMock.Verify(broker => broker.SelectUserByIdAsync(It.IsAny <Guid>()), Times.Once); this.dateTimeBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.userManagementBrokerMock.VerifyNoOtherCalls(); }
public void ShouldThrowServiceExceptionOnRetrieveAllWhenExceptionOccursAndLogIt() { // given var serviceException = new Exception(); var failedUserServiceException = new FailedUserServiceException(serviceException); var expectedUserServiceException = new UserServiceException(failedUserServiceException); this.userManagementBrokerMock.Setup(broker => broker.SelectAllUsers()) .Throws(serviceException); // When Action retrieveAllUsersAction = () => this.userService.RetrieveAllUsers(); // then Assert.Throws <UserServiceException>( retrieveAllUsersAction); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs( expectedUserServiceException))), Times.Once); this.userManagementBrokerMock.Verify(broker => broker.SelectAllUsers(), Times.Once); this.dateTimeBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.userManagementBrokerMock.VerifyNoOtherCalls(); }