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 Task ShouldModifyStudentSemesterCourseAsync() { // given int randomNumber = GetRandomNumber(); int randomDays = randomNumber; DateTimeOffset randomDate = GetRandomDateTime(); DateTimeOffset randomInputDate = GetRandomDateTime(); StudentSemesterCourse randomStudentSemesterCourse = CreateRandomStudentSemesterCourse(randomInputDate); StudentSemesterCourse inputStudentSemesterCourse = randomStudentSemesterCourse; StudentSemesterCourse afterUpdateStorageStudentSemesterCourse = inputStudentSemesterCourse; StudentSemesterCourse expectedStudentSemesterCourse = afterUpdateStorageStudentSemesterCourse; StudentSemesterCourse beforeUpdateStorageStudentSemesterCourse = randomStudentSemesterCourse.DeepClone(); inputStudentSemesterCourse.UpdatedDate = randomDate; Guid studentId = inputStudentSemesterCourse.StudentId; Guid semesterCourseId = inputStudentSemesterCourse.SemesterCourseId; this.dateTimeBrokerMock.Setup(broker => broker.GetCurrentDateTime()) .Returns(randomDate); this.storageBrokerMock.Setup(broker => broker.SelectStudentSemesterCourseByIdAsync(studentId, semesterCourseId)) .ReturnsAsync(beforeUpdateStorageStudentSemesterCourse); this.storageBrokerMock.Setup(broker => broker.UpdateStudentSemesterCourseAsync(inputStudentSemesterCourse)) .ReturnsAsync(afterUpdateStorageStudentSemesterCourse); // when StudentSemesterCourse actualStudentSemesterCourse = await this.studentSemesterCourseService.ModifyStudentSemesterCourseAsync(inputStudentSemesterCourse); // then actualStudentSemesterCourse.Should().BeEquivalentTo(expectedStudentSemesterCourse); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.storageBrokerMock.Verify(broker => broker.SelectStudentSemesterCourseByIdAsync(studentId, semesterCourseId), Times.Once); this.storageBrokerMock.Verify(broker => broker.UpdateStudentSemesterCourseAsync(inputStudentSemesterCourse), Times.Once); this.storageBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.dateTimeBrokerMock.VerifyNoOtherCalls(); }