public async void ShouldThrowValidationExceptionOnCreateWhenAssignmentAlreadyExistsAndLogItAsync() { // given DateTimeOffset dateTime = GetRandomDateTime(); Assignment randomAssignment = CreateRandomAssignment(dateTime); Assignment alreadyExistsAssignment = randomAssignment; alreadyExistsAssignment.UpdatedBy = alreadyExistsAssignment.CreatedBy; string randomMessage = GetRandomMessage(); string exceptionMessage = randomMessage; var duplicateKeyException = new DuplicateKeyException(exceptionMessage); var alreadyExistsAssignmentException = new AlreadyExistsAssignmentException(duplicateKeyException); var expectedAssignmentValidationException = new AssignmentValidationException(alreadyExistsAssignmentException); this.dateTimeBrokerMock.Setup(broker => broker.GetCurrentDateTime()) .Returns(dateTime); this.storageBrokerMock.Setup(broker => broker.InsertAssignmentAsync(alreadyExistsAssignment)) .ThrowsAsync(duplicateKeyException); // when ValueTask <Assignment> createAssignmentTask = this.assignmentService.CreateAssignmentAsync(alreadyExistsAssignment); // then await Assert.ThrowsAsync <AssignmentValidationException>(() => createAssignmentTask.AsTask()); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.storageBrokerMock.Verify(broker => broker.InsertAssignmentAsync(alreadyExistsAssignment), Times.Once); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs(expectedAssignmentValidationException))), Times.Once); this.dateTimeBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); }
private async ValueTask <Assignment> TryCatch(ReturningAssignmentFunction returningAssignmentFunction) { try { return(await returningAssignmentFunction()); } catch (NullAssignmentException nullAssignmentException) { throw CreateAndLogValidationException(nullAssignmentException); } catch (InvalidAssignmentException invalidAssignmentInputException) { throw CreateAndLogValidationException(invalidAssignmentInputException); } catch (NotFoundAssignmentException notFoundAssignmentException) { throw CreateAndLogValidationException(notFoundAssignmentException); } catch (DuplicateKeyException duplicateKeyException) { var alreadyExistsAssignmentException = new AlreadyExistsAssignmentException(duplicateKeyException); throw CreateAndLogValidationException(alreadyExistsAssignmentException); } catch (SqlException sqlException) { throw CreateAndLogCriticalDependencyException(sqlException); } catch (DbUpdateConcurrencyException dbUpdateConcurrencyException) { var lockedAssignmentException = new LockedAssignmentException(dbUpdateConcurrencyException); throw CreateAndLogDependencyException(lockedAssignmentException); } catch (DbUpdateException dbUpdateException) { throw CreateAndLogDependencyException(dbUpdateException); } catch (Exception exception) { var failedAssignmentServiceException = new FailedAssignmentServiceException(exception); throw CreateAndLogServiceException(failedAssignmentServiceException); } }