public async Task ShouldThorwValidationExceptionOnModifyIfTeacherDoesntExistAndLogItAsync() { // given int randomNegativeMinutes = GetNegativeRandomNumber(); DateTimeOffset dateTime = GetRandomDateTime(); Teacher randomTeacher = CreateRandomTeacher(dateTime); Teacher nonExistentTeacher = randomTeacher; nonExistentTeacher.CreatedDate = dateTime.AddMinutes(randomNegativeMinutes); Teacher noTeacher = null; var notFoundTeacherException = new NotFoundTeacherException(nonExistentTeacher.Id); var expectedTeacherValidationException = new TeacherValidationException(notFoundTeacherException); this.storageBrokerMock.Setup(broker => broker.SelectTeacherByIdAsync(nonExistentTeacher.Id)) .ReturnsAsync(noTeacher); this.dateTimeBrokerMock.Setup(broker => broker.GetCurrentDateTime()) .Returns(dateTime); // when ValueTask <Teacher> modifyTeacherTask = this.teacherService.ModifyTeacherAsync(nonExistentTeacher); // then await Assert.ThrowsAsync <TeacherValidationException>(() => modifyTeacherTask.AsTask()); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.storageBrokerMock.Verify(broker => broker.SelectTeacherByIdAsync(nonExistentTeacher.Id), Times.Once); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs( expectedTeacherValidationException))), Times.Once); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); this.dateTimeBrokerMock.VerifyNoOtherCalls(); }
public async Task ShouldThrowValidatonExceptionOnDeleteWhenStorageTeacherIsInvalidAndLogItAsync() { // given DateTimeOffset dateTime = GetRandomDateTime(); Teacher randomTeacher = CreateRandomTeacher(dateTime); Guid inputTeacherId = randomTeacher.Id; Teacher inputTeacher = randomTeacher; Teacher nullStorageTeacher = null; var notFoundTeacherException = new NotFoundTeacherException(inputTeacherId); var expectedTeacherValidationException = new TeacherValidationException(notFoundTeacherException); this.storageBrokerMock.Setup(broker => broker.SelectTeacherByIdAsync(inputTeacherId)) .ReturnsAsync(nullStorageTeacher); // when ValueTask <Teacher> removeTeacherTask = this.teacherService.RemoveTeacherByIdAsync(inputTeacherId); // then await Assert.ThrowsAsync <TeacherValidationException>(() => removeTeacherTask.AsTask()); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs( expectedTeacherValidationException))), Times.Once); this.storageBrokerMock.Verify(broker => broker.SelectTeacherByIdAsync(inputTeacherId), Times.Once); this.storageBrokerMock.Verify(broker => broker.DeleteTeacherAsync(It.IsAny <Teacher>()), Times.Never); this.storageBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.dateTimeBrokerMock.VerifyNoOtherCalls(); }