public async Task ShouldThrowValidationExceptionOnCreateWhenClassroomNameIsInvalidAndLogItAsync( string invalidClassroomName) { // given Classroom randomClassroom = CreateRandomClassroom(); Classroom invalidClassroom = randomClassroom; invalidClassroom.Name = invalidClassroomName; var invalidClassroomException = new InvalidClassroomException( parameterName: nameof(Classroom.Name), parameterValue: invalidClassroom.Name); var expectedClassroomValidationException = new ClassroomValidationException(invalidClassroomException); // when ValueTask <Classroom> createClassroomTask = this.classroomService.CreateClassroomAsync(invalidClassroom); // then await Assert.ThrowsAsync <ClassroomValidationException>(() => createClassroomTask.AsTask()); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs(expectedClassroomValidationException))), Times.Once); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); this.dateTimeBrokerMock.VerifyNoOtherCalls(); }
public async void ShouldThrowValidationExceptionOnRetrieveWhenIdIsInvalidAndLogItAsync() { //given Guid randomClassroomId = default; Guid inputClassroomId = randomClassroomId; var invalidClassroomInputException = new InvalidClassroomException( parameterName: nameof(Classroom.Id), parameterValue: inputClassroomId); var expectedClassroomValidationException = new ClassroomValidationException(invalidClassroomInputException); //when ValueTask <Classroom> retrieveClassroomByIdTask = this.classroomService.RetrieveClassroomById(inputClassroomId); //then await Assert.ThrowsAsync <ClassroomValidationException>(() => retrieveClassroomByIdTask.AsTask()); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs(expectedClassroomValidationException))), Times.Once); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Never); this.storageBrokerMock.Verify(broker => broker.SelectClassroomByIdAsync(It.IsAny <Guid>()), Times.Never); this.loggingBrokerMock.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(); Classroom randomClassroom = CreateRandomClassroom(randomDate); Classroom invalidClassroom = randomClassroom; invalidClassroom.CreatedDate = randomDate.AddMinutes(randomNegativeMinutes); Classroom storageClassroom = randomClassroom.DeepClone(); Guid classroomId = invalidClassroom.Id; invalidClassroom.CreatedBy = invalidCreatedBy; var invalidClassroomInputException = new InvalidClassroomException( parameterName: nameof(Classroom.CreatedBy), parameterValue: invalidClassroom.CreatedBy); var expectedClassroomValidationException = new ClassroomValidationException(invalidClassroomInputException); this.storageBrokerMock.Setup(broker => broker.SelectClassroomByIdAsync(classroomId)) .ReturnsAsync(storageClassroom); this.dateTimeBrokerMock.Setup(broker => broker.GetCurrentDateTime()) .Returns(randomDate); // when ValueTask <Classroom> modifyClassroomTask = this.classroomService.ModifyClassroomAsync(invalidClassroom); // then await Assert.ThrowsAsync <ClassroomValidationException>(() => modifyClassroomTask.AsTask()); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.storageBrokerMock.Verify(broker => broker.SelectClassroomByIdAsync(invalidClassroom.Id), Times.Once); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs( expectedClassroomValidationException))), Times.Once); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); this.dateTimeBrokerMock.VerifyNoOtherCalls(); }
public async void ShouldThrowValidationExceptionOnCreateWhenCreatedDateIsNotRecentAndLogItAsync( int minutes) { // given DateTimeOffset randomDate = GetRandomDateTime(); Classroom randomClassroom = CreateRandomClassroom(randomDate); Classroom invalidClassroom = randomClassroom; invalidClassroom.CreatedDate = randomDate.AddMinutes(minutes); invalidClassroom.UpdatedDate = invalidClassroom.CreatedDate; var invalidClassroomException = new InvalidClassroomException(); invalidClassroomException.AddData( key: nameof(Classroom.CreatedDate), values: $"Date is not recent"); var expectedClassroomValidationException = new ClassroomValidationException(invalidClassroomException); this.dateTimeBrokerMock.Setup(broker => broker.GetCurrentDateTime()) .Returns(randomDate); // when ValueTask <Classroom> createClassroomTask = this.classroomService.CreateClassroomAsync(invalidClassroom); // then await Assert.ThrowsAsync <ClassroomValidationException>(() => createClassroomTask.AsTask()); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameValidationExceptionAs( expectedClassroomValidationException))), Times.Once); this.storageBrokerMock.Verify(broker => broker.InsertClassroomAsync(It.IsAny <Classroom>()), Times.Never); this.dateTimeBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); }
public async void ShouldThrowValidationExceptionOnCreateWhenCreatedDateIsNotRecentAndLogItAsync( int minutes) { // given DateTimeOffset dateTime = GetRandomDateTime(); Classroom randomClassroom = CreateRandomClassroom(dateTime); Classroom inputClassroom = randomClassroom; inputClassroom.UpdatedBy = inputClassroom.CreatedBy; inputClassroom.CreatedDate = dateTime.AddMinutes(minutes); inputClassroom.UpdatedDate = inputClassroom.CreatedDate; var invalidClassroomInputException = new InvalidClassroomException( parameterName: nameof(Classroom.CreatedDate), parameterValue: inputClassroom.CreatedDate); var expectedClassroomValidationException = new ClassroomValidationException(invalidClassroomInputException); this.dateTimeBrokerMock.Setup(broker => broker.GetCurrentDateTime()) .Returns(dateTime); // when ValueTask <Classroom> createClassroomTask = this.classroomService.CreateClassroomAsync(inputClassroom); // then await Assert.ThrowsAsync <ClassroomValidationException>(() => createClassroomTask.AsTask()); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs(expectedClassroomValidationException))), Times.Once); this.storageBrokerMock.Verify(broker => broker.SelectClassroomByIdAsync(It.IsAny <Guid>()), Times.Never); this.dateTimeBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); }
public async void ShouldThrowValidationExceptionOnCreateIfClassroomStatusIsInvalidAndLogItAsync() { // given DateTimeOffset randomDateTime = GetRandomDateTime(); Classroom randomClassroom = CreateRandomClassroom(randomDateTime); Classroom invalidClassroom = randomClassroom; invalidClassroom.Status = GetInvalidEnum <ClassroomStatus>(); var invalidClassroomException = new InvalidClassroomException(); invalidClassroomException.AddData( key: nameof(Classroom.Status), values: "Value is not recognized"); var exceptedClassroomValidationException = new ClassroomValidationException(invalidClassroomException); this.dateTimeBrokerMock.Setup(broker => broker.GetCurrentDateTime()). Returns(randomDateTime); //when ValueTask <Classroom> createClassroomTask = this.classroomService.CreateClassroomAsync(invalidClassroom); //then await Assert.ThrowsAsync <ClassroomValidationException>(() => createClassroomTask.AsTask()); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameValidationExceptionAs( exceptedClassroomValidationException))), Times.Once); this.storageBrokerMock.Verify(broker => broker.InsertClassroomAsync(It.IsAny <Classroom>()), Times.Never); this.dateTimeBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); }
public async void ShouldThrowValidationExceptionOnCreateWhenIdIsInvalidAndLogItAsync() { // given DateTimeOffset dateTime = GetRandomDateTime(); Classroom randomClassroom = CreateRandomClassroom(dateTime); Classroom inputClassroom = randomClassroom; inputClassroom.Id = default; var invalidClassroomInputException = new InvalidClassroomException( parameterName: nameof(Classroom.Id), parameterValue: inputClassroom.Id); var expectedClassroomValidationException = new ClassroomValidationException(invalidClassroomInputException); // when ValueTask <Classroom> registerClassroomTask = this.classroomService.CreateClassroomAsync(inputClassroom); // then await Assert.ThrowsAsync <ClassroomValidationException>(() => registerClassroomTask.AsTask()); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs(expectedClassroomValidationException))), Times.Once); this.storageBrokerMock.Verify(broker => broker.SelectClassroomByIdAsync(It.IsAny <Guid>()), Times.Never); this.dateTimeBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); }
public async void ShouldThrowValidationExceptionOnModifyIfClassroomIsInvalidAndLogItAsync( string invalidText) { // given var invalidClassroom = new Classroom { Name = invalidText, Location = invalidText }; var invalidClassroomException = new InvalidClassroomException(); invalidClassroomException.AddData( key: nameof(Classroom.Id), values: "Id is required"); invalidClassroomException.AddData( key: nameof(Classroom.Name), values: "Text is required"); invalidClassroomException.AddData( key: nameof(Classroom.Location), values: "Text is required"); invalidClassroomException.AddData( key: nameof(Classroom.CreatedDate), values: "Date is required"); invalidClassroomException.AddData( key: nameof(Classroom.UpdatedDate), values: new string[] { "Date is required", $"Date is the same as {nameof(Classroom.CreatedDate)}" }); invalidClassroomException.AddData( key: nameof(Classroom.CreatedBy), values: "Id is required"); invalidClassroomException.AddData( key: nameof(Classroom.UpdatedBy), values: "Id is required"); var expectedClassroomValidationException = new ClassroomValidationException(invalidClassroomException); // when ValueTask <Classroom> createClassroomTask = this.classroomService.ModifyClassroomAsync(invalidClassroom); // then await Assert.ThrowsAsync <ClassroomValidationException>(() => createClassroomTask.AsTask()); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameValidationExceptionAs( expectedClassroomValidationException))), Times.Once); this.dateTimeBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); }