Example #1
0
        public async Task ShouldThrowValidationExceptionOnModifyIfContactDoesntExistAndLogItAsync()
        {
            // given
            int            randomNegativeMinutes = GetNegativeRandomNumber();
            DateTimeOffset dateTime           = GetRandomDateTime();
            Contact        randomContact      = CreateRandomContact(dateTime);
            Contact        nonExistentContact = randomContact;

            nonExistentContact.CreatedDate = dateTime.AddMinutes(randomNegativeMinutes);
            Contact noContact = null;
            var     notFoundContactException = new NotFoundContactException(nonExistentContact.Id);

            var expectedContactValidationException =
                new ContactValidationException(notFoundContactException);

            this.storageBrokerMock.Setup(broker =>
                                         broker.SelectContactByIdAsync(nonExistentContact.Id))
            .ReturnsAsync(noContact);

            this.dateTimeBrokerMock.Setup(broker =>
                                          broker.GetCurrentDateTime())
            .Returns(dateTime);

            // when
            ValueTask <Contact> modifyContactTask =
                this.contactService.ModifyContactAsync(nonExistentContact);

            // then
            await Assert.ThrowsAsync <ContactValidationException>(() =>
                                                                  modifyContactTask.AsTask());

            this.dateTimeBrokerMock.Verify(broker =>
                                           broker.GetCurrentDateTime(),
                                           Times.Once);

            this.storageBrokerMock.Verify(broker =>
                                          broker.SelectContactByIdAsync(nonExistentContact.Id),
                                          Times.Once);

            this.loggingBrokerMock.Verify(broker =>
                                          broker.LogError(It.Is(SameExceptionAs(
                                                                    expectedContactValidationException))),
                                          Times.Once);

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
Example #2
0
        public async Task ShouldThrowValidatonExceptionOnDeleteWhenStorageContactIsInvalidAndLogItAsync()
        {
            // given
            DateTimeOffset dateTime           = GetRandomDateTime();
            Contact        randomContact      = CreateRandomContact(dateTime);
            Guid           inputContactId     = randomContact.Id;
            Contact        inputContact       = randomContact;
            Contact        nullStorageContact = null;

            var notFoundContactException = new NotFoundContactException(inputContactId);

            var expectedContactValidationException =
                new ContactValidationException(notFoundContactException);

            this.storageBrokerMock.Setup(broker =>
                                         broker.SelectContactByIdAsync(inputContactId))
            .ReturnsAsync(nullStorageContact);

            // when
            ValueTask <Contact> actualContactTask =
                this.contactService.RemoveContactByIdAsync(inputContactId);

            // then
            await Assert.ThrowsAsync <ContactValidationException>(() => actualContactTask.AsTask());

            this.loggingBrokerMock.Verify(broker =>
                                          broker.LogError(It.Is(SameExceptionAs(
                                                                    expectedContactValidationException))),
                                          Times.Once);

            this.storageBrokerMock.Verify(broker =>
                                          broker.SelectContactByIdAsync(inputContactId),
                                          Times.Once);

            this.storageBrokerMock.Verify(broker =>
                                          broker.DeleteContactAsync(It.IsAny <Contact>()),
                                          Times.Never);

            this.storageBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
Example #3
0
        public async void ShouldThrowValidationExceptionOnRetrieveWhenStorageContactIsNullAndLogItAsync()
        {
            //given
            Guid    randomContactId       = Guid.NewGuid();
            Guid    inputContactId        = randomContactId;
            Contact invalidStorageContact = null;

            var notFoundContactException = new NotFoundContactException(inputContactId);

            var expectedContactValidationException = new ContactValidationException(notFoundContactException);

            this.storageBrokerMock.Setup(broker =>
                                         broker.SelectContactByIdAsync(inputContactId))
            .ReturnsAsync(invalidStorageContact);

            //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.Once);

            this.dateTimeBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }