private async ValueTask <Contact> TryCatch(ReturningContactFunction returningContactFunction) { try { return(await returningContactFunction()); } catch (NullContactException nullContactException) { throw CreateAndLogValidationException(nullContactException); } catch (InvalidContactException invalidContactException) { throw CreateAndLogValidationException(invalidContactException); } catch (SqlException sqlException) { throw CreateAndLogCriticalDependencyException(sqlException); } catch (DuplicateKeyException duplicateKeyException) { var alreadyExistsContactException = new AlreadyExistsContactException(duplicateKeyException); throw CreateAndLogValidationException(alreadyExistsContactException); } catch (DbUpdateException dbUpdateException) { throw CreateAndLogDependencyException(dbUpdateException); } catch (Exception exception) { throw CreateAndLogServiceException(exception); } }
public async void ShouldThrowValidationExceptionOnAddWhenContactAlreadyExistsAndLogItAsync() { // given DateTimeOffset dateTime = GetRandomDateTime(); Contact randomContact = CreateRandomContact(dateTime); Contact alreadyExistsContact = randomContact; alreadyExistsContact.UpdatedBy = alreadyExistsContact.CreatedBy; string randomMessage = GetRandomMessage(); string exceptionMessage = randomMessage; var duplicateKeyException = new DuplicateKeyException(exceptionMessage); var alreadyExistsContactException = new AlreadyExistsContactException(duplicateKeyException); var expectedContactValidationException = new ContactValidationException(alreadyExistsContactException); this.dateTimeBrokerMock.Setup(broker => broker.GetCurrentDateTime()) .Returns(dateTime); this.storageBrokerMock.Setup(broker => broker.InsertContactAsync(alreadyExistsContact)) .ThrowsAsync(duplicateKeyException); // when ValueTask <Contact> addContactTask = this.contactService.AddContactAsync(alreadyExistsContact); // then await Assert.ThrowsAsync <ContactValidationException>(() => addContactTask.AsTask()); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.storageBrokerMock.Verify(broker => broker.InsertContactAsync(alreadyExistsContact), Times.Once); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs( expectedContactValidationException))), Times.Once); this.dateTimeBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); }