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.Tests/TrashGuide/QualitySize/QualityItemWithLimitsTest.cs

221 lines
7.1 KiB

using Recyclarr.Tests.TestLibrary;
namespace Recyclarr.Tests.TrashGuide.QualitySize;
[TestFixture]
public class QualityItemWithLimitsTest
{
private static readonly object[] MaxTestValues =
[
new object?[] {100m, 100m, false},
new object?[] {100m, 101m, true},
new object?[] {100m, 98m, true},
new object?[] {100m, null, true},
new object?[] {TestQualityItemLimits.MaxUnlimitedThreshold, null, false},
new object?[] {TestQualityItemLimits.MaxUnlimitedThreshold - 1, null, true},
new object?[] {TestQualityItemLimits.MaxUnlimitedThreshold, TestQualityItemLimits.MaxUnlimitedThreshold, true},
new object?[] {399m, null, true}
];
private static readonly object[] MinTestValues =
[
new object?[] {0m, 0m, false},
new object?[] {0m, -1m, true},
new object?[] {0m, 1m, true}
];
[TestCaseSource(nameof(MaxTestValues))]
public void MaxDifferent_WithVariousValues_ReturnsExpectedResult(
decimal guideValue,
decimal? serviceValue,
bool isDifferent)
{
var data = NewQualitySize.WithLimits("", 0, guideValue, 0);
data.IsMaxDifferent(serviceValue)
.Should().Be(isDifferent);
}
[TestCaseSource(nameof(MinTestValues))]
public void MinDifferent_WithVariousValues_ReturnsExpectedResult(
decimal guideValue,
decimal serviceValue,
bool isDifferent)
{
var data = NewQualitySize.WithLimits("", guideValue, 0, 0);
data.IsMinDifferent(serviceValue)
.Should().Be(isDifferent);
}
[Test]
public void AnnotatedMax_OutsideThreshold_EqualsSameValueWithUnlimited()
{
const decimal testVal = TestQualityItemLimits.MaxUnlimitedThreshold;
var data = NewQualitySize.WithLimits("", 0, testVal, 0);
data.AnnotatedMax.Should().Be($"{testVal} (Unlimited)");
}
[Test]
public void AnnotatedMax_WithinThreshold_EqualsSameStringValue()
{
const decimal testVal = TestQualityItemLimits.MaxUnlimitedThreshold - 1;
var data = NewQualitySize.WithLimits("", 0, testVal, 0);
data.AnnotatedMax.Should().Be($"{testVal}");
}
[Test]
public void AnnotatedMin_NoThreshold_EqualsSameValue()
{
const decimal testVal = 10m;
var data = NewQualitySize.WithLimits("", 0, testVal, 0);
data.AnnotatedMax.Should().Be($"{testVal}");
}
[Test]
public void Max_AboveThreshold_EqualsSameValue()
{
const decimal testVal = TestQualityItemLimits.MaxUnlimitedThreshold + 1;
var data = NewQualitySize.WithLimits("", 0, testVal, 0);
data.Item.Max.Should().Be(testVal);
}
[Test]
public void MaxForApi_AboveThreshold_EqualsNull()
{
const decimal testVal = TestQualityItemLimits.MaxUnlimitedThreshold + 1;
var data = NewQualitySize.WithLimits("", 0, testVal, 0);
data.MaxForApi.Should().Be(null);
}
[Test]
public void MaxForApi_HighestWithinThreshold_EqualsSameValue()
{
const decimal testVal = TestQualityItemLimits.MaxUnlimitedThreshold - 0.1m;
var data = NewQualitySize.WithLimits("", 0, testVal, 0);
data.MaxForApi.Should().Be(testVal).And.Be(data.Item.Max);
}
[Test]
public void MaxForApi_LowestWithinThreshold_EqualsSameValue()
{
var data = NewQualitySize.WithLimits("", 0, 0, 0);
data.MaxForApi.Should().Be(0);
}
private static readonly object[] PreferredTestValues =
[
new object?[] {100m, 100m, false},
new object?[] {100m, 101m, true},
new object?[] {100m, 98m, true},
new object?[] {100m, null, true},
new object?[] {TestQualityItemLimits.PreferredUnlimitedThreshold, null, false},
new object?[] {TestQualityItemLimits.PreferredUnlimitedThreshold - 1, null, true},
new object?[]
{
TestQualityItemLimits.PreferredUnlimitedThreshold, TestQualityItemLimits.PreferredUnlimitedThreshold,
true
}
];
[TestCaseSource(nameof(PreferredTestValues))]
public void PreferredDifferent_WithVariousValues_ReturnsExpectedResult(
decimal guideValue,
decimal? serviceValue,
bool isDifferent)
{
var data = NewQualitySize.WithLimits("", 0, 0, guideValue);
data.IsPreferredDifferent(serviceValue)
.Should().Be(isDifferent);
}
private static readonly object[] InterpolatedPreferredTestParams =
[
new[]
{
400m,
1.0m,
TestQualityItemLimits.PreferredUnlimitedThreshold
},
new[]
{
TestQualityItemLimits.PreferredUnlimitedThreshold,
1.0m,
TestQualityItemLimits.PreferredUnlimitedThreshold
},
new[]
{
TestQualityItemLimits.PreferredUnlimitedThreshold - 1m,
1.0m,
TestQualityItemLimits.PreferredUnlimitedThreshold - 1m
},
new[]
{
10m,
0m,
0m
},
new[]
{
100m,
0.5m,
50m
}
];
[TestCaseSource(nameof(InterpolatedPreferredTestParams))]
public void InterpolatedPreferred_VariousValues_ExpectedResults(
decimal max,
decimal ratio,
decimal expectedResult)
{
var data = NewQualitySize.WithLimits("", 0, max, 0);
data.InterpolatedPreferred(ratio).Should().Be(expectedResult);
}
[Test]
public void AnnotatedPreferred_OutsideThreshold_EqualsSameValueWithUnlimited()
{
const decimal testVal = TestQualityItemLimits.PreferredUnlimitedThreshold;
var data = NewQualitySize.WithLimits("", 0, 0, testVal);
data.AnnotatedPreferred.Should().Be($"{testVal} (Unlimited)");
}
[Test]
public void AnnotatedPreferred_WithinThreshold_EqualsSameStringValue()
{
const decimal testVal = TestQualityItemLimits.PreferredUnlimitedThreshold - 1;
var data = NewQualitySize.WithLimits("", 0, 0, testVal);
data.AnnotatedPreferred.Should().Be($"{testVal}");
}
[Test]
public void Preferred_AboveThreshold_EqualsSameValue()
{
const decimal testVal = TestQualityItemLimits.PreferredUnlimitedThreshold + 1;
var data = NewQualitySize.WithLimits("", 0, 0, testVal);
data.Item.Preferred.Should().Be(testVal);
}
[Test]
public void PreferredForApi_AboveThreshold_EqualsNull()
{
const decimal testVal = TestQualityItemLimits.PreferredUnlimitedThreshold + 1;
var data = NewQualitySize.WithLimits("", 0, 0, testVal);
data.PreferredForApi.Should().Be(null);
}
[Test]
public void PreferredForApi_HighestWithinThreshold_EqualsSameValue()
{
const decimal testVal = TestQualityItemLimits.PreferredUnlimitedThreshold - 0.1m;
var data = NewQualitySize.WithLimits("", 0, 0, testVal);
data.PreferredForApi.Should().Be(testVal).And.Be(data.Item.Preferred);
}
[Test]
public void PreferredForApi_LowestWithinThreshold_EqualsSameValue()
{
var data = NewQualitySize.WithLimits("", 0, 0, 0);
data.PreferredForApi.Should().Be(0);
}
}