Example #1
0
        public async Task ShouldThrowValidationExceptionOnModifyWhenExamIdIsInvalidAndLogItAsync()
        {
            //given
            Guid           invalidExamId = Guid.Empty;
            DateTimeOffset dateTime      = GetRandomDateTime();
            Exam           randomExam    = CreateRandomExam(dateTime);
            Exam           invalidExam   = randomExam;

            invalidExam.Id = invalidExamId;

            var invalidExamException = new InvalidExamInputException(
                parameterName: nameof(Exam.Id),
                parameterValue: invalidExam.Id);

            var expectedExamValidationException =
                new ExamValidationException(invalidExamException);

            //when
            ValueTask <Exam> modifyExamTask =
                this.examService.ModifyExamAsync(invalidExam);

            //then
            await Assert.ThrowsAsync <ExamValidationException>(() =>
                                                               modifyExamTask.AsTask());

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

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
Example #2
0
        public async void ShouldThrowValidationExceptionOnModifyWhenUpdatedDateIsSameAsCreatedDateAndLogItAsync()
        {
            // given
            DateTimeOffset dateTime   = GetRandomDateTime();
            Exam           randomExam = CreateRandomExam(dateTime);
            Exam           inputExam  = randomExam;

            var invalidExamInputException = new InvalidExamInputException(
                parameterName: nameof(Exam.UpdatedDate),
                parameterValue: inputExam.UpdatedDate);

            var expectedExamValidationException =
                new ExamValidationException(invalidExamInputException);

            // when
            ValueTask <Exam> modifyExamTask =
                this.examService.ModifyExamAsync(inputExam);

            // then
            await Assert.ThrowsAsync <ExamValidationException>(() =>
                                                               modifyExamTask.AsTask());

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

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

            this.dateTimeBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
Example #3
0
        public async Task ShouldThrowValidationExceptionOnModifyIfStorageCreatedByNotSameAsCreatedByAndLogItAsync()
        {
            // given
            int            randomNegativeMinutes = GetNegativeRandomNumber();
            Guid           differentId           = Guid.NewGuid();
            Guid           invalidCreatedBy      = differentId;
            DateTimeOffset randomDate            = GetRandomDateTime();
            Exam           randomExam            = CreateRandomExam(randomDate);
            Exam           invalidExam           = randomExam;

            invalidExam.CreatedDate = randomDate.AddMinutes(randomNegativeMinutes);
            Exam storageExam = randomExam.DeepClone();
            Guid ExamId      = invalidExam.Id;

            invalidExam.CreatedBy = invalidCreatedBy;

            var invalidExamInputException = new InvalidExamInputException(
                parameterName: nameof(Exam.CreatedBy),
                parameterValue: invalidExam.CreatedBy);

            var expectedExamValidationException =
                new ExamValidationException(invalidExamInputException);

            this.storageBrokerMock.Setup(broker =>
                                         broker.SelectExamByIdAsync(ExamId))
            .ReturnsAsync(storageExam);

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

            // when
            ValueTask <Exam> modifyExamTask =
                this.examService.ModifyExamAsync(invalidExam);

            // then
            await Assert.ThrowsAsync <ExamValidationException>(() =>
                                                               modifyExamTask.AsTask());

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

            this.storageBrokerMock.Verify(broker =>
                                          broker.SelectExamByIdAsync(invalidExam.Id),
                                          Times.Once);

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

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
Example #4
0
        public async void ShouldThrowValidationExceptionOnAddWhenCreatedDateIsNotRecentAndLogItAsync(
            int minutes)
        {
            // given
            DateTimeOffset dateTime   = GetRandomDateTime();
            Exam           randomExam = CreateRandomExam(dateTime);
            Exam           inputExam  = randomExam;

            inputExam.UpdatedBy   = inputExam.CreatedBy;
            inputExam.CreatedDate = dateTime.AddMinutes(minutes);
            inputExam.UpdatedDate = inputExam.CreatedDate;

            var invalidExamInputException = new InvalidExamInputException(
                parameterName: nameof(Exam.CreatedDate),
                parameterValue: inputExam.CreatedDate);

            var expectedExamValidationException =
                new ExamValidationException(invalidExamInputException);

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

            // when
            ValueTask <Exam> createExamTask =
                this.examService.AddExamAsync(inputExam);

            // then
            await Assert.ThrowsAsync <ExamValidationException>(() =>
                                                               createExamTask.AsTask());

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

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

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

            this.dateTimeBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
Example #5
0
        public async void ShouldThrowValidationExceptionOnRetrieveByIdWhenIdIsInvalidAndLogItAsync()
        {
            // given
            Guid randomExamId = default;
            Guid inputExamId  = randomExamId;

            var invalidExamInputException = new InvalidExamInputException(
                parameterName: nameof(Exam.Id),
                parameterValue: inputExamId);

            var expectedExamValidationException =
                new ExamValidationException(invalidExamInputException);

            // when
            ValueTask <Exam> retrieveExamByIdTask =
                this.examService.RetrieveExamByIdAsync(inputExamId);

            // then
            await Assert.ThrowsAsync <ExamValidationException>(() =>
                                                               retrieveExamByIdTask.AsTask());

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

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

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

            this.dateTimeBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
Example #6
0
        public async void ShouldThrowValidationExceptionOnAddWhenIdIsInvalidAndLogItAsync()
        {
            // given
            DateTimeOffset dateTime   = GetRandomDateTime();
            Exam           randomExam = CreateRandomExam(dateTime);
            Exam           inputExam  = randomExam;

            inputExam.Id = default;

            var invalidExamInputException = new InvalidExamInputException(
                parameterName: nameof(Exam.Id),
                parameterValue: inputExam.Id);

            var expectedExamValidationException =
                new ExamValidationException(invalidExamInputException);

            // when
            ValueTask <Exam> createExamTask =
                this.examService.AddExamAsync(inputExam);

            // then
            await Assert.ThrowsAsync <ExamValidationException>(() =>
                                                               createExamTask.AsTask());

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

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

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