Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Validate AV policyData in API #762

Merged
merged 21 commits into from
Mar 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
b028023
Add work in progress GetAllowedAvOptions method to EngineClient
griffri Mar 13, 2024
8f76389
Add AvPolicyOptionsRepository
griffri Mar 13, 2024
31538d4
Rewrite DeliveryChannelPolicyValidator to validate against transcode …
griffri Mar 13, 2024
9466fee
Refactor EngineClient changes
griffri Mar 13, 2024
6196df6
Rename AvPolicyOptionsRepository to AvChannelPolicyOptionsRepository
griffri Mar 13, 2024
510579c
Update iiif-av policyData related tests
griffri Mar 13, 2024
78096d7
Update appsettings, av policy test payloads
griffri Mar 13, 2024
b5dcf7b
Replace EngineDirectIngestUri and EngineAvOptionsUri with EngineRoot
griffri Mar 13, 2024
d73b7b0
Call asset-ingest instead of image-ingest
griffri Mar 14, 2024
fd0445d
Use fake EngineClient in DeliveryChannelTests
griffri Mar 14, 2024
1d8da2e
Divert legacy engine calls to /image-ingest
griffri Mar 14, 2024
750118b
Define ingest endpoints as const
griffri Mar 14, 2024
0673967
Add test for nonexistent transcode policies
griffri Mar 14, 2024
14d0e76
Add summary to RetrieveAvChannelPolicyOptions
griffri Mar 14, 2024
76a78d2
Return 500 from API if Engine av policy endpoint is unreachable
griffri Mar 14, 2024
a31246d
Add summary for IEngineClient.GetAllowedAvPolicyOptions()
griffri Mar 14, 2024
3a374db
Validate policy data in HydraDeliveryChannelPolicyValidator, use APIE…
griffri Mar 15, 2024
f85a95d
Address issues raised in review
griffri Mar 15, 2024
8e31439
Resolve further issues raised in review
griffri Mar 15, 2024
3241b60
Change order of TryValidateHydraDeliveryChannelPolicy params
griffri Mar 15, 2024
5671381
Turn `CachedEngineAvChannelResponse.AvChannelPolicies` into read only…
griffri Mar 15, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,14 +1,26 @@
using API.Features.DeliveryChannels.Validation;
using System.Threading.Tasks;
using API.Features.DeliveryChannels.Validation;
using DLCS.Model.DeliveryChannels;
using FakeItEasy;

namespace API.Tests.Features.DeliveryChannelPolicies.Validation;

public class DeliveryChannelPolicyDataValidatorTests
{
private readonly DeliveryChannelPolicyDataValidator sut;
private readonly string[] fakedAvPolicies =
{
"video-mp4-480p",
"video-webm-720p",
"audio-mp3-128k"
};

public DeliveryChannelPolicyDataValidatorTests()
{
sut = new DeliveryChannelPolicyDataValidator();
var avChannelPolicyOptionsRepository = A.Fake<IAvChannelPolicyOptionsRepository>();
A.CallTo(() => avChannelPolicyOptionsRepository.RetrieveAvChannelPolicyOptions())
.Returns(fakedAvPolicies);
sut = new DeliveryChannelPolicyDataValidator(avChannelPolicyOptionsRepository);
}

[Theory]
Expand All @@ -17,36 +29,36 @@ public DeliveryChannelPolicyDataValidatorTests()
[InlineData("[\"400,\",\"200,\",\"100,\"]")]
[InlineData("[\"!400,\",\"!200,\",\"!100,\"]")]
[InlineData("[\"400,400\"]")]
public void PolicyDataValidator_ReturnsTrue_ForValidThumbSizes(string policyData)
public async Task PolicyDataValidator_ReturnsTrue_ForValidThumbSizes(string policyData)
{
// Arrange And Act
var result = sut.Validate(policyData, "thumbs");
var result = await sut.Validate(policyData, "thumbs");

// Assert
result.Should().BeTrue();
}

[Fact]
public void PolicyDataValidator_ReturnsFalse_ForBadThumbSizes()
public async Task PolicyDataValidator_ReturnsFalse_ForBadThumbSizes()
{
// Arrange
var policyData = "[\"400,400\",\"foo,bar\",\"100,100\"]";

// Act
var result = sut.Validate(policyData, "thumbs");
var result = await sut.Validate(policyData, "thumbs");

// Assert
result.Should().BeFalse();
}

[Fact]
public void PolicyDataValidator_ReturnsFalse_ForInvalidThumbSizesJson()
public async Task PolicyDataValidator_ReturnsFalse_ForInvalidThumbSizesJson()
{
// Arrange
var policyData = "[\"400,400\",";

// Act
var result = sut.Validate(policyData, "thumbs");
var result = await sut.Validate(policyData, "thumbs");

// Assert
result.Should().BeFalse();
Expand All @@ -56,36 +68,45 @@ public void PolicyDataValidator_ReturnsFalse_ForInvalidThumbSizesJson()
[InlineData("")]
[InlineData("[]")]
[InlineData("[\"\"]")]
public void PolicyDataValidator_ReturnsFalse_ForEmptyThumbSizes(string policyData)
public async Task PolicyDataValidator_ReturnsFalse_ForEmptyThumbSizes(string policyData)
{
// Arrange and Act
var result = sut.Validate(policyData, "thumbs");
var result = await sut.Validate(policyData, "thumbs");

// Assert
result.Should().BeFalse();
}

[Fact]
public void PolicyDataValidator_ReturnsTrue_ForValidAvPolicy()
[Theory]
[InlineData("[\"video-mp4-480p\"]")]
[InlineData("[\"video-webm-720p\"]")]
[InlineData("[\"audio-mp3-128k\"]")]
public async Task PolicyDataValidator_ReturnsTrue_ForValidAvPolicy(string policyData)
{
// Arrange
var policyData = "[\"media-format-quality\"]"; // For now, any single string values are accepted - this will need
// to be rewritten once the API requires policies that exist

// Act
var result = sut.Validate(policyData, "iiif-av");
// Arrange and Act
var result = await sut.Validate(policyData, "iiif-av");

// Assert
result.Should().BeTrue();
}

[Fact]
public async Task PolicyDataValidator_ReturnsFalse_ForNonexistentAvPolicy()
{
// Arrange and Act
var result = await sut.Validate("not-a-transcode-policy", "iiif-av");

// Assert
result.Should().BeFalse();
}

[Theory]
[InlineData("[\"\"]")]
[InlineData("[\"policy-1\",\"\"]")]
public void PolicyDataValidator_ReturnsFalse_ForBadAvPolicy(string policyData)
public async Task PolicyDataValidator_ReturnsFalse_ForBadAvPolicy(string policyData)
{
// Arrange and Act
var result = sut.Validate(policyData, "iiif-av");
var result = await sut.Validate(policyData, "iiif-av");

// Assert
result.Should().BeFalse();
Expand All @@ -95,23 +116,23 @@ public void PolicyDataValidator_ReturnsFalse_ForBadAvPolicy(string policyData)
[InlineData("")]
[InlineData("[]")]
[InlineData("[\"\"]")]
public void PolicyDataValidator_ReturnsFalse_ForEmptyAvPolicy(string policyData)
public async Task PolicyDataValidator_ReturnsFalse_ForEmptyAvPolicy(string policyData)
{
// Arrange and Act
var result = sut.Validate(policyData, "iiif-av");
var result = await sut.Validate(policyData, "iiif-av");

// Assert
result.Should().BeFalse();
}

[Fact]
public void PolicyDataValidator_ReturnsFalse_ForInvalidAvPolicyJson()
public async Task PolicyDataValidator_ReturnsFalse_ForInvalidAvPolicyJson()
{
// Arrange
var policyData = "[\"policy-1\",";

// Act
var result = sut.Validate(policyData, "iiif-av");
var result = await sut.Validate(policyData, "iiif-av");

// Assert
result.Should().BeFalse();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,30 @@
using System;
using API.Features.DeliveryChannels.Validation;
using DLCS.HydraModel;
using DLCS.Model.Assets;
using DLCS.Model.DeliveryChannels;
using FakeItEasy;
using FluentValidation.TestHelper;

namespace API.Tests.Features.DeliveryChannelPolicies.Validation;

public class HydraDeliveryChannelPolicyValidatorTests
{
private readonly HydraDeliveryChannelPolicyValidator sut;
private readonly string[] fakedAvPolicies =
{
"video-mp4-480p",
"video-webm-720p",
"audio-mp3-128k"
};

public HydraDeliveryChannelPolicyValidatorTests()
{
sut = new HydraDeliveryChannelPolicyValidator(new DeliveryChannelPolicyDataValidator());
var avChannelPolicyOptionsRepository = A.Fake<IAvChannelPolicyOptionsRepository>();
A.CallTo(() => avChannelPolicyOptionsRepository.RetrieveAvChannelPolicyOptions())
.Returns(fakedAvPolicies);
sut = new HydraDeliveryChannelPolicyValidator(
new DeliveryChannelPolicyDataValidator(avChannelPolicyOptionsRepository));
}

[Fact]
Expand Down Expand Up @@ -90,4 +103,16 @@ public void NewDeliveryChannelPolicy_Requires_PolicyData_OnPut()
var result = sut.TestValidate(policy, p => p.IncludeRuleSets("default", "put"));
result.ShouldHaveValidationErrorFor(p => p.PolicyData);
}

[Fact]
public async void NewDeliveryChannelPolicy_Requires_ValidTranscodePolicy_ForAvChannel()
{
var policy = new DeliveryChannelPolicy()
{
Channel = AssetDeliveryChannels.Timebased,
PolicyData = "[\"not-a-transcode-policy\"]"
};
var result = await sut.TestValidateAsync(policy);
result.ShouldHaveValidationErrorFor(p => p.PolicyData);
}
}
Loading
Loading