public async void ShouldThrowValidationExceptionOnRetrieveWhenIdIsInvalidAndLogItAsync() { //given Guid randomContactId = default; Guid inputContactId = randomContactId; var invalidContactInputException = new InvalidContactException( parameterName: nameof(Contact.Id), parameterValue: inputContactId); var expectedContactValidationException = new ContactValidationException(invalidContactInputException); //when ValueTask <Contact> retrieveContactByIdTask = this.contactService.RetrieveContactByIdAsync(inputContactId); //then await Assert.ThrowsAsync <ContactValidationException>(() => retrieveContactByIdTask.AsTask()); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs(expectedContactValidationException))), Times.Once ); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Never); this.storageBrokerMock.Verify(broker => broker.SelectContactByIdAsync(It.IsAny <Guid>()), Times.Never); this.loggingBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); }
public async Task ShouldThrowValidationExceptionOnModifyWhenContactIdIsInvalidAndLogItAsync() { //given Guid invalidContactId = Guid.Empty; DateTimeOffset dateTime = GetRandomDateTime(); Contact randomContact = CreateRandomContact(dateTime); Contact invalidContact = randomContact; invalidContact.Id = invalidContactId; var invalidContactException = new InvalidContactException( parameterName: nameof(Contact.Id), parameterValue: invalidContact.Id); var expectedContactValidationException = new ContactValidationException(invalidContactException); //when ValueTask <Contact> modifyContactTask = this.contactService.ModifyContactAsync(invalidContact); //then await Assert.ThrowsAsync <ContactValidationException>(() => modifyContactTask.AsTask()); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs(expectedContactValidationException))), Times.Once); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); this.dateTimeBrokerMock.VerifyNoOtherCalls(); }
public async void ShouldThrowValidationExceptionOnModifyWhenUpdatedDateIsSameAsCreatedDateAndLogItAsync() { // given DateTimeOffset dateTime = GetRandomDateTime(); Contact randomContact = CreateRandomContact(dateTime); Contact inputContact = randomContact; var invalidContactInputException = new InvalidContactException( parameterName: nameof(Contact.UpdatedDate), parameterValue: inputContact.UpdatedDate); var expectedContactValidationException = new ContactValidationException(invalidContactInputException); // when ValueTask <Contact> modifyContactTask = this.contactService.ModifyContactAsync(inputContact); // then await Assert.ThrowsAsync <ContactValidationException>(() => modifyContactTask.AsTask()); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs(expectedContactValidationException))), Times.Once); this.storageBrokerMock.Verify(broker => broker.SelectContactByIdAsync(It.IsAny <Guid>()), Times.Never); this.dateTimeBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); }
public async Task ShouldThrowValidationExceptionOnModifyIfStorageCreatedByNotSameAsCreatedByAndLogItAsync() { // given int randomNegativeMinutes = GetNegativeRandomNumber(); Guid differentId = Guid.NewGuid(); Guid invalidCreatedBy = differentId; DateTimeOffset randomDate = GetRandomDateTime(); Contact randomContact = CreateRandomContact(randomDate); Contact invalidContact = randomContact; invalidContact.CreatedDate = randomDate.AddMinutes(randomNegativeMinutes); Contact storageContact = randomContact.DeepClone(); Guid contactId = invalidContact.Id; invalidContact.CreatedBy = invalidCreatedBy; var invalidContactInputException = new InvalidContactException( parameterName: nameof(Contact.CreatedBy), parameterValue: invalidContact.CreatedBy); var expectedContactValidationException = new ContactValidationException(invalidContactInputException); this.storageBrokerMock.Setup(broker => broker.SelectContactByIdAsync(contactId)) .ReturnsAsync(storageContact); this.dateTimeBrokerMock.Setup(broker => broker.GetCurrentDateTime()) .Returns(randomDate); // when ValueTask <Contact> modifyContactTask = this.contactService.ModifyContactAsync(invalidContact); // then await Assert.ThrowsAsync <ContactValidationException>(() => modifyContactTask.AsTask()); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.storageBrokerMock.Verify(broker => broker.SelectContactByIdAsync(invalidContact.Id), Times.Once); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs( expectedContactValidationException))), Times.Once); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); this.dateTimeBrokerMock.VerifyNoOtherCalls(); }
public async void ShouldThrowValidationExceptionOnCreateWhenCreatedDateIsNotRecentAndLogItAsync( int minutes) { // given DateTimeOffset randomDate = GetRandomDateTime(); Contact randomContact = CreateRandomContact(randomDate); Contact invalidContact = randomContact; invalidContact.CreatedDate = randomDate.AddMinutes(minutes); invalidContact.UpdatedDate = invalidContact.CreatedDate; var invalidContactException = new InvalidContactException(); invalidContactException.AddData( key: nameof(Contact.CreatedDate), values: $"Date is not recent"); var expectedContactValidationException = new ContactValidationException(invalidContactException); this.dateTimeBrokerMock.Setup(broker => broker.GetCurrentDateTime()) .Returns(randomDate); // when ValueTask <Contact> createContactTask = this.contactService.AddContactAsync(invalidContact); // then await Assert.ThrowsAsync <ContactValidationException>(() => createContactTask.AsTask()); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameValidationExceptionAs( expectedContactValidationException))), Times.Once); this.storageBrokerMock.Verify(broker => broker.InsertContactAsync(It.IsAny <Contact>()), Times.Never); this.dateTimeBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); }
public async void ShouldThrowValidationExceptionOnCreateIfContactIsInvalidAndLogItAsync( string invalidText) { // given var invalidContact = new Contact { Information = invalidText, Notes = invalidText }; var invalidContactException = new InvalidContactException(); invalidContactException.AddData( key: nameof(Contact.Id), values: "Id is required"); invalidContactException.AddData( key: nameof(Contact.Information), values: "Text is required"); invalidContactException.AddData( key: nameof(Contact.Notes), values: "Text is required"); invalidContactException.AddData( key: nameof(Contact.CreatedDate), values: "Date is required"); invalidContactException.AddData( key: nameof(Contact.UpdatedDate), values: "Date is required"); invalidContactException.AddData( key: nameof(Contact.CreatedBy), values: "Id is required"); invalidContactException.AddData( key: nameof(Contact.UpdatedBy), values: "Id is required"); var expectedContactValidationException = new ContactValidationException(invalidContactException); // when ValueTask <Contact> createContactTask = this.contactService.AddContactAsync(invalidContact); // then await Assert.ThrowsAsync <ContactValidationException>(() => createContactTask.AsTask()); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameValidationExceptionAs( expectedContactValidationException))), Times.Once); this.storageBrokerMock.Verify(broker => broker.InsertContactAsync(It.IsAny <Contact>()), Times.Never); this.dateTimeBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); }