using FluentAssertions; using NUnit.Framework; using TrashLib.Sonarr.Config; using TrashLib.Sonarr.ReleaseProfile; namespace TrashLib.Tests.Sonarr.ReleaseProfile; [TestFixture] [Parallelizable(ParallelScope.All)] public class UtilsTest { private static readonly SonarrProfileFilterConfig _filterIncludeOptional = new() {IncludeOptional = true}; private static readonly SonarrProfileFilterConfig _filterExcludeOptional = new() {IncludeOptional = false}; [Test] public void Profile_with_only_ignored_should_not_be_filtered_out() { var profileData = new ProfileData {Ignored = new List {"term"}}; var data = new Dictionary {{"actualData", profileData}}; var filteredData = Utils.FilterProfiles(data, _filterIncludeOptional); filteredData.Should().BeEquivalentTo(data); } [Test] public void Profile_with_only_required_should_not_be_filtered_out() { var profileData = new ProfileData {Required = new List {"term"}}; var data = new Dictionary {{"actualData", profileData}}; var filteredData = Utils.FilterProfiles(data, _filterIncludeOptional); filteredData.Should().BeEquivalentTo(data); } [Test] public void Profile_with_only_preferred_should_not_be_filtered_out() { var profileData = new ProfileData { Preferred = new Dictionary> { {100, new List {"term"}} } }; var data = new Dictionary {{"actualData", profileData}}; var filteredData = Utils.FilterProfiles(data, _filterIncludeOptional); filteredData.Should().BeEquivalentTo(data); } [Test] public void Profile_with_only_optional_ignored_should_not_be_filtered_out() { var profileData = new ProfileData { Optional = new ProfileDataOptional { Ignored = new List {"term"} } }; var data = new Dictionary {{"actualData", profileData}}; var filteredData = Utils.FilterProfiles(data, _filterIncludeOptional); filteredData.Should().BeEquivalentTo(data); } [Test] public void Profile_with_only_optional_required_should_not_be_filtered_out() { var profileData = new ProfileData { Optional = new ProfileDataOptional { Required = new List {"required1"} } }; var data = new Dictionary { {"actualData", profileData} }; var filteredData = Utils.FilterProfiles(data, _filterIncludeOptional); filteredData.Should().BeEquivalentTo(data); } [Test] public void Profile_with_only_optional_preferred_should_not_be_filtered_out() { var profileData = new ProfileData { Optional = new ProfileDataOptional { Preferred = new Dictionary> { {100, new List {"term"}} } } }; var data = new Dictionary {{"actualData", profileData}}; var filteredData = Utils.FilterProfiles(data, _filterIncludeOptional); filteredData.Should().BeEquivalentTo(data); } [Test] public void Empty_profiles_should_be_filtered_out() { var data = new Dictionary { {"emptyData", new ProfileData()} }; var filteredData = Utils.FilterProfiles(data, _filterIncludeOptional); filteredData.Should().NotContainKey("emptyData"); } [Test] public void Profile_with_only_optionals_should_be_filtered_out_when_config_excludes_optionals() { var profileData = new ProfileData { Optional = new ProfileDataOptional { Preferred = new Dictionary> { {100, new List {"term"}} } } }; var data = new Dictionary {{"actualData", profileData}}; var filteredData = Utils.FilterProfiles(data, _filterExcludeOptional); filteredData.Should().BeEmpty(); } }