fix: parse project rosters with legacy-compatible semantics
This commit is contained in:
@@ -26,4 +26,24 @@ public sealed class LegacyNetworkSettingsParserTests
|
||||
var plugin = new LegacyPluginDefinition("id", "", "catalog", "install", 0);
|
||||
Assert.True(plugin.IsAllowedOn(Environment.MachineName));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RealOwnerRosterShape_UsesAreaIdsInSourceOrderAndPreservesDuplicateEvidence()
|
||||
{
|
||||
const string roster = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><!-- comment --><area><agname>1</agname><id>first</id><id> second </id><id>first</id><id></id></area><ignored><id>not-selected</id></ignored></root>";
|
||||
var selection = new LegacyConfigurationAdapter().ParseDownloadList(roster);
|
||||
Assert.Equal(["first", " second ", "first"], selection.PluginIds);
|
||||
Assert.Equal(["first", " second "], selection.EffectivePluginIds);
|
||||
Assert.Equal("Area", selection.Entries![0].SourceShape);
|
||||
Assert.Equal(0, selection.Entries[2].FirstOccurrenceIndex);
|
||||
Assert.Equal("", selection.Entries[3].RawId);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DownloadListErrors_AreSpecific()
|
||||
{
|
||||
var adapter = new LegacyConfigurationAdapter();
|
||||
Assert.Equal("DOWNLOAD_LIST_ROOT_INVALID", Assert.Throws<InvalidOperationException>(() => adapter.ParseDownloadList("<other/>")).Message);
|
||||
Assert.Equal("DOWNLOAD_LIST_XML_MALFORMED", Assert.Throws<InvalidOperationException>(() => adapter.ParseDownloadList("<root>")).Message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,14 +70,15 @@ public sealed class LegacyProductSelectionTests
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ProductIncompatibleAndDuplicateIds_AreBlocked()
|
||||
public void ProductIncompatibleIds_AreBlocked_AndDuplicateIdsRemainDiagnosticInput()
|
||||
{
|
||||
using var fixture = new SelectionFixture();
|
||||
var project = fixture.ProjectFile("Project.xml");
|
||||
fixture.WriteAutomatic("Plant PnID_2019", "<root><id>unexpected</id></root>");
|
||||
Assert.Equal("LEGACY_PLUGIN_PRODUCT_MISMATCH", Assert.Throws<InvalidOperationException>(() => LegacyProductSelections.ReadRoster(LegacyProductSelections.Pnid, project, null, new LegacyConfigurationAdapter())).Message);
|
||||
fixture.WriteAutomatic("Plant PnID_2019", "<root><id>1111</id><id>1111</id></root>");
|
||||
Assert.Equal("LEGACY_DOWNLOAD_SELECTION_INVALID", Assert.Throws<InvalidOperationException>(() => LegacyProductSelections.ReadRoster(LegacyProductSelections.Pnid, project, null, new LegacyConfigurationAdapter())).Message);
|
||||
var duplicatePlan = LegacyProductSelections.ReadRoster(LegacyProductSelections.Pnid, project, null, new LegacyConfigurationAdapter());
|
||||
Assert.Equal(["1111", "1111"], duplicatePlan.OrderedIds);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
@@ -16,7 +16,7 @@ public sealed class OwnerReviewStateTests
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("LEGACY_DOWNLOAD_SELECTION_INVALID", "PluginPlanFailed", "DOWNLOAD_LIST_INVALID")]
|
||||
[InlineData("DOWNLOAD_LIST_XML_MALFORMED", "PluginPlanFailed", "DOWNLOAD_LIST_XML_MALFORMED")]
|
||||
[InlineData("LEGACY_PLUGIN_PRODUCT_MISMATCH", "PluginPlanFailed", "PLUGIN_PRODUCT_MISMATCH")]
|
||||
[InlineData("LEGACY_MAPPING_NOT_FOUND", "PackageMappingFailed", "PACKAGE_MAPPING_NOT_FOUND")]
|
||||
[InlineData("LOCAL_PARITY_ROSTER_PROFILE_MISMATCH", "RosterResolutionFailed", "OWNER_REVIEW_PROFILE_ROSTER_MISMATCH")]
|
||||
|
||||
Reference in New Issue
Block a user