public async void ShouldThrowValidationExceptionOnCreateWhenUpdatedDateIsNotSameToCreatedDateAndLogItAsync() { // given DateTimeOffset dateTime = GetRandomDateTime(); Teacher randomTeacher = CreateRandomTeacher(dateTime); Teacher inputTeacher = randomTeacher; inputTeacher.UpdatedBy = randomTeacher.CreatedBy; inputTeacher.UpdatedDate = GetRandomDateTime(); var invalidTeacherException = new InvalidTeacherException(); invalidTeacherException.AddData( key: nameof(Teacher.UpdatedDate), values: $"Date is not the same as {nameof(Teacher.CreatedDate)}"); var expectedTeacherValidationException = new TeacherValidationException(invalidTeacherException); // when ValueTask <Teacher> createTeacherTask = this.teacherService.CreateTeacherAsync(inputTeacher); // then await Assert.ThrowsAsync <TeacherValidationException>(() => createTeacherTask.AsTask()); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs(expectedTeacherValidationException))), Times.Once); this.storageBrokerMock.Verify(broker => broker.SelectTeacherByIdAsync(It.IsAny <Guid>()), Times.Never); this.dateTimeBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.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> actualTeacherTask = this.teacherService.RemoveTeacherByIdAsync(inputTeacherId); // then await Assert.ThrowsAsync <TeacherValidationException>(() => actualTeacherTask.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(); }
public async void ShouldThrowValidationExceptionOnModifyWhenUpdatedDateIsInvalidAndLogItAsync() { // given DateTimeOffset dateTime = GetRandomDateTime(); Teacher randomTeacher = CreateRandomTeacher(dateTime); Teacher inputTeacher = randomTeacher; inputTeacher.UpdatedDate = default; var invalidTeacherInputException = new InvalidTeacherInputException( parameterName: nameof(Teacher.UpdatedDate), parameterValue: inputTeacher.UpdatedDate); var expectedTeacherValidationException = new TeacherValidationException(invalidTeacherInputException); // when ValueTask <Teacher> modifyTeacherTask = this.teacherService.ModifyTeacherAsync(inputTeacher); // then await Assert.ThrowsAsync <TeacherValidationException>(() => modifyTeacherTask.AsTask()); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs(expectedTeacherValidationException))), Times.Once); this.storageBrokerMock.Verify(broker => broker.SelectTeacherByIdAsync(It.IsAny <Guid>()), Times.Never); this.dateTimeBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); }
public async Task ShouldThrowValidatonExceptionOnDeleteIfIdIsInvalidAndLogItAsync() { // given Guid invalidTeacherId = Guid.Empty; var invalidTeacherException = new InvalidTeacherException(); invalidTeacherException.AddData( key: nameof(Teacher.Id), values: "Id is required"); var expectedTeacherValidationException = new TeacherValidationException(invalidTeacherException); // when ValueTask <Teacher> removeTeacherTask = this.teacherService.RemoveTeacherByIdAsync(invalidTeacherId); // 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(It.IsAny <Guid>()), Times.Never); this.storageBrokerMock.Verify(broker => broker.DeleteTeacherAsync(It.IsAny <Teacher>()), Times.Never); this.storageBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.dateTimeBrokerMock.VerifyNoOtherCalls(); }
public async void ShouldThrowValidationExceptionOnModifyIfTeacherIsInvalidAndLogItAsync( string invalidText) { // given var invalidTeacher = new Teacher { UserId = invalidText, EmployeeNumber = invalidText, FirstName = invalidText, MiddleName = invalidText, LastName = invalidText }; var invalidTeacherException = new InvalidTeacherException(); invalidTeacherException.AddData( key: nameof(Teacher.Id), values: "Id is required"); invalidTeacherException.AddData( key: nameof(Teacher.UserId), values: "Text is required"); invalidTeacherException.AddData( key: nameof(Teacher.EmployeeNumber), values: "Text is required"); invalidTeacherException.AddData( key: nameof(Teacher.FirstName), values: "Text is required"); invalidTeacherException.AddData( key: nameof(Teacher.MiddleName), values: "Text is required"); invalidTeacherException.AddData( key: nameof(Teacher.LastName), values: "Text is required"); invalidTeacherException.AddData( key: nameof(Teacher.CreatedDate), values: "Date is required"); invalidTeacherException.AddData( key: nameof(Teacher.UpdatedDate), "Date is required", $"Date is the same as {nameof(Teacher.CreatedDate)}"); invalidTeacherException.AddData( key: nameof(Teacher.CreatedBy), values: "Id is required"); invalidTeacherException.AddData( key: nameof(Teacher.UpdatedBy), values: "Id is required"); var expectedTeacherValidationException = new TeacherValidationException(invalidTeacherException); // when ValueTask <Teacher> createTeacherTask = this.teacherService.ModifyTeacherAsync(invalidTeacher); // then await Assert.ThrowsAsync <TeacherValidationException>(() => createTeacherTask.AsTask()); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs( expectedTeacherValidationException))), Times.Once); this.storageBrokerMock.Verify(broker => broker.InsertTeacherAsync(It.IsAny <Teacher>()), Times.Never); this.dateTimeBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); }