public async Task ShouldThrowValidationExceptionOnModifyWhenCourseNameIsInvalidAndLogItAsync( string invalidCourseName) { // given Course randomCourse = CreateRandomCourse(DateTime.Now); Course invalidCourse = randomCourse; invalidCourse.Name = invalidCourseName; var invalidCourseException = new InvalidCourseInputException( parameterName: nameof(Course.Name), parameterValue: invalidCourse.Name); var expectedCourseValidationException = new CourseValidationException(invalidCourseException); // when ValueTask <Course> modifyCourseTask = this.courseService.ModifyCourseAsync(invalidCourse); // then await Assert.ThrowsAsync <CourseValidationException>(() => modifyCourseTask.AsTask()); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs(expectedCourseValidationException))), Times.Once); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); this.dateTimeBrokerMock.VerifyNoOtherCalls(); }
public async void ShouldThrowValidationExceptionOnModifyWhenUpdatedDateIsSameAsCreatedDateAndLogItAsync() { // given DateTimeOffset dateTime = GetRandomDateTime(); Course randomCourse = CreateRandomCourse(dateTime); Course inputCourse = randomCourse; var invalidCourseInputException = new InvalidCourseInputException( parameterName: nameof(Course.UpdatedDate), parameterValue: inputCourse.UpdatedDate); var expectedCourseValidationException = new CourseValidationException(invalidCourseInputException); // when ValueTask <Course> modifyCourseTask = this.courseService.ModifyCourseAsync(inputCourse); // then await Assert.ThrowsAsync <CourseValidationException>(() => modifyCourseTask.AsTask()); 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 Task ShouldThrowValidationExceptionOnModifyIfStorageCreatedByNotSameAsCreatedByAndLogItAsync() { // given int randomNegativeMinutes = GetNegativeRandomNumber(); Guid differentId = Guid.NewGuid(); Guid invalidCreatedBy = differentId; DateTimeOffset randomDate = GetRandomDateTime(); Course randomCourse = CreateRandomCourse(randomDate); Course invalidCourse = randomCourse; invalidCourse.CreatedDate = randomDate.AddMinutes(randomNegativeMinutes); Course storageCourse = randomCourse.DeepClone(); Guid courseId = invalidCourse.Id; invalidCourse.CreatedBy = invalidCreatedBy; var invalidCourseInputException = new InvalidCourseInputException( parameterName: nameof(Course.CreatedBy), parameterValue: invalidCourse.CreatedBy); var expectedCourseValidationException = new CourseValidationException(invalidCourseInputException); this.storageBrokerMock.Setup(broker => broker.SelectCourseByIdAsync(courseId)) .ReturnsAsync(storageCourse); this.dateTimeBrokerMock.Setup(broker => broker.GetCurrentDateTime()) .Returns(randomDate); // when ValueTask <Course> modifyCourseTask = this.courseService.ModifyCourseAsync(invalidCourse); // then await Assert.ThrowsAsync <CourseValidationException>(() => modifyCourseTask.AsTask()); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.storageBrokerMock.Verify(broker => broker.SelectCourseByIdAsync(invalidCourse.Id), Times.Once); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs(expectedCourseValidationException))), Times.Once); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); this.dateTimeBrokerMock.VerifyNoOtherCalls(); }
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 invalidCourseInputException = new InvalidCourseInputException( parameterName: nameof(Course.CreatedDate), parameterValue: inputCourse.CreatedDate); var expectedCourseValidationException = new CourseValidationException(invalidCourseInputException); 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 Task ShouldThrowValidatonExceptionOnDeleteWhenIdIsInvalidAndLogItAsync() { // given Guid randomCourseId = default; Guid inputCourseId = randomCourseId; var invalidCourseInputException = new InvalidCourseInputException( parameterName: nameof(Course.Id), parameterValue: inputCourseId); var expectedCourseValidationException = new CourseValidationException(invalidCourseInputException); // when ValueTask <Course> actualCourseTask = this.courseService.DeleteCourseAsync(inputCourseId); // then await Assert.ThrowsAsync <CourseValidationException>(() => actualCourseTask.AsTask()); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs(expectedCourseValidationException))), Times.Once); this.storageBrokerMock.Verify(broker => broker.SelectCourseByIdAsync(It.IsAny <Guid>()), Times.Never); this.storageBrokerMock.Verify(broker => broker.DeleteCourseAsync(It.IsAny <Course>()), Times.Never); this.storageBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.dateTimeBrokerMock.VerifyNoOtherCalls(); }