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(); }
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(); }
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(); }