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();
        }
Пример #4
0
        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();
        }
Пример #5
0
        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();
        }
Пример #6
0
        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();
        }