Harden proxy permissions and cache behavior, streamline metadata fetching, remove obsolete rules, and validate the stable SDK with expanded regression coverage. Document backup format changes.
62 lines
2.7 KiB
C#
62 lines
2.7 KiB
C#
using System.Text.Json;
|
|
using Jellyfin.Plugin.Multilang.Data;
|
|
using Jellyfin.Plugin.Multilang.Rules;
|
|
|
|
namespace Jellyfin.Plugin.Multilang.Tests;
|
|
|
|
public sealed class UserRulesNormalizerTests
|
|
{
|
|
[Fact]
|
|
public void LegacyFieldsAreNotConvertedOrWrittenBack()
|
|
{
|
|
var rules = JsonSerializer.Deserialize<UserRulesDocument>("""
|
|
{"Categories":[{"CriteriaText":"original_language is fi",
|
|
"FieldActions":{"title":"Language:fi"},
|
|
"Requirements":[{"Field":"original_language","Relation":"is","Values":["fi"]}]}]}
|
|
""")!;
|
|
UserRulesNormalizer.Normalize(rules, ["fi"]);
|
|
var category = Assert.Single(rules.Categories);
|
|
Assert.Empty(category.Requirements);
|
|
Assert.Equal(["Jellyfin"], category.FieldActionLists["title"]);
|
|
var saved = JsonSerializer.Serialize(rules);
|
|
Assert.DoesNotContain("CriteriaText", saved);
|
|
Assert.DoesNotContain("\"Field\":", saved);
|
|
Assert.DoesNotContain("\"FieldActions\":", saved);
|
|
}
|
|
|
|
[Fact]
|
|
public void CurrentRulesPreserveBooleanModesAndNormalizeOnlyCompleteConditions()
|
|
{
|
|
var rules = new UserRulesDocument
|
|
{
|
|
Categories = [new()
|
|
{
|
|
Label = "Finnish", MatchAllConditions = false, Scopes = ["M", "C"],
|
|
Requirements = [new() { Fields = ["audio_language", "original_language", "origin_countries"],
|
|
UseFieldOr = true, Relation = "contains", UseOr = true, Values = ["fi", "sv"] }, new()],
|
|
FieldActionLists = new() { ["title"] = ["Language:FI", "Language:de", "Original"], ["overview"] = [] }
|
|
}]
|
|
};
|
|
UserRulesNormalizer.Normalize(rules, ["fi"]);
|
|
var category = Assert.Single(rules.Categories);
|
|
Assert.False(category.MatchAllConditions);
|
|
Assert.Equal(["M", "C"], category.Scopes);
|
|
var condition = Assert.Single(category.Requirements);
|
|
Assert.Equal(["original_language", "audio_language"], condition.Fields);
|
|
Assert.True(condition.UseFieldOr);
|
|
Assert.True(condition.UseOr);
|
|
Assert.Equal(["Language:fi", "Original", "Jellyfin"], category.FieldActionLists["title"]);
|
|
Assert.Empty(category.FieldActionLists["overview"]);
|
|
Assert.Equal(JsonSerializer.Serialize(rules), JsonSerializer.Serialize(UserRulesNormalizer.Normalize(rules, ["fi"])));
|
|
}
|
|
|
|
[Fact]
|
|
public void NullExternalCollectionsNormalizeToDefaults()
|
|
{
|
|
var rules = JsonSerializer.Deserialize<UserRulesDocument>("""{"Categories":null,"FallbackFieldActions":null}""")!;
|
|
UserRulesNormalizer.Normalize(rules);
|
|
Assert.Empty(rules.Categories);
|
|
Assert.Equal(["Jellyfin"], rules.FallbackFieldActions["poster"]);
|
|
}
|
|
}
|