public async Task ShouldThrowValidatonExceptionOnRetrieveWhenSemesterCourseIdIsInvalidAndLogItAsync()
        {
            // given
            Guid randomSemesterCourseId = default;
            Guid randomStudentId        = Guid.NewGuid();
            Guid inputSemesterCourseId  = randomSemesterCourseId;
            Guid inputStudentId         = randomStudentId;

            var invalidStudentSemesterCourseInputException = new InvalidStudentSemesterCourseInputException(
                parameterName: nameof(StudentSemesterCourse.SemesterCourseId),
                parameterValue: inputSemesterCourseId);

            var expectedStudentSemesterCourseValidationException =
                new StudentSemesterCourseValidationException(invalidStudentSemesterCourseInputException);

            // when
            ValueTask <StudentSemesterCourse> actualStudentSemesterCourseTask =
                this.studentSemesterCourseService.RetrieveStudentSemesterCourseByIdAsync(inputStudentId, inputSemesterCourseId);

            // then
            await Assert.ThrowsAsync <StudentSemesterCourseValidationException>(() => actualStudentSemesterCourseTask.AsTask());

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

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

            this.storageBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
        public async void ShouldThrowValidationExceptionOnModifyWhenUpdatedDateIsSameAsCreatedDateAndLogItAsync()
        {
            // given
            DateTimeOffset        dateTime = GetRandomDateTime();
            StudentSemesterCourse randomStudentSemesterCourse = CreateRandomStudentSemesterCourse(dateTime);
            StudentSemesterCourse inputStudentSemesterCourse  = randomStudentSemesterCourse;

            var invalidStudentSemesterCourseInputException = new InvalidStudentSemesterCourseInputException(
                parameterName: nameof(StudentSemesterCourse.UpdatedDate),
                parameterValue: inputStudentSemesterCourse.UpdatedDate);

            var expectedStudentSemesterCourseValidationException =
                new StudentSemesterCourseValidationException(invalidStudentSemesterCourseInputException);

            // when
            ValueTask <StudentSemesterCourse> modifyStudentSemesterCourseTask =
                this.studentSemesterCourseService.ModifyStudentSemesterCourseAsync(inputStudentSemesterCourse);

            // then
            await Assert.ThrowsAsync <StudentSemesterCourseValidationException>(() =>
                                                                                modifyStudentSemesterCourseTask.AsTask());

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

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

            this.dateTimeBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
        public async Task ShouldThrowValidationExceptionOnModifyWhenSemesterCourseIdIsInvalidAndLogItAsync()
        {
            //given
            Guid                  invalidSemesterCourseId = Guid.Empty;
            DateTimeOffset        dateTime = GetRandomDateTime();
            StudentSemesterCourse randomStudentSemesterCourse  = CreateRandomStudentSemesterCourse(dateTime);
            StudentSemesterCourse invalidStudentSemesterCourse = randomStudentSemesterCourse;

            invalidStudentSemesterCourse.SemesterCourseId = invalidSemesterCourseId;

            var invalidStudentSemesterCourseInputException = new InvalidStudentSemesterCourseInputException(
                parameterName: nameof(StudentSemesterCourse.SemesterCourseId),
                parameterValue: invalidStudentSemesterCourse.SemesterCourseId);

            var expectedStudentSemesterCourseValidationException =
                new StudentSemesterCourseValidationException(invalidStudentSemesterCourseInputException);

            //when
            ValueTask <StudentSemesterCourse> modifyStudentSemesterCourseTask =
                this.studentSemesterCourseService.ModifyStudentSemesterCourseAsync(invalidStudentSemesterCourse);

            //then
            await Assert.ThrowsAsync <StudentSemesterCourseValidationException>(() =>
                                                                                modifyStudentSemesterCourseTask.AsTask());

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

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
        public async void ShouldThrowValidationExceptionOnCreateWhenStudentSemesterCourseIsNullAndLogItAsync()
        {
            // given
            StudentSemesterCourse randomStudentSemesterCourse = null;
            StudentSemesterCourse nullStudentSemesterCourse   = randomStudentSemesterCourse;
            var nullStudentSemesterCourseException            = new NullStudentSemesterCourseException();

            var expectedStudentSemesterCourseValidationException =
                new StudentSemesterCourseValidationException(nullStudentSemesterCourseException);

            // when
            ValueTask <StudentSemesterCourse> createStudentSemesterCourseTask =
                this.studentSemesterCourseService.CreateStudentSemesterCourseAsync(nullStudentSemesterCourse);

            // then
            await Assert.ThrowsAsync <StudentSemesterCourseValidationException>(() =>
                                                                                createStudentSemesterCourseTask.AsTask());

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

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

            this.dateTimeBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
示例#5
0
        private StudentSemesterCourseValidationException CreateAndLogValidationException(Exception exception)
        {
            var studentSemesterCourseValidationException = new StudentSemesterCourseValidationException(exception);

            this.loggingBroker.LogError(studentSemesterCourseValidationException);

            return(studentSemesterCourseValidationException);
        }
示例#6
0
        public async Task ShouldThrowValidationExceptionOnModifyIfStorageCreatedDateNotSameAsCreateDateAndLogItAsync()
        {
            // given
            int                   randomNumber  = GetRandomNumber();
            int                   randomMinutes = randomNumber;
            DateTimeOffset        randomDate    = GetRandomDateTime();
            StudentSemesterCourse randomStudentSemesterCourse  = CreateRandomStudentSemesterCourse(randomDate);
            StudentSemesterCourse invalidStudentSemesterCourse = randomStudentSemesterCourse;

            invalidStudentSemesterCourse.UpdatedDate = randomDate;
            StudentSemesterCourse storageStudentSemesterCourse = randomStudentSemesterCourse.DeepClone();
            Guid studentId        = invalidStudentSemesterCourse.StudentId;
            Guid semesterCourseId = invalidStudentSemesterCourse.SemesterCourseId;

            invalidStudentSemesterCourse.CreatedDate = storageStudentSemesterCourse.CreatedDate.AddMinutes(randomNumber);

            var invalidStudentSemesterCourseInputException = new InvalidStudentSemesterCourseInputException(
                parameterName: nameof(StudentSemesterCourse.CreatedDate),
                parameterValue: invalidStudentSemesterCourse.CreatedDate);

            var expectedStudentSemesterCourseValidationException =
                new StudentSemesterCourseValidationException(invalidStudentSemesterCourseInputException);

            this.storageBrokerMock.Setup(broker =>
                                         broker.SelectStudentSemesterCourseByIdAsync(studentId, semesterCourseId))
            .ReturnsAsync(storageStudentSemesterCourse);

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

            // when
            ValueTask <StudentSemesterCourse> modifyStudentSemesterCourseTask =
                this.studentSemesterCourseService.ModifyStudentSemesterCourseAsync(invalidStudentSemesterCourse);

            // then
            await Assert.ThrowsAsync <StudentSemesterCourseValidationException>(() =>
                                                                                modifyStudentSemesterCourseTask.AsTask());

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

            this.storageBrokerMock.Verify(broker =>
                                          broker.SelectStudentSemesterCourseByIdAsync(
                                              invalidStudentSemesterCourse.StudentId,
                                              invalidStudentSemesterCourse.SemesterCourseId),
                                          Times.Once);

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

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
        public async void ShouldThrowValidationExceptionOnCreateWhenStudentSemesterCourseAlreadyExistsAndLogItAsync()
        {
            // given
            DateTimeOffset        dateTime = GetRandomDateTime();
            StudentSemesterCourse randomStudentSemesterCourse        = CreateRandomStudentSemesterCourse(dateTime);
            StudentSemesterCourse alreadyExistsStudentSemesterCourse = randomStudentSemesterCourse;

            alreadyExistsStudentSemesterCourse.UpdatedBy = alreadyExistsStudentSemesterCourse.CreatedBy;
            string randomMessage         = GetRandomMessage();
            string exceptionMessage      = randomMessage;
            var    duplicateKeyException = new DuplicateKeyException(exceptionMessage);

            var alreadyExistsStudentSemesterCourseException =
                new AlreadyExistsStudentSemesterCourseException(duplicateKeyException);

            var expectedStudentSemesterCourseValidationException =
                new StudentSemesterCourseValidationException(alreadyExistsStudentSemesterCourseException);

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

            this.storageBrokerMock.Setup(broker =>
                                         broker.InsertStudentSemesterCourseAsync(alreadyExistsStudentSemesterCourse))
            .ThrowsAsync(duplicateKeyException);

            // when
            ValueTask <StudentSemesterCourse> createStudentSemesterCourseTask =
                this.studentSemesterCourseService.CreateStudentSemesterCourseAsync(alreadyExistsStudentSemesterCourse);

            // then
            await Assert.ThrowsAsync <StudentSemesterCourseValidationException>(() =>
                                                                                createStudentSemesterCourseTask.AsTask());

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

            this.storageBrokerMock.Verify(broker =>
                                          broker.InsertStudentSemesterCourseAsync(alreadyExistsStudentSemesterCourse),
                                          Times.Once);

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

            this.dateTimeBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
        }
示例#8
0
        public async Task ShouldThrowValidationExceptionOnModifyIfStudentSemesterCourseDoesntExistAndLogItAsync()
        {
            // given
            int                   randomNegativeMinutes = GetNegativeRandomNumber();
            DateTimeOffset        dateTime = GetRandomDateTime();
            StudentSemesterCourse randomStudentSemesterCourse      = CreateRandomStudentSemesterCourse(dateTime);
            StudentSemesterCourse nonExistentStudentSemesterCourse = randomStudentSemesterCourse;

            nonExistentStudentSemesterCourse.CreatedDate = dateTime.AddMinutes(randomNegativeMinutes);
            StudentSemesterCourse noStudentSemesterCourse = null;
            var notFoundStudentSemesterCourseException    = new NotFoundStudentSemesterCourseException
                                                                (nonExistentStudentSemesterCourse.StudentId, nonExistentStudentSemesterCourse.SemesterCourseId);

            var expectedStudentSemesterCourseValidationException =
                new StudentSemesterCourseValidationException(notFoundStudentSemesterCourseException);

            this.storageBrokerMock.Setup(broker =>
                                         broker.SelectStudentSemesterCourseByIdAsync(
                                             nonExistentStudentSemesterCourse.StudentId, nonExistentStudentSemesterCourse.SemesterCourseId))
            .ReturnsAsync(noStudentSemesterCourse);

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

            // when
            ValueTask <StudentSemesterCourse> modifyStudentSemesterCourseTask =
                this.studentSemesterCourseService.ModifyStudentSemesterCourseAsync(nonExistentStudentSemesterCourse);

            // then
            await Assert.ThrowsAsync <StudentSemesterCourseValidationException>(() =>
                                                                                modifyStudentSemesterCourseTask.AsTask());

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

            this.storageBrokerMock.Verify(broker =>
                                          broker.SelectStudentSemesterCourseByIdAsync
                                              (nonExistentStudentSemesterCourse.StudentId, nonExistentStudentSemesterCourse.SemesterCourseId),
                                          Times.Once);

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

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
        public async void ShouldThrowValidationExceptionOnCreateWhenCreatedDateIsNotRecentAndLogItAsync(
            int minutes)
        {
            // given
            DateTimeOffset        dateTime = GetRandomDateTime();
            StudentSemesterCourse randomStudentSemesterCourse = CreateRandomStudentSemesterCourse(dateTime);
            StudentSemesterCourse inputStudentSemesterCourse  = randomStudentSemesterCourse;

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

            var invalidStudentSemesterCourseInputException = new InvalidStudentSemesterCourseInputException(
                parameterName: nameof(StudentSemesterCourse.CreatedDate),
                parameterValue: inputStudentSemesterCourse.CreatedDate);

            var expectedStudentSemesterCourseValidationException =
                new StudentSemesterCourseValidationException(invalidStudentSemesterCourseInputException);

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

            // when
            ValueTask <StudentSemesterCourse> createStudentSemesterCourseTask =
                this.studentSemesterCourseService.CreateStudentSemesterCourseAsync(inputStudentSemesterCourse);

            // then
            await Assert.ThrowsAsync <StudentSemesterCourseValidationException>(() =>
                                                                                createStudentSemesterCourseTask.AsTask());

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

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

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

            this.dateTimeBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
        public async Task ShouldThrowValidationExceptionOnDeleteWhenStorageStudentSemesterCourseIsInvalidAndLogItAsync()
        {
            // given
            DateTimeOffset        randomDateTime = GetRandomDateTime();
            StudentSemesterCourse randomStudentSemesterCourse = CreateRandomStudentSemesterCourse(randomDateTime);
            Guid inputSemasterCourseId = randomStudentSemesterCourse.SemesterCourseId;
            Guid inputStudentId        = randomStudentSemesterCourse.StudentId;
            StudentSemesterCourse nullStorageStudentSemesterCourse = null;

            var notFoundStudentSemesterCourseException =
                new NotFoundStudentSemesterCourseException(inputSemasterCourseId, inputStudentId);

            var expectedSemesterCourseValidationException =
                new StudentSemesterCourseValidationException(notFoundStudentSemesterCourseException);

            this.storageBrokerMock.Setup(broker =>
                                         broker.SelectStudentSemesterCourseByIdAsync(inputSemasterCourseId, inputStudentId))
            .ReturnsAsync(nullStorageStudentSemesterCourse);

            // when
            ValueTask <StudentSemesterCourse> actualStudentSemesterCourseDeleteTask =
                this.studentSemesterCourseService.RemoveStudentSemesterCourseByIdsAsync(inputSemasterCourseId, inputStudentId);

            // then
            await Assert.ThrowsAsync <StudentSemesterCourseValidationException>(() =>
                                                                                actualStudentSemesterCourseDeleteTask.AsTask());

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

            this.storageBrokerMock.Verify(broker =>
                                          broker.SelectStudentSemesterCourseByIdAsync(inputSemasterCourseId, inputStudentId),
                                          Times.Once);

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

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