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.
595 lines
18 KiB
595 lines
18 KiB
using System.Diagnostics.CodeAnalysis;
|
|
using FluentAssertions.Execution;
|
|
using Recyclarr.TrashLib.Config.Parsing;
|
|
using Recyclarr.TrashLib.Config.Parsing.PostProcessing.ConfigMerging;
|
|
|
|
namespace Recyclarr.TrashLib.Config.Tests.Parsing.PostProcessing.ConfigMerging;
|
|
|
|
[TestFixture]
|
|
[Parallelizable(ParallelScope.All)]
|
|
public class ServiceConfigMergerTest
|
|
{
|
|
[Test]
|
|
public void Merge_api_key_from_empty_right_to_non_empty_left()
|
|
{
|
|
var leftConfig = new SonarrConfigYaml
|
|
{
|
|
ApiKey = "a"
|
|
};
|
|
|
|
var rightConfig = new SonarrConfigYaml();
|
|
|
|
var sut = new SonarrConfigMerger();
|
|
|
|
var result = sut.Merge(leftConfig, rightConfig);
|
|
|
|
result.Should().BeEquivalentTo(leftConfig);
|
|
}
|
|
|
|
[Test]
|
|
public void Merge_api_key_from_non_empty_right_to_empty_left()
|
|
{
|
|
var leftConfig = new SonarrConfigYaml();
|
|
|
|
// API Key should not be merged!
|
|
var rightConfig = new SonarrConfigYaml
|
|
{
|
|
ApiKey = "b"
|
|
};
|
|
|
|
var sut = new SonarrConfigMerger();
|
|
|
|
var result = sut.Merge(leftConfig, rightConfig);
|
|
|
|
result.Should().BeEquivalentTo(leftConfig);
|
|
}
|
|
|
|
[Test]
|
|
public void Merge_api_key_from_non_empty_right_to_non_empty_left()
|
|
{
|
|
var leftConfig = new SonarrConfigYaml
|
|
{
|
|
ApiKey = "a"
|
|
};
|
|
|
|
// API Key should not be merged!
|
|
var rightConfig = new SonarrConfigYaml
|
|
{
|
|
ApiKey = "b"
|
|
};
|
|
|
|
var sut = new SonarrConfigMerger();
|
|
|
|
var result = sut.Merge(leftConfig, rightConfig);
|
|
|
|
result.Should().BeEquivalentTo(leftConfig);
|
|
}
|
|
|
|
//------------------------------------------------------
|
|
|
|
[Test]
|
|
public void Merge_base_url_from_empty_right_to_non_empty_left()
|
|
{
|
|
var leftConfig = new SonarrConfigYaml
|
|
{
|
|
BaseUrl = "a"
|
|
};
|
|
|
|
var rightConfig = new SonarrConfigYaml();
|
|
|
|
var sut = new SonarrConfigMerger();
|
|
|
|
var result = sut.Merge(leftConfig, rightConfig);
|
|
|
|
result.Should().BeEquivalentTo(leftConfig);
|
|
}
|
|
|
|
[Test]
|
|
public void Merge_base_url_from_non_empty_right_to_empty_left()
|
|
{
|
|
var leftConfig = new SonarrConfigYaml();
|
|
|
|
// BaseUrl should not be merged!
|
|
var rightConfig = new SonarrConfigYaml
|
|
{
|
|
BaseUrl = "b"
|
|
};
|
|
|
|
var sut = new SonarrConfigMerger();
|
|
|
|
var result = sut.Merge(leftConfig, rightConfig);
|
|
|
|
result.Should().BeEquivalentTo(leftConfig);
|
|
}
|
|
|
|
[Test]
|
|
public void Merge_base_url_from_non_empty_right_to_non_empty_left()
|
|
{
|
|
var leftConfig = new SonarrConfigYaml
|
|
{
|
|
BaseUrl = "a"
|
|
};
|
|
|
|
// Baseurl should not be merged!
|
|
var rightConfig = new SonarrConfigYaml
|
|
{
|
|
BaseUrl = "b"
|
|
};
|
|
|
|
var sut = new SonarrConfigMerger();
|
|
|
|
var result = sut.Merge(leftConfig, rightConfig);
|
|
|
|
result.Should().BeEquivalentTo(leftConfig);
|
|
}
|
|
|
|
//------------------------------------------------------
|
|
|
|
[Test]
|
|
public void Merge_quality_definition_from_empty_right_to_non_empty_left()
|
|
{
|
|
var leftConfig = new SonarrConfigYaml
|
|
{
|
|
QualityDefinition = new QualitySizeConfigYaml
|
|
{
|
|
Type = "type1",
|
|
PreferredRatio = 0.5m
|
|
}
|
|
};
|
|
|
|
var rightConfig = new SonarrConfigYaml();
|
|
|
|
var sut = new SonarrConfigMerger();
|
|
|
|
var result = sut.Merge(leftConfig, rightConfig);
|
|
|
|
result.Should().BeEquivalentTo(leftConfig);
|
|
}
|
|
|
|
[Test]
|
|
public void Merge_quality_definition_from_non_empty_right_to_empty_left()
|
|
{
|
|
var leftConfig = new SonarrConfigYaml();
|
|
|
|
var rightConfig = new SonarrConfigYaml
|
|
{
|
|
QualityDefinition = new QualitySizeConfigYaml
|
|
{
|
|
Type = "type1",
|
|
PreferredRatio = 0.5m
|
|
}
|
|
};
|
|
|
|
var sut = new SonarrConfigMerger();
|
|
|
|
var result = sut.Merge(leftConfig, rightConfig);
|
|
|
|
result.Should().BeEquivalentTo(rightConfig);
|
|
}
|
|
|
|
[Test]
|
|
public void Merge_quality_definition_from_non_empty_right_to_non_empty_left()
|
|
{
|
|
var leftConfig = new SonarrConfigYaml
|
|
{
|
|
QualityDefinition = new QualitySizeConfigYaml
|
|
{
|
|
Type = "type1",
|
|
PreferredRatio = 0.5m
|
|
}
|
|
};
|
|
|
|
var rightConfig = new SonarrConfigYaml
|
|
{
|
|
QualityDefinition = new QualitySizeConfigYaml
|
|
{
|
|
Type = "type2",
|
|
PreferredRatio = 1.0m
|
|
}
|
|
};
|
|
|
|
var sut = new SonarrConfigMerger();
|
|
|
|
var result = sut.Merge(leftConfig, rightConfig);
|
|
|
|
result.Should().BeEquivalentTo(rightConfig);
|
|
}
|
|
|
|
//------------------------------------------------------
|
|
|
|
[Test]
|
|
public void Merge_custom_formats_from_empty_right_to_non_empty_left()
|
|
{
|
|
var leftConfig = new SonarrConfigYaml
|
|
{
|
|
CustomFormats = new[]
|
|
{
|
|
new CustomFormatConfigYaml
|
|
{
|
|
TrashIds = new[] {"id1", "id2"},
|
|
QualityProfiles = new[]
|
|
{
|
|
new QualityScoreConfigYaml {Name = "c", Score = 100}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
var rightConfig = new SonarrConfigYaml();
|
|
|
|
var sut = new SonarrConfigMerger();
|
|
|
|
var result = sut.Merge(leftConfig, rightConfig);
|
|
|
|
result.Should().BeEquivalentTo(leftConfig);
|
|
}
|
|
|
|
[Test]
|
|
public void Merge_custom_formats_from_non_empty_right_to_empty_left()
|
|
{
|
|
var leftConfig = new SonarrConfigYaml();
|
|
|
|
var rightConfig = new SonarrConfigYaml
|
|
{
|
|
CustomFormats = new[]
|
|
{
|
|
new CustomFormatConfigYaml
|
|
{
|
|
TrashIds = new[] {"id1", "id2"},
|
|
QualityProfiles = new[]
|
|
{
|
|
new QualityScoreConfigYaml {Name = "c", Score = 100}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
var sut = new SonarrConfigMerger();
|
|
|
|
var result = sut.Merge(leftConfig, rightConfig);
|
|
|
|
result.Should().BeEquivalentTo(rightConfig);
|
|
}
|
|
|
|
[Test]
|
|
public void Merge_custom_formats_from_non_empty_right_to_non_empty_left()
|
|
{
|
|
var leftConfig = new SonarrConfigYaml
|
|
{
|
|
CustomFormats = new[]
|
|
{
|
|
new CustomFormatConfigYaml
|
|
{
|
|
TrashIds = new[] {"id1", "id2"},
|
|
QualityProfiles = new[]
|
|
{
|
|
new QualityScoreConfigYaml {Name = "c", Score = 100},
|
|
new QualityScoreConfigYaml {Name = "d", Score = 101},
|
|
new QualityScoreConfigYaml {Name = "e", Score = 102}
|
|
}
|
|
},
|
|
new CustomFormatConfigYaml
|
|
{
|
|
TrashIds = new[] {"id2"},
|
|
QualityProfiles = new[]
|
|
{
|
|
new QualityScoreConfigYaml {Name = "f", Score = 100}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
var rightConfig = new SonarrConfigYaml
|
|
{
|
|
CustomFormats = new[]
|
|
{
|
|
new CustomFormatConfigYaml
|
|
{
|
|
TrashIds = new[] {"id3", "id4"},
|
|
QualityProfiles = new[]
|
|
{
|
|
new QualityScoreConfigYaml {Name = "d", Score = 200}
|
|
}
|
|
},
|
|
new CustomFormatConfigYaml
|
|
{
|
|
TrashIds = new[] {"id5", "id6"},
|
|
QualityProfiles = new[]
|
|
{
|
|
new QualityScoreConfigYaml {Name = "e", Score = 300}
|
|
}
|
|
},
|
|
new CustomFormatConfigYaml
|
|
{
|
|
TrashIds = new[] {"id1"},
|
|
QualityProfiles = new[]
|
|
{
|
|
new QualityScoreConfigYaml {Name = "c", Score = 50}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
var sut = new SonarrConfigMerger();
|
|
|
|
var result = sut.Merge(leftConfig, rightConfig);
|
|
|
|
result.Should().BeEquivalentTo(new SonarrConfigYaml
|
|
{
|
|
CustomFormats = new[]
|
|
{
|
|
new CustomFormatConfigYaml
|
|
{
|
|
TrashIds = new[] {"id2"},
|
|
QualityProfiles = new[]
|
|
{
|
|
new QualityScoreConfigYaml {Name = "c", Score = 100}
|
|
}
|
|
},
|
|
new CustomFormatConfigYaml
|
|
{
|
|
TrashIds = new[] {"id1", "id2"},
|
|
QualityProfiles = new[]
|
|
{
|
|
new QualityScoreConfigYaml {Name = "d", Score = 101}
|
|
}
|
|
},
|
|
new CustomFormatConfigYaml
|
|
{
|
|
TrashIds = new[] {"id1", "id2"},
|
|
QualityProfiles = new[]
|
|
{
|
|
new QualityScoreConfigYaml {Name = "e", Score = 102}
|
|
}
|
|
},
|
|
new CustomFormatConfigYaml
|
|
{
|
|
TrashIds = new[] {"id2"},
|
|
QualityProfiles = new[]
|
|
{
|
|
new QualityScoreConfigYaml {Name = "f", Score = 100}
|
|
}
|
|
},
|
|
new CustomFormatConfigYaml
|
|
{
|
|
TrashIds = new[] {"id3", "id4"},
|
|
QualityProfiles = new[]
|
|
{
|
|
new QualityScoreConfigYaml {Name = "d", Score = 200}
|
|
}
|
|
},
|
|
new CustomFormatConfigYaml
|
|
{
|
|
TrashIds = new[] {"id5", "id6"},
|
|
QualityProfiles = new[]
|
|
{
|
|
new QualityScoreConfigYaml {Name = "e", Score = 300}
|
|
}
|
|
},
|
|
new CustomFormatConfigYaml
|
|
{
|
|
TrashIds = new[] {"id1"},
|
|
QualityProfiles = new[]
|
|
{
|
|
new QualityScoreConfigYaml {Name = "c", Score = 50}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
//------------------------------------------------------
|
|
|
|
[Test]
|
|
public void Merge_quality_profiles_from_empty_right_to_non_empty_left()
|
|
{
|
|
var leftConfig = new SonarrConfigYaml
|
|
{
|
|
QualityProfiles = new[]
|
|
{
|
|
new QualityProfileConfigYaml
|
|
{
|
|
Name = "e",
|
|
QualitySort = QualitySortAlgorithm.Top,
|
|
MinFormatScore = 100,
|
|
ScoreSet = "set1",
|
|
ResetUnmatchedScores = new ResetUnmatchedScoresConfigYaml
|
|
{
|
|
Enabled = true,
|
|
Except = new[] {"except1"}
|
|
},
|
|
Upgrade = new QualityProfileFormatUpgradeYaml
|
|
{
|
|
Allowed = true,
|
|
UntilQuality = "quality1",
|
|
UntilScore = 200
|
|
},
|
|
Qualities = new[]
|
|
{
|
|
new QualityProfileQualityConfigYaml
|
|
{
|
|
Enabled = true,
|
|
Name = "quality1",
|
|
Qualities = new[] {"quality"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
var rightConfig = new SonarrConfigYaml();
|
|
|
|
var sut = new SonarrConfigMerger();
|
|
|
|
var result = sut.Merge(leftConfig, rightConfig);
|
|
|
|
result.Should().BeEquivalentTo(leftConfig);
|
|
}
|
|
|
|
[Test]
|
|
public void Merge_quality_profiles_from_non_empty_right_to_empty_left()
|
|
{
|
|
var leftConfig = new SonarrConfigYaml();
|
|
|
|
var rightConfig = new SonarrConfigYaml
|
|
{
|
|
QualityProfiles = new[]
|
|
{
|
|
new QualityProfileConfigYaml
|
|
{
|
|
Name = "e",
|
|
QualitySort = QualitySortAlgorithm.Top,
|
|
MinFormatScore = 100,
|
|
ScoreSet = "set1",
|
|
ResetUnmatchedScores = new ResetUnmatchedScoresConfigYaml
|
|
{
|
|
Enabled = true,
|
|
Except = new[] {"except1"}
|
|
},
|
|
Upgrade = new QualityProfileFormatUpgradeYaml
|
|
{
|
|
Allowed = true,
|
|
UntilQuality = "quality1",
|
|
UntilScore = 200
|
|
},
|
|
Qualities = new[]
|
|
{
|
|
new QualityProfileQualityConfigYaml
|
|
{
|
|
Enabled = true,
|
|
Name = "quality1",
|
|
Qualities = new[] {"quality"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
var sut = new SonarrConfigMerger();
|
|
|
|
var result = sut.Merge(leftConfig, rightConfig);
|
|
|
|
result.Should().BeEquivalentTo(rightConfig);
|
|
}
|
|
|
|
[Test]
|
|
[SuppressMessage("Reliability", "CA2000:Dispose objects before losing scope")]
|
|
public void Merge_quality_profiles_from_non_empty_right_to_non_empty_left()
|
|
{
|
|
var leftConfig = new SonarrConfigYaml
|
|
{
|
|
QualityProfiles = new[]
|
|
{
|
|
new QualityProfileConfigYaml
|
|
{
|
|
Name = "e",
|
|
QualitySort = QualitySortAlgorithm.Top,
|
|
MinFormatScore = 100,
|
|
ScoreSet = "set1",
|
|
ResetUnmatchedScores = new ResetUnmatchedScoresConfigYaml
|
|
{
|
|
Enabled = true,
|
|
Except = new[] {"except1"}
|
|
},
|
|
Upgrade = new QualityProfileFormatUpgradeYaml
|
|
{
|
|
Allowed = true,
|
|
UntilQuality = "quality1",
|
|
UntilScore = 200
|
|
},
|
|
Qualities = new[]
|
|
{
|
|
new QualityProfileQualityConfigYaml
|
|
{
|
|
Enabled = true,
|
|
Name = "quality1",
|
|
Qualities = new[] {"quality"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
var rightConfig = new SonarrConfigYaml
|
|
{
|
|
QualityProfiles = new[]
|
|
{
|
|
new QualityProfileConfigYaml
|
|
{
|
|
Name = "e",
|
|
ScoreSet = "set2",
|
|
ResetUnmatchedScores = new ResetUnmatchedScoresConfigYaml
|
|
{
|
|
Except = new[] {"except2", "except3"}
|
|
},
|
|
Upgrade = new QualityProfileFormatUpgradeYaml
|
|
{
|
|
UntilQuality = "quality2"
|
|
},
|
|
Qualities = new[]
|
|
{
|
|
new QualityProfileQualityConfigYaml
|
|
{
|
|
Enabled = false,
|
|
Name = "quality2",
|
|
Qualities = new[] {"quality3"}
|
|
},
|
|
new QualityProfileQualityConfigYaml
|
|
{
|
|
Enabled = true,
|
|
Name = "quality4",
|
|
Qualities = new[] {"quality5", "quality6"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
var sut = new SonarrConfigMerger();
|
|
|
|
var result = sut.Merge(leftConfig, rightConfig);
|
|
|
|
using var scope = new AssertionScope().UsingLineBreaks;
|
|
|
|
result.Should().BeEquivalentTo(new SonarrConfigYaml
|
|
{
|
|
QualityProfiles = new[]
|
|
{
|
|
new QualityProfileConfigYaml
|
|
{
|
|
Name = "e",
|
|
QualitySort = QualitySortAlgorithm.Top,
|
|
MinFormatScore = 100,
|
|
ScoreSet = "set2",
|
|
ResetUnmatchedScores = new ResetUnmatchedScoresConfigYaml
|
|
{
|
|
Enabled = true,
|
|
Except = new[] {"except1", "except2", "except3"}
|
|
},
|
|
Upgrade = new QualityProfileFormatUpgradeYaml
|
|
{
|
|
Allowed = true,
|
|
UntilQuality = "quality2",
|
|
UntilScore = 200
|
|
},
|
|
Qualities = new[]
|
|
{
|
|
new QualityProfileQualityConfigYaml
|
|
{
|
|
Enabled = false,
|
|
Name = "quality2",
|
|
Qualities = new[] {"quality3"}
|
|
},
|
|
new QualityProfileQualityConfigYaml
|
|
{
|
|
Enabled = true,
|
|
Name = "quality4",
|
|
Qualities = new[] {"quality5", "quality6"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|