public async Task ShouldThrowValidationExceptionOnModifyWhenAssignmentIsNullAndLogItAsync()
        {
            //given
            Assignment invalidAssignment       = null;
            var        nullAssignmentException = new NullAssignmentException();

            var expectedAssignmentValidationException =
                new AssignmentValidationException(nullAssignmentException);

            //when
            ValueTask <Assignment> modifyAssignmentTask =
                this.assignmentService.ModifyAssignmentAsync(invalidAssignment);

            //then
            await Assert.ThrowsAsync <AssignmentValidationException>(() =>
                                                                     modifyAssignmentTask.AsTask());

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

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
Esempio n. 2
0
        public async Task ShouldThrowValidationExceptionOnCreateWhenAssignmentLabelIsInvalidAndLogItAsync(
            string invalidAssignmentLabel)
        {
            // given
            Assignment randomAssignment  = CreateRandomAssignment();
            Assignment invalidAssignment = randomAssignment;

            invalidAssignment.Label = invalidAssignmentLabel;

            var invalidAssignmentException = new InvalidAssignmentException(
                parameterName: nameof(Assignment.Label),
                parameterValue: invalidAssignment.Label);

            var expectedAssignmentValidationException =
                new AssignmentValidationException(invalidAssignmentException);

            // when
            ValueTask <Assignment> createAssignmentTask =
                this.assignmentService.CreateAssignmentAsync(invalidAssignment);

            // then
            await Assert.ThrowsAsync <AssignmentValidationException>(() =>
                                                                     createAssignmentTask.AsTask());

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

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
Esempio n. 3
0
        public async void ShouldThrowValidationExceptionOnCreateWhenAssignmentIsNullAndLogItAsync()
        {
            // given
            Assignment randomAssignment        = null;
            Assignment nullAssignment          = randomAssignment;
            var        nullAssignmentException = new NullAssignmentException();

            var expectedAssignmentValidationException =
                new AssignmentValidationException(nullAssignmentException);

            // when
            ValueTask <Assignment> createAssignmentTask =
                this.assignmentService.CreateAssignmentAsync(nullAssignment);

            // then
            await Assert.ThrowsAsync <AssignmentValidationException>(() =>
                                                                     createAssignmentTask.AsTask());

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

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

            this.dateTimeBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
        public async Task ShouldThrowValidationExceptionOnModifyWhenAssignmentIdIsInvalidAndLogItAsync()
        {
            //given
            Guid           invalidAssignmentId = Guid.Empty;
            DateTimeOffset dateTime            = GetRandomDateTime();
            Assignment     randomAssignment    = CreateRandomAssignment(dateTime);
            Assignment     invalidAssignment   = randomAssignment;

            invalidAssignment.Id = invalidAssignmentId;

            var invalidAssignmentException = new InvalidAssignmentException(
                parameterName: nameof(Assignment.Id),
                parameterValue: invalidAssignment.Id);

            var expectedAssignmentValidationException =
                new AssignmentValidationException(invalidAssignmentException);

            //when
            ValueTask <Assignment> modifyAssignmentTask =
                this.assignmentService.ModifyAssignmentAsync(invalidAssignment);

            //then
            await Assert.ThrowsAsync <AssignmentValidationException>(() =>
                                                                     modifyAssignmentTask.AsTask());

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

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
        public async void ShouldThrowValidationExceptionOnModifyWhenUpdatedDateIsSameAsCreatedDateAndLogItAsync()
        {
            // given
            DateTimeOffset dateTime         = GetRandomDateTime();
            Assignment     randomAssignment = CreateRandomAssignment(dateTime);
            Assignment     inputAssignment  = randomAssignment;

            var invalidAssignmentInputException = new InvalidAssignmentException(
                parameterName: nameof(Assignment.UpdatedDate),
                parameterValue: inputAssignment.UpdatedDate);

            var expectedAssignmentValidationException =
                new AssignmentValidationException(invalidAssignmentInputException);

            // when
            ValueTask <Assignment> modifyAssignmentTask =
                this.assignmentService.ModifyAssignmentAsync(inputAssignment);

            // then
            await Assert.ThrowsAsync <AssignmentValidationException>(() =>
                                                                     modifyAssignmentTask.AsTask());

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

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

            this.dateTimeBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
        public async void ShouldThrowValidationExceptionOnRetrieveWhenIdIsInvalidAndLogItAsync()
        {
            //given
            Guid randomAssignmentId = default;
            Guid inputAssignmentId  = randomAssignmentId;

            var invalidAssignmentInputException = new InvalidAssignmentException(
                parameterName: nameof(Assignment.Id),
                parameterValue: inputAssignmentId);

            var expectedAssignmentValidationException = new AssignmentValidationException(invalidAssignmentInputException);

            //when
            ValueTask <Assignment> retrieveAssignmentByIdTask =
                this.assignmentService.RetrieveAssignmentById(inputAssignmentId);

            //then
            await Assert.ThrowsAsync <AssignmentValidationException>(() => retrieveAssignmentByIdTask.AsTask());

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

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

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

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
        private AssignmentValidationException CreateAndLogValidationException(Exception exception)
        {
            var assignmentValidationException = new AssignmentValidationException(exception);

            this.loggingBroker.LogError(assignmentValidationException);

            return(assignmentValidationException);
        }
        public async Task ShouldThrowValidationExceptionOnModifyIfStorageCreatedByNotSameAsCreatedByAndLogItAsync()
        {
            // given
            int            randomNegativeMinutes = GetNegativeRandomNumber();
            Guid           differentId           = Guid.NewGuid();
            Guid           invalidCreatedBy      = differentId;
            DateTimeOffset randomDate            = GetRandomDateTime();
            Assignment     randomAssignment      = CreateRandomAssignment(randomDate);
            Assignment     invalidAssignment     = randomAssignment;

            invalidAssignment.CreatedDate = randomDate.AddMinutes(randomNegativeMinutes);
            Assignment storageAssignment = randomAssignment.DeepClone();
            Guid       assignmentId      = invalidAssignment.Id;

            invalidAssignment.CreatedBy = invalidCreatedBy;

            var invalidAssignmentInputException = new InvalidAssignmentException(
                parameterName: nameof(Assignment.CreatedBy),
                parameterValue: invalidAssignment.CreatedBy);

            var expectedAssignmentValidationException =
                new AssignmentValidationException(invalidAssignmentInputException);

            this.storageBrokerMock.Setup(broker =>
                                         broker.SelectAssignmentByIdAsync(assignmentId))
            .ReturnsAsync(storageAssignment);

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

            // when
            ValueTask <Assignment> modifyAssignmentTask =
                this.assignmentService.ModifyAssignmentAsync(invalidAssignment);

            // then
            await Assert.ThrowsAsync <AssignmentValidationException>(() =>
                                                                     modifyAssignmentTask.AsTask());

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

            this.storageBrokerMock.Verify(broker =>
                                          broker.SelectAssignmentByIdAsync(invalidAssignment.Id),
                                          Times.Once);

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

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
Esempio n. 9
0
        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();
        }
        public async void ShouldThrowValidationExceptionOnCreateWhenCreatedDateIsNotRecentAndLogItAsync(
            int minutes)
        {
            // given
            DateTimeOffset randomDate        = GetRandomDateTime();
            Assignment     randomAssignment  = CreateRandomAssignment(randomDate);
            Assignment     invalidAssignment = randomAssignment;

            invalidAssignment.CreatedDate = randomDate.AddMinutes(minutes);
            invalidAssignment.UpdatedDate = invalidAssignment.CreatedDate;
            var invalidAssignmentException = new InvalidAssignmentException();

            invalidAssignmentException.AddData(
                key: nameof(Assignment.CreatedDate),
                values: $"Date is not recent");

            var expectedAssignmentValidationException =
                new AssignmentValidationException(invalidAssignmentException);

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

            // when
            ValueTask <Assignment> createAssignmentTask =
                this.assignmentService.CreateAssignmentAsync(invalidAssignment);

            // then
            await Assert.ThrowsAsync <AssignmentValidationException>(() =>
                                                                     createAssignmentTask.AsTask());

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

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

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

            this.dateTimeBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
        public async Task ShouldThrowValidationExceptionOnModifyIfAssignmentDoesntExistAndLogItAsync()
        {
            // given
            int            randomNegativeMinutes = GetNegativeRandomNumber();
            DateTimeOffset dateTime              = GetRandomDateTime();
            Assignment     randomAssignment      = CreateRandomAssignment(dateTime);
            Assignment     nonExistentAssignment = randomAssignment;

            nonExistentAssignment.CreatedDate = dateTime.AddMinutes(randomNegativeMinutes);
            Assignment noAssignment = null;
            var        notFoundAssignmentException = new NotFoundAssignmentException(nonExistentAssignment.Id);

            var expectedAssignmentValidationException =
                new AssignmentValidationException(notFoundAssignmentException);

            this.storageBrokerMock.Setup(broker =>
                                         broker.SelectAssignmentByIdAsync(nonExistentAssignment.Id))
            .ReturnsAsync(noAssignment);

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

            // when
            ValueTask <Assignment> modifyAssignmentTask =
                this.assignmentService.ModifyAssignmentAsync(nonExistentAssignment);

            // then
            await Assert.ThrowsAsync <AssignmentValidationException>(() =>
                                                                     modifyAssignmentTask.AsTask());

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

            this.storageBrokerMock.Verify(broker =>
                                          broker.SelectAssignmentByIdAsync(nonExistentAssignment.Id),
                                          Times.Once);

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

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
        public async void ShouldThrowValidationExceptionOnCreateWhenUpdatedByIsNotSameToCreatedByAndLogItAsync()
        {
            // given
            DateTimeOffset dateTime          = GetRandomDateTime();
            Assignment     randomAssignment  = CreateRandomAssignment(dateTime);
            Assignment     invalidAssignment = randomAssignment;

            invalidAssignment.UpdatedBy = Guid.NewGuid();
            var invalidAssignmentInputException = new InvalidAssignmentException();

            invalidAssignmentInputException.AddData(
                key: nameof(Assignment.UpdatedBy),
                values: $"Id is not the same as {nameof(Assignment.CreatedBy)}");

            var expectedAssignmentValidationException =
                new AssignmentValidationException(invalidAssignmentInputException);

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

            // when
            ValueTask <Assignment> createAssignmentTask =
                this.assignmentService.CreateAssignmentAsync(invalidAssignment);

            // then
            await Assert.ThrowsAsync <AssignmentValidationException>(() =>
                                                                     createAssignmentTask.AsTask());

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

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

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

            this.dateTimeBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
Esempio n. 13
0
        public async Task ShouldThrowValidatonExceptionOnRemoveWhenStorageAssignmentIsInvalidAndLogItAsync()
        {
            // given
            DateTimeOffset dateTimeOffset        = GetRandomDateTime();
            Assignment     randomAssignment      = CreateRandomAssignment(dates: dateTimeOffset);
            Guid           inputAssignmentId     = randomAssignment.Id;
            Assignment     inputAssignment       = randomAssignment;
            Assignment     nullStorageAssignment = null;

            var notFoundAssignmentException = new NotFoundAssignmentException(inputAssignmentId);

            var expectedAssignmentValidationException =
                new AssignmentValidationException(notFoundAssignmentException);

            this.storageBrokerMock.Setup(broker =>
                                         broker.SelectAssignmentByIdAsync(inputAssignmentId))
            .ReturnsAsync(nullStorageAssignment);

            // when
            ValueTask <Assignment> actualAssignmentTask =
                this.assignmentService.RemoveAssignmentByIdAsync(inputAssignmentId);

            // then
            await Assert.ThrowsAsync <AssignmentValidationException>(() => actualAssignmentTask.AsTask());

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

            this.storageBrokerMock.Verify(broker =>
                                          broker.SelectAssignmentByIdAsync(inputAssignmentId),
                                          Times.Once);

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

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
Esempio n. 14
0
        public async void ShouldThrowValidationExceptionOnRetrieveWhenStorageAssignmentIsNullAndLogItAsync()
        {
            //given
            Guid       randomAssignmentId       = Guid.NewGuid();
            Guid       inputAssignmentId        = randomAssignmentId;
            Assignment invalidStorageAssignment = null;

            var notFoundAssignmentException = new NotFoundAssignmentException(inputAssignmentId);

            var expectedAssignmentValidationException = new AssignmentValidationException(notFoundAssignmentException);

            this.storageBrokerMock.Setup(broker =>
                                         broker.SelectAssignmentByIdAsync(inputAssignmentId))
            .ReturnsAsync(invalidStorageAssignment);

            //when
            ValueTask <Assignment> retrieveAssignmentByIdTask =
                this.assignmentService.RetrieveAssignmentByIdAsync(inputAssignmentId);

            //then
            await Assert.ThrowsAsync <AssignmentValidationException>(() =>
                                                                     retrieveAssignmentByIdTask.AsTask());

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

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

            this.storageBrokerMock.Verify(broker =>
                                          broker.SelectAssignmentByIdAsync(It.IsAny <Guid>()),
                                          Times.Once);

            this.dateTimeBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
        public async Task ShouldThrowValidationExceptionOnModifyWhenAssignmentIsInvalidAndLogItAsync(
            string invalidText)
        {
            // given
            var invalidAssignment = new Assignment
            {
                Label   = invalidText,
                Content = invalidText
            };

            var invalidAssignmentException = new InvalidAssignmentException();

            invalidAssignmentException.AddData(
                key: nameof(Assignment.Id),
                values: "Id is required");

            invalidAssignmentException.AddData(
                key: nameof(Assignment.Label),
                values: "Text is required");

            invalidAssignmentException.AddData(
                key: nameof(Assignment.Content),
                values: "Text is required");

            invalidAssignmentException.AddData(
                key: nameof(Assignment.Deadline),
                values: "Date is required");

            invalidAssignmentException.AddData(
                key: nameof(Assignment.CreatedBy),
                values: "Id is required");

            invalidAssignmentException.AddData(
                key: nameof(Assignment.UpdatedBy),
                values: "Id is required");

            invalidAssignmentException.AddData(
                key: nameof(Assignment.CreatedDate),
                values: "Date is required");

            invalidAssignmentException.AddData(
                key: nameof(Assignment.UpdatedDate),
                values: "Date is required");

            var expectedAssignmentValidationException =
                new AssignmentValidationException(invalidAssignmentException);

            //when
            ValueTask <Assignment> modifyAssignmentTask =
                this.assignmentService.ModifyAssignmentAsync(invalidAssignment);

            //then
            await Assert.ThrowsAsync <AssignmentValidationException>(() =>
                                                                     modifyAssignmentTask.AsTask());

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

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

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