|
|
|
using NSubstitute.ReturnsExtensions;
|
|
|
|
using Recyclarr.Cli.Pipelines.QualitySize;
|
|
|
|
using Recyclarr.Cli.Pipelines.QualitySize.PipelinePhases;
|
|
|
|
using Recyclarr.Config.Models;
|
|
|
|
using Recyclarr.Tests.TestLibrary;
|
|
|
|
using Recyclarr.TrashGuide.QualitySize;
|
|
|
|
|
|
|
|
namespace Recyclarr.Cli.Tests.Pipelines.QualitySize.PipelinePhases;
|
|
|
|
|
|
|
|
[TestFixture]
|
|
|
|
public class QualitySizeConfigPhaseTest
|
|
|
|
{
|
|
|
|
[Test, AutoMockData]
|
|
|
|
public void Do_nothing_if_no_quality_definition(
|
|
|
|
[Frozen] IServiceConfiguration config,
|
|
|
|
QualitySizeConfigPhase sut)
|
|
|
|
{
|
|
|
|
var context = new QualitySizePipelineContext();
|
|
|
|
config.QualityDefinition.ReturnsNull();
|
|
|
|
|
|
|
|
sut.Execute(context);
|
|
|
|
|
|
|
|
context.ConfigOutput.Should().BeNull();
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test, AutoMockData]
|
|
|
|
public void Do_nothing_if_no_matching_quality_definition(
|
|
|
|
[Frozen] IQualitySizeGuideService guide,
|
|
|
|
[Frozen] IServiceConfiguration config,
|
|
|
|
QualitySizeConfigPhase sut)
|
|
|
|
{
|
|
|
|
config.QualityDefinition.Returns(new QualityDefinitionConfig {Type = "not_real"});
|
|
|
|
|
|
|
|
guide.GetQualitySizeData(default!).ReturnsForAnyArgs(new[]
|
|
|
|
{
|
|
|
|
new QualitySizeData {Type = "real"}
|
|
|
|
});
|
|
|
|
|
|
|
|
var context = new QualitySizePipelineContext();
|
|
|
|
|
|
|
|
sut.Execute(context);
|
|
|
|
|
|
|
|
context.ConfigOutput.Should().BeNull();
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[InlineAutoMockData("-0.1", "0")]
|
|
|
|
[InlineAutoMockData("1.1", "1")]
|
|
|
|
public void Preferred_ratio_clamping_works(
|
|
|
|
string testPreferred,
|
|
|
|
string expectedPreferred,
|
|
|
|
[Frozen] IQualitySizeGuideService guide,
|
|
|
|
[Frozen] IServiceConfiguration config,
|
|
|
|
QualitySizeConfigPhase sut)
|
|
|
|
{
|
|
|
|
config.QualityDefinition.Returns(new QualityDefinitionConfig
|
|
|
|
{
|
|
|
|
Type = "real",
|
|
|
|
PreferredRatio = decimal.Parse(testPreferred)
|
|
|
|
});
|
|
|
|
|
|
|
|
guide.GetQualitySizeData(default!).ReturnsForAnyArgs(new[]
|
|
|
|
{
|
|
|
|
new QualitySizeData {Type = "real"}
|
|
|
|
});
|
|
|
|
|
|
|
|
var context = new QualitySizePipelineContext();
|
|
|
|
|
|
|
|
sut.Execute(context);
|
|
|
|
|
|
|
|
config.QualityDefinition.Should().NotBeNull();
|
|
|
|
config.QualityDefinition!.PreferredRatio.Should().Be(decimal.Parse(expectedPreferred));
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test, AutoMockData]
|
|
|
|
public void Preferred_is_set_via_ratio(
|
|
|
|
[Frozen] IQualitySizeGuideService guide,
|
|
|
|
[Frozen] IServiceConfiguration config,
|
|
|
|
[Frozen(Matching.ImplementedInterfaces)] TestQualityItemLimits limits,
|
|
|
|
QualitySizeConfigPhase sut)
|
|
|
|
{
|
|
|
|
config.QualityDefinition.Returns(new QualityDefinitionConfig
|
|
|
|
{
|
|
|
|
Type = "real",
|
|
|
|
PreferredRatio = 0.5m
|
|
|
|
});
|
|
|
|
|
|
|
|
guide.GetQualitySizeData(default!).ReturnsForAnyArgs(new[]
|
|
|
|
{
|
|
|
|
new QualitySizeData
|
|
|
|
{
|
|
|
|
Type = "real",
|
|
|
|
Qualities = new[]
|
|
|
|
{
|
|
|
|
new QualityItem("quality1", 0, 100, 90)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
var context = new QualitySizePipelineContext();
|
|
|
|
|
|
|
|
sut.Execute(context);
|
|
|
|
|
|
|
|
context.ConfigOutput.Should().NotBeNull();
|
|
|
|
context.ConfigOutput!.Qualities.Select(x => x.Item).Should().BeEquivalentTo(new[]
|
|
|
|
{
|
|
|
|
new QualityItem("quality1", 0, 100, 50)
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test, AutoMockData]
|
|
|
|
public void Preferred_is_set_via_guide(
|
|
|
|
[Frozen] IQualitySizeGuideService guide,
|
|
|
|
[Frozen] IServiceConfiguration config,
|
|
|
|
QualitySizeConfigPhase sut)
|
|
|
|
{
|
|
|
|
config.QualityDefinition.Returns(new QualityDefinitionConfig
|
|
|
|
{
|
|
|
|
Type = "real"
|
|
|
|
});
|
|
|
|
|
|
|
|
guide.GetQualitySizeData(default!).ReturnsForAnyArgs(new[]
|
|
|
|
{
|
|
|
|
new QualitySizeData
|
|
|
|
{
|
|
|
|
Type = "real",
|
|
|
|
Qualities = new[]
|
|
|
|
{
|
|
|
|
new QualityItem("quality1", 0, 100, 90)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
var context = new QualitySizePipelineContext();
|
|
|
|
|
|
|
|
sut.Execute(context);
|
|
|
|
|
|
|
|
context.ConfigOutput.Should().NotBeNull();
|
|
|
|
context.ConfigOutput!.Qualities.Select(x => x.Item).Should().BeEquivalentTo(new[]
|
|
|
|
{
|
|
|
|
new QualityItem("quality1", 0, 100, 90)
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|