public async Task ShouldThrowValidationExceptionOnCreateWhenAssignmentLabelIsInvalidAndLogItAsync( string invalidAssignmentLabel) { // given Assignment randomAssignment = CreateRandomAssignment(); Assignment invalidAssignment = randomAssignment; invalidAssignment.Label = invalidAssignmentLabel; var invalidAssignmentException = new InvalidAssignmentException( parameterName: nameof(Assignment.Label), parameterValue: invalidAssignment.Label); var expectedAssignmentValidationException = new AssignmentValidationException(invalidAssignmentException); // when ValueTask <Assignment> createAssignmentTask = this.assignmentService.CreateAssignmentAsync(invalidAssignment); // then await Assert.ThrowsAsync <AssignmentValidationException>(() => createAssignmentTask.AsTask()); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs(expectedAssignmentValidationException))), Times.Once); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); this.dateTimeBrokerMock.VerifyNoOtherCalls(); }
public async Task ShouldThrowValidationExceptionOnModifyWhenAssignmentIdIsInvalidAndLogItAsync() { //given Guid invalidAssignmentId = Guid.Empty; DateTimeOffset dateTime = GetRandomDateTime(); Assignment randomAssignment = CreateRandomAssignment(dateTime); Assignment invalidAssignment = randomAssignment; invalidAssignment.Id = invalidAssignmentId; var invalidAssignmentException = new InvalidAssignmentException( parameterName: nameof(Assignment.Id), parameterValue: invalidAssignment.Id); var expectedAssignmentValidationException = new AssignmentValidationException(invalidAssignmentException); //when ValueTask <Assignment> modifyAssignmentTask = this.assignmentService.ModifyAssignmentAsync(invalidAssignment); //then await Assert.ThrowsAsync <AssignmentValidationException>(() => modifyAssignmentTask.AsTask()); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs(expectedAssignmentValidationException))), Times.Once); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); this.dateTimeBrokerMock.VerifyNoOtherCalls(); }
public async void ShouldThrowValidationExceptionOnModifyWhenUpdatedDateIsSameAsCreatedDateAndLogItAsync() { // given DateTimeOffset dateTime = GetRandomDateTime(); Assignment randomAssignment = CreateRandomAssignment(dateTime); Assignment inputAssignment = randomAssignment; var invalidAssignmentInputException = new InvalidAssignmentException( parameterName: nameof(Assignment.UpdatedDate), parameterValue: inputAssignment.UpdatedDate); var expectedAssignmentValidationException = new AssignmentValidationException(invalidAssignmentInputException); // when ValueTask <Assignment> modifyAssignmentTask = this.assignmentService.ModifyAssignmentAsync(inputAssignment); // then await Assert.ThrowsAsync <AssignmentValidationException>(() => modifyAssignmentTask.AsTask()); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs(expectedAssignmentValidationException))), Times.Once); this.storageBrokerMock.Verify(broker => broker.SelectAssignmentByIdAsync(It.IsAny <Guid>()), Times.Never); this.dateTimeBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); }
public async void ShouldThrowValidationExceptionOnRetrieveWhenIdIsInvalidAndLogItAsync() { //given Guid randomAssignmentId = default; Guid inputAssignmentId = randomAssignmentId; var invalidAssignmentInputException = new InvalidAssignmentException( parameterName: nameof(Assignment.Id), parameterValue: inputAssignmentId); var expectedAssignmentValidationException = new AssignmentValidationException(invalidAssignmentInputException); //when ValueTask <Assignment> retrieveAssignmentByIdTask = this.assignmentService.RetrieveAssignmentById(inputAssignmentId); //then await Assert.ThrowsAsync <AssignmentValidationException>(() => retrieveAssignmentByIdTask.AsTask()); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs(expectedAssignmentValidationException))), Times.Once ); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Never); this.storageBrokerMock.Verify(broker => broker.SelectAssignmentByIdAsync(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(); Assignment randomAssignment = CreateRandomAssignment(randomDate); Assignment invalidAssignment = randomAssignment; invalidAssignment.CreatedDate = randomDate.AddMinutes(randomNegativeMinutes); Assignment storageAssignment = randomAssignment.DeepClone(); Guid assignmentId = invalidAssignment.Id; invalidAssignment.CreatedBy = invalidCreatedBy; var invalidAssignmentInputException = new InvalidAssignmentException( parameterName: nameof(Assignment.CreatedBy), parameterValue: invalidAssignment.CreatedBy); var expectedAssignmentValidationException = new AssignmentValidationException(invalidAssignmentInputException); this.storageBrokerMock.Setup(broker => broker.SelectAssignmentByIdAsync(assignmentId)) .ReturnsAsync(storageAssignment); this.dateTimeBrokerMock.Setup(broker => broker.GetCurrentDateTime()) .Returns(randomDate); // when ValueTask <Assignment> modifyAssignmentTask = this.assignmentService.ModifyAssignmentAsync(invalidAssignment); // then await Assert.ThrowsAsync <AssignmentValidationException>(() => modifyAssignmentTask.AsTask()); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.storageBrokerMock.Verify(broker => broker.SelectAssignmentByIdAsync(invalidAssignment.Id), Times.Once); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs(expectedAssignmentValidationException))), Times.Once); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); this.dateTimeBrokerMock.VerifyNoOtherCalls(); }
public async void ShouldThrowValidationExceptionOnCreateWhenCreatedDateIsNotRecentAndLogItAsync( int minutes) { // given DateTimeOffset randomDate = GetRandomDateTime(); Assignment randomAssignment = CreateRandomAssignment(randomDate); Assignment invalidAssignment = randomAssignment; invalidAssignment.CreatedDate = randomDate.AddMinutes(minutes); invalidAssignment.UpdatedDate = invalidAssignment.CreatedDate; var invalidAssignmentException = new InvalidAssignmentException(); invalidAssignmentException.AddData( key: nameof(Assignment.CreatedDate), values: $"Date is not recent"); var expectedAssignmentValidationException = new AssignmentValidationException(invalidAssignmentException); this.dateTimeBrokerMock.Setup(broker => broker.GetCurrentDateTime()) .Returns(randomDate); // when ValueTask <Assignment> createAssignmentTask = this.assignmentService.CreateAssignmentAsync(invalidAssignment); // then await Assert.ThrowsAsync <AssignmentValidationException>(() => createAssignmentTask.AsTask()); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameValidationExceptionAs( expectedAssignmentValidationException))), Times.Once); this.storageBrokerMock.Verify(broker => broker.InsertAssignmentAsync(It.IsAny <Assignment>()), Times.Never); this.dateTimeBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); }
public async void ShouldThrowValidationExceptionOnCreateWhenUpdatedByIsNotSameToCreatedByAndLogItAsync() { // given DateTimeOffset dateTime = GetRandomDateTime(); Assignment randomAssignment = CreateRandomAssignment(dateTime); Assignment invalidAssignment = randomAssignment; invalidAssignment.UpdatedBy = Guid.NewGuid(); var invalidAssignmentInputException = new InvalidAssignmentException(); invalidAssignmentInputException.AddData( key: nameof(Assignment.UpdatedBy), values: $"Id is not the same as {nameof(Assignment.CreatedBy)}"); var expectedAssignmentValidationException = new AssignmentValidationException(invalidAssignmentInputException); this.dateTimeBrokerMock.Setup(broker => broker.GetCurrentDateTime()) .Returns(dateTime); // when ValueTask <Assignment> createAssignmentTask = this.assignmentService.CreateAssignmentAsync(invalidAssignment); // then await Assert.ThrowsAsync <AssignmentValidationException>(() => createAssignmentTask.AsTask()); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameValidationExceptionAs( expectedAssignmentValidationException))), Times.Once); this.storageBrokerMock.Verify(broker => broker.InsertAssignmentAsync(It.IsAny <Assignment>()), Times.Never); this.dateTimeBrokerMock.VerifyNoOtherCalls(); this.loggingBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); }
public async Task ShouldThrowValidationExceptionOnModifyWhenAssignmentIsInvalidAndLogItAsync( string invalidText) { // given var invalidAssignment = new Assignment { Label = invalidText, Content = invalidText }; var invalidAssignmentException = new InvalidAssignmentException(); invalidAssignmentException.AddData( key: nameof(Assignment.Id), values: "Id is required"); invalidAssignmentException.AddData( key: nameof(Assignment.Label), values: "Text is required"); invalidAssignmentException.AddData( key: nameof(Assignment.Content), values: "Text is required"); invalidAssignmentException.AddData( key: nameof(Assignment.Deadline), values: "Date is required"); invalidAssignmentException.AddData( key: nameof(Assignment.CreatedBy), values: "Id is required"); invalidAssignmentException.AddData( key: nameof(Assignment.UpdatedBy), values: "Id is required"); invalidAssignmentException.AddData( key: nameof(Assignment.CreatedDate), values: "Date is required"); invalidAssignmentException.AddData( key: nameof(Assignment.UpdatedDate), values: "Date is required"); var expectedAssignmentValidationException = new AssignmentValidationException(invalidAssignmentException); //when ValueTask <Assignment> modifyAssignmentTask = this.assignmentService.ModifyAssignmentAsync(invalidAssignment); //then await Assert.ThrowsAsync <AssignmentValidationException>(() => modifyAssignmentTask.AsTask()); this.dateTimeBrokerMock.Verify(broker => broker.GetCurrentDateTime(), Times.Once); this.loggingBrokerMock.Verify(broker => broker.LogError(It.Is(SameExceptionAs(expectedAssignmentValidationException))), Times.Once); this.dateTimeBrokerMock.VerifyNoOtherCalls(); this.storageBrokerMock.VerifyNoOtherCalls(); this.dateTimeBrokerMock.VerifyNoOtherCalls(); }