示例#1
0
        public async void ShouldThrowValidationExceptionOnCreateWhenCreatedDateIsNotRecentAndLogItAsync(
            int minutes)
        {
            // given
            DateTimeOffset dateTime     = GetRandomDateTime();
            Course         randomCourse = CreateRandomCourse(dateTime);
            Course         inputCourse  = randomCourse;

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

            var invalidCourseException = new InvalidCourseException();

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

            var expectedCourseValidationException =
                new CourseValidationException(invalidCourseException);

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

            // when
            ValueTask <Course> createCourseTask =
                this.courseService.CreateCourseAsync(inputCourse);

            // then
            await Assert.ThrowsAsync <CourseValidationException>(() =>
                                                                 createCourseTask.AsTask());

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

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

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

            this.dateTimeBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
示例#2
0
        public async void ShouldThrowValidationExceptionOnCreateIfCourseStatusIsInvalidAndLogItAsync()
        {
            // given
            DateTimeOffset randomDateTime = GetRandomDateTime();
            Course         randomCourse   = CreateRandomCourse(randomDateTime);
            Course         invalidCourse  = randomCourse;

            invalidCourse.Status = GetInvalidEnum <CourseStatus>();
            var invalidCourseException = new InvalidCourseException();

            invalidCourseException.AddData(
                key: nameof(Course.Status),
                values: "Value is not recognized");

            var expectedCourseValidationException = new CourseValidationException(invalidCourseException);

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

            // when
            ValueTask <Course> createCourseTask =
                this.courseService.CreateCourseAsync(invalidCourse);

            // then
            await Assert.ThrowsAsync <CourseValidationException>(() =>
                                                                 createCourseTask.AsTask());

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

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

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

            this.dateTimeBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
示例#3
0
        public async void ShouldThrowValidationExceptionOnCreateWhenCourseIsInvalidAndLogItAsync(
            string invalidText)
        {
            // given
            var invalidCourse = new Course
            {
                Name = invalidText
            };

            var invalidCourseException = new InvalidCourseException();

            invalidCourseException.AddData(
                key: nameof(Course.Id),
                values: "Id is required");

            invalidCourseException.AddData(
                key: nameof(Course.Name),
                values: "Text is required");

            invalidCourseException.AddData(
                key: nameof(Course.Description),
                values: "Text is required");

            invalidCourseException.AddData(
                key: nameof(Course.CreatedBy),
                values: "Id is required");

            invalidCourseException.AddData(
                key: nameof(Course.UpdatedBy),
                values: "Id is required");

            invalidCourseException.AddData(
                key: nameof(Course.CreatedDate),
                values: "Date is required");

            invalidCourseException.AddData(
                key: nameof(Course.UpdatedDate),
                values: "Date is required");

            var expectedCourseValidationException =
                new CourseValidationException(invalidCourseException);

            // when
            ValueTask <Course> createCourseTask =
                this.courseService.CreateCourseAsync(invalidCourse);

            // then
            await Assert.ThrowsAsync <CourseValidationException>(() =>
                                                                 createCourseTask.AsTask());

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

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

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

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