Skip to content

Commit

Permalink
Merge pull request #739 from dlcs/feature/api_deliverychannelpolicies
Browse files Browse the repository at this point in the history
Add endpoints for managing API delivery channel policies
  • Loading branch information
griffri committed Feb 27, 2024
2 parents 1871786 + 301da79 commit d4dd6eb
Show file tree
Hide file tree
Showing 23 changed files with 1,854 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
using API.Features.DeliveryChannels.Validation;

namespace API.Tests.Features.DeliveryChannelPolicies.Validation;

public class DeliveryChannelPolicyDataValidatorTests
{
private readonly DeliveryChannelPolicyDataValidator sut;

public DeliveryChannelPolicyDataValidatorTests()
{
sut = new DeliveryChannelPolicyDataValidator();
}

[Theory]
[InlineData("[\"400,400\",\"200,200\",\"100,100\"]")]
[InlineData("[\"!400,400\",\"!200,200\",\"!100,100\"]")]
[InlineData("[\"400,\",\"200,\",\"100,\"]")]
[InlineData("[\"!400,\",\"!200,\",\"!100,\"]")]
[InlineData("[\"400,400\"]")]
public void PolicyDataValidator_ReturnsTrue_ForValidThumbSizes(string policyData)
{
// Arrange And Act
var result = sut.Validate(policyData, "thumbs");

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

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

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

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

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

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

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

[Theory]
[InlineData("")]
[InlineData("[]")]
[InlineData("[\"\"]")]
public void PolicyDataValidator_ReturnsFalse_ForEmptyThumbSizes(string policyData)
{
// Arrange and Act
var result = sut.Validate(policyData, "thumbs");

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

[Fact]
public void PolicyDataValidator_ReturnsTrue_ForValidAvPolicy()
{
// 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");

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

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

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

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

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

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

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

// Assert
result.Should().BeFalse();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
using System;
using API.Features.DeliveryChannels.Validation;
using DLCS.HydraModel;
using FluentValidation.TestHelper;

namespace API.Tests.Features.DeliveryChannelPolicies.Validation;

public class HydraDeliveryChannelPolicyValidatorTests
{
private readonly HydraDeliveryChannelPolicyValidator sut;

public HydraDeliveryChannelPolicyValidatorTests()
{
sut = new HydraDeliveryChannelPolicyValidator(new DeliveryChannelPolicyDataValidator());
}

[Fact]
public void NewDeliveryChannelPolicy_CannotHave_AssetId()
{
var policy = new DeliveryChannelPolicy()
{
Id = "foo",
};
var result = sut.TestValidate(policy);
result.ShouldHaveValidationErrorFor(p => p.Id);
}

[Fact]
public void NewDeliveryChannelPolicy_CannotHave_CustomerId()
{
var policy = new DeliveryChannelPolicy()
{
CustomerId = 1,
};
var result = sut.TestValidate(policy);
result.ShouldHaveValidationErrorFor(p => p.CustomerId);
}

[Fact]
public void NewDeliveryChannelPolicy_CannotHave_PolicyCreated()
{
var policy = new DeliveryChannelPolicy()
{
Created = DateTime.UtcNow
};
var result = sut.TestValidate(policy);
result.ShouldHaveValidationErrorFor(p => p.Created);
}

[Fact]
public void NewDeliveryChannelPolicy_CannotHave_PolicyModified()
{
var policy = new DeliveryChannelPolicy()
{
Modified = DateTime.UtcNow
};
var result = sut.TestValidate(policy);
result.ShouldHaveValidationErrorFor(p => p.Modified);
}

[Fact]
public void NewDeliveryChannelPolicy_Requires_Name_OnPost()
{
var policy = new DeliveryChannelPolicy()
{
Name = null
};
var result = sut.TestValidate(policy, p => p.IncludeRuleSets("default", "post"));
result.ShouldHaveValidationErrorFor(p => p.Name);
}

[Fact]
public void NewDeliveryChannelPolicy_Requires_PolicyData_OnPost()
{
var policy = new DeliveryChannelPolicy()
{
PolicyData = null,
};
var result = sut.TestValidate(policy, p => p.IncludeRuleSets("default", "post"));
result.ShouldHaveValidationErrorFor(p => p.PolicyData);
}

[Fact]
public void NewDeliveryChannelPolicy_Requires_PolicyData_OnPut()
{
var policy = new DeliveryChannelPolicy()
{
PolicyData = null,
};
var result = sut.TestValidate(policy, p => p.IncludeRuleSets("default", "put"));
result.ShouldHaveValidationErrorFor(p => p.PolicyData);
}
}
2 changes: 1 addition & 1 deletion src/protagonist/API.Tests/Integration/CustomerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ public async Task NewlyCreatedCustomer_RollsBackSuccessfully_WhenDeliveryChannel
}";
var content = new StringContent(customerJson, Encoding.UTF8, "application/json");

dbContext.DeliveryChannelPolicies.Add(new DeliveryChannelPolicy()
dbContext.DeliveryChannelPolicies.Add(new DLCS.Model.Policies.DeliveryChannelPolicy()
{
Id = 250,
DisplayName = "A default audio policy",
Expand Down
Loading

0 comments on commit d4dd6eb

Please sign in to comment.