You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
recyclarr/tests/Recyclarr.Cli.Tests/Pipelines/ReleaseProfile/Filters/ReleaseProfileDataFiltererT...

208 lines
6.0 KiB

using Recyclarr.Cli.Pipelines.ReleaseProfile.Filters;
using Recyclarr.Config.Models;
using Recyclarr.TrashGuide.ReleaseProfile;
namespace Recyclarr.Cli.Tests.Pipelines.ReleaseProfile.Filters;
[TestFixture]
public class ReleaseProfileDataFiltererTest
{
[Test, AutoMockData]
public void Include_terms_filter_works(ReleaseProfileDataFilterer sut)
{
var filter = new[] {"1", "2"};
var terms = new TermData[]
{
new() {TrashId = "1", Term = "term1"},
new() {TrashId = "2", Term = "term2"},
new() {TrashId = "3", Term = "term3"},
new() {Term = "term4"},
new() {Term = "term5"}
};
var result = sut.IncludeTerms(terms, filter);
result.Should().BeEquivalentTo(new TermData[]
{
new() {TrashId = "1", Term = "term1"},
new() {TrashId = "2", Term = "term2"}
});
}
[Test, AutoMockData]
public void Include_preferred_terms_filter_works(ReleaseProfileDataFilterer sut)
{
var filter = new[] {"1", "2"};
var terms = new PreferredTermData[]
{
new()
{
Score = 10, Terms = new TermData[]
{
new() {TrashId = "1", Term = "term1"},
new() {TrashId = "2", Term = "term2"},
new() {TrashId = "3", Term = "term3"},
new() {Term = "term4"},
new() {Term = "term5"}
}
},
new()
{
Score = 20, Terms = new TermData[]
{
new() {TrashId = "4", Term = "term4"}
}
}
};
var result = sut.IncludeTerms(terms, filter);
result.Should().BeEquivalentTo(new PreferredTermData[]
{
new()
{
Score = 10, Terms = new TermData[]
{
new() {TrashId = "1", Term = "term1"},
new() {TrashId = "2", Term = "term2"}
}
}
});
}
[Test, AutoMockData]
public void Exclude_terms_filter_works(ReleaseProfileDataFilterer sut)
{
var filter = new[] {"1", "2"};
var terms = new TermData[]
{
new() {TrashId = "1", Term = "term1"},
new() {TrashId = "2", Term = "term2"},
new() {TrashId = "3", Term = "term3"},
new() {Term = "term4"},
new() {Term = "term5"}
};
var result = sut.ExcludeTerms(terms, filter);
result.Should().BeEquivalentTo(new TermData[]
{
new() {TrashId = "3", Term = "term3"},
new() {Term = "term4"},
new() {Term = "term5"}
});
}
[Test, AutoMockData]
public void Exclude_preferred_terms_filter_works(ReleaseProfileDataFilterer sut)
{
var filter = new[] {"1", "2"};
var terms = new PreferredTermData[]
{
new()
{
Score = 10,
Terms = new TermData[]
{
new() {TrashId = "1", Term = "term1"},
new() {TrashId = "2", Term = "term2"},
new() {TrashId = "3", Term = "term3"},
new() {Term = "term4"},
new() {Term = "term5"}
}
},
new()
{
Score = 20,
Terms = new TermData[]
{
new() {TrashId = "4", Term = "term4"},
new() {Term = "term6"},
new() {Term = "term7"}
}
}
};
var result = sut.ExcludeTerms(terms, filter);
result.Should().BeEquivalentTo(new PreferredTermData[]
{
new()
{
Score = 10,
Terms = new TermData[]
{
new() {TrashId = "3", Term = "term3"},
new() {Term = "term4"},
new() {Term = "term5"}
}
},
new()
{
Score = 20,
Terms = new TermData[]
{
new() {TrashId = "4", Term = "term4"},
new() {Term = "term6"},
new() {Term = "term7"}
}
}
});
}
[Test, AutoMockData]
public void Filter_profile_data_with_invalid_terms(ReleaseProfileDataFilterer sut)
{
var profileData = new ReleaseProfileData
{
Preferred = new PreferredTermData[]
{
new()
{
Score = 10, Terms = new TermData[]
{
new() {TrashId = "1", Term = "term1"}, // excluded by filter
new() {TrashId = "2", Term = ""}, // excluded because it's invalid
new() {TrashId = "3", Term = "term3"}
}
},
new()
{
Score = 20, Terms = new TermData[]
{
new() {TrashId = "4", Term = "term4"}
}
}
}
};
var filter = new SonarrProfileFilterConfig
{
Exclude = new[] {"1"}
};
var result = sut.FilterProfile(profileData, filter);
result.Should().BeEquivalentTo(new ReleaseProfileData
{
Preferred = new PreferredTermData[]
{
new()
{
Score = 10, Terms = new TermData[]
{
new() {TrashId = "3", Term = "term3"}
}
},
new()
{
Score = 20, Terms = new TermData[]
{
new() {TrashId = "4", Term = "term4"}
}
}
}
});
}
}