Skip to content

Commit

Permalink
Add back filtration of ignored validators in patch endpoint (#611)
Browse files Browse the repository at this point in the history
  • Loading branch information
ivarne authored Apr 24, 2024
1 parent f6d33be commit f40c89e
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ public async Task<Dictionary<string, List<ValidationIssue>>> ValidateFormData(In

// Locate the relevant data validator services from normal and keyed services
var dataValidators = _validatorFactory.GetFormDataValidators(dataType.Id)
.Where(dv => ignoredValidators?.Contains(dv.ValidationSource) != true) // Filter out ignored validators
.Where(dv => previousData is null || dv.HasRelevantChanges(data, previousData))
.ToArray();

Expand Down
46 changes: 46 additions & 0 deletions test/Altinn.App.Api.Tests/Controllers/DataController_PatchTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
using Microsoft.Extensions.DependencyInjection;
using Moq;
using Xunit.Abstractions;
using Altinn.App.Core.Models.Validation;

namespace Altinn.App.Api.Tests.Controllers;

Expand Down Expand Up @@ -511,4 +512,49 @@ public async Task ValidationIssueSeverity_IsSerializedNumeric()

responseString.Should().Contain("\"severity\":1");
}

[Fact]
public async Task IgnoredValidators_NotExecuted()
{
// Common setup
_dataProcessorMock.Setup(p => p.ProcessDataWrite(It.IsAny<Instance>(), It.IsAny<Guid?>(), It.IsAny<object>(), It.IsAny<object?>(), null))
.Returns((Instance instance, Guid? dataGuid, object skjema, object? existingData, string? language) => Task.CompletedTask)
.Verifiable(Times.Exactly(2));

// Add extra validator that should be ignored
_formDataValidatorMock.Setup(fdv => fdv.ValidateFormData(
It.IsAny<Instance>(),
It.IsAny<DataElement>(),
It.IsAny<object>(),
It.IsAny<string?>()))
.ReturnsAsync(new List<ValidationIssue>
{
new()
{
Severity = ValidationIssueSeverity.Error,
Description = "Ignored validator",
}
})
.Verifiable(Times.Once);
_formDataValidatorMock.SetupGet(fdv => fdv.ValidationSource).Returns("ignored");
_formDataValidatorMock.SetupGet(fdv => fdv.DataType).Returns("default");
_formDataValidatorMock.Setup(fdv => fdv.HasRelevantChanges(It.IsAny<object>(), It.IsAny<object>())).Returns(true);


var patch = new JsonPatch(
PatchOperation.Replace(JsonPointer.Create("melding", "name"), JsonNode.Parse("\"Ola Olsen\"")));

var (_, _, parsedResponse1) = await CallPatchApi<DataPatchResponse>(patch, ["ignored"], HttpStatusCode.OK);

// Verify that no issues from the ignored validator are present
parsedResponse1.ValidationIssues.Should().NotContainKey("ignored");

var (_, _, parsedResponse2) = await CallPatchApi<DataPatchResponse>(patch, null, HttpStatusCode.OK);

// Verify that issues from the ignored validator are present
parsedResponse2.ValidationIssues.Should().ContainKey("ignored").WhoseValue.Should().ContainSingle().Which.Description.Should().Be("Ignored validator");

_dataProcessorMock.Verify();
_formDataValidatorMock.Verify();
}
}

0 comments on commit f40c89e

Please sign in to comment.