public async Task UpdateFundingStructureLastModifiedGuardsAgainstInValidRequests() { UpdateFundingStructureLastModifiedRequest request = NewUpdateFundingStructureLastModifiedRequest(); ValidationFailure failureOne = NewValidationFailure(); ValidationFailure failureTwo = NewValidationFailure(); ValidationResult validationResult = NewValidationResult(_ => _.WithValidationFailures(failureOne, failureTwo)); GivenTheValidationResult(request, validationResult); BadRequestObjectResult actionResult = await WhenTheFundingStructureLastModifiedIsUpdated(request) as BadRequestObjectResult; SerializableError serializableError = actionResult?.Value as SerializableError; serializableError .Should() .NotBeNull(); serializableError[failureOne.PropertyName] .Should() .BeEquivalentTo(new[] { failureOne.ErrorMessage }); serializableError[failureTwo.PropertyName] .Should() .BeEquivalentTo(new[] { failureTwo.ErrorMessage }); await AndTheCacheWasNotUpdated(); }
public async Task SaveDefinitionExitsEarlyIfValidationFails() { JobDefinition jobDefinition = NewJobDefinition(); string invalidProperty = NewRandomString(); string validationFailureMessage = NewRandomString(); GivenTheJobsRepositoryReturnsTheStatusCode(jobDefinition, HttpStatusCode.OK); GivenTheJobDefinitionValidationResult(jobDefinition, NewValidationResult(_ => _.WithValidationFailures(NewValidationFailure(vf => vf.WithPropertyName(invalidProperty) .WithErrorMessage(validationFailureMessage))))); BadRequestObjectResult actionResult = (await WhenTheJobDefinitionIsSaved(jobDefinition)) as BadRequestObjectResult; SerializableError serializableError = actionResult?.Value as SerializableError; serializableError .Should() .NotBeNull(); serializableError[invalidProperty] .Should() .BeEquivalentTo(new [] { validationFailureMessage }); ThenNoJobDefinitionsWereSaved(); AndTheCacheWasNotInvalidated(); }
public async Task Returns400IfPrereqChecksFailsForGetRefreshFundingJobPrereqErrors() { string errorMessage = "calc error"; ApiSpecificationSummary specificationSummary = NewApiSpecificationSummary(_ => _.WithId(SpecificationId)); GivenTheApiResponseDetailsForTheSuppliedId(specificationSummary); AndGetPreReqCheckerLocatorReturnsRefreshPreReqChecker(); AndPrereqChecksFails(specificationSummary, errors: new[] { errorMessage }); await WhenGetRefreshFundingJobPrereqErrors(); ThenTheResponseShouldBe <BadRequestObjectResult>(); BadRequestObjectResult objectResult = ActionResult as BadRequestObjectResult; objectResult.Should().NotBeNull(); objectResult.Value.Should().BeOfType <SerializableError>(); SerializableError errors = objectResult.Value as SerializableError; errors.Should().NotBeNull(); errors.Count.Should().Be(1); errors.FirstOrDefault().Value.Should().BeOfType <string[]>(); string[] errorArray = errors.FirstOrDefault().Value as string[]; errorArray.Should().NotBeNull(); errorArray.Length.Should().Be(1); errorArray.FirstOrDefault().Should().Be(errorMessage); }
public async Task SaveFundingTemplate_GivenTemplateButDidNotValidate_ReturnsBadRequest() { //Arrange const string template = "a template"; string fundingStreamId = NewRandomString(); string templateVersion = NewRandomString(); string fundingPeriodId = NewRandomString(); FundingTemplateValidationResult validationResult = new FundingTemplateValidationResult(); validationResult.Errors.Add(new ValidationFailure("prop1", "an error")); validationResult.Errors.Add(new ValidationFailure("prop2", "another error")); IFundingTemplateValidationService fundingTemplateValidationService = CreateFundingTemplateValidationService(); fundingTemplateValidationService .ValidateFundingTemplate(Arg.Is(template), Arg.Is(fundingStreamId), Arg.Is(fundingPeriodId), Arg.Is(templateVersion)) .Returns(validationResult); FundingTemplateService fundingTemplateService = CreateFundingTemplateService(fundingTemplateValidationService: fundingTemplateValidationService); //Act IActionResult result = await fundingTemplateService.SaveFundingTemplate(createdAtActionName, createdAtControllerName, template, fundingStreamId, fundingPeriodId, templateVersion); //Assert result .Should() .BeAssignableTo <BadRequestObjectResult>(); BadRequestObjectResult badRequestObjectResult = result as BadRequestObjectResult; badRequestObjectResult .Value .Should() .BeOfType <SerializableError>(); SerializableError modelState = badRequestObjectResult.Value as SerializableError; modelState .Should() .NotBeNull(); modelState .Values .Should() .HaveCount(2); }
public static void ContainsKeyAndErrorMessage(this SerializableError error, string key, string errorMessage) { error.Should().NotBeNull(); error.ContainsKey(key).Should().BeTrue(); ((string[])error[key])[0].Should().Be(errorMessage); }