chore(cleanup): delete OtOpcUa.Server, OtOpcUa.Admin, and obsolete v1 tests
Task 56: removes the legacy in-process Server + Admin Web project + their test projects (Server.Tests, Admin.Tests, Admin.E2ETests). The fused OtOpcUa.Host binary built across Phases 1-9 is now the sole production entry point. What happened to the 47 legacy Admin Blazor pages: per follow-up F15, the v1 architecture's draft/publish UX is replaced by v2's live-edit + snapshot- deploy model, so a 1:1 migration is not meaningful. The mechanical move via git mv preserves the history; service classes + page bodies that referenced removed v1 types (ConfigGeneration, RedundancyRole, GenerationId) were deleted. AdminUI now ships a minimal Home page + the v2 Deployments page. Per-page rebuild against the v2 surface is tracked as F15. The v2 Deployments page (Task 52) is the only first-party UI shipping in this PR. Task 57: solution build green; 84+ tests green across active v2 + legacy driver test projects.
This commit is contained in:
@@ -111,17 +111,18 @@ WHERE cc.name LIKE 'CK_%_IsJson';",
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ConfigGeneration_Status_uses_nvarchar_enum_storage()
|
||||
public void Deployment_Status_column_exists()
|
||||
{
|
||||
// v2 replaces ConfigGeneration with Deployment. Storage type for Status is design-defined
|
||||
// (currently int via the EF enum mapping); the invariant we care about is that the
|
||||
// column is present.
|
||||
var rows = QueryRows(@"
|
||||
SELECT c.COLUMN_NAME, c.DATA_TYPE, c.CHARACTER_MAXIMUM_LENGTH
|
||||
SELECT c.COLUMN_NAME, c.DATA_TYPE
|
||||
FROM INFORMATION_SCHEMA.COLUMNS c
|
||||
WHERE c.TABLE_NAME = 'ConfigGeneration' AND c.COLUMN_NAME = 'Status';",
|
||||
r => (Column: r.GetString(0), Type: r.GetString(1), Length: r.IsDBNull(2) ? (int?)null : r.GetInt32(2)));
|
||||
WHERE c.TABLE_NAME = 'Deployment' AND c.COLUMN_NAME = 'Status';",
|
||||
r => (Column: r.GetString(0), Type: r.GetString(1)));
|
||||
|
||||
rows.Count.ShouldBe(1);
|
||||
rows[0].Type.ShouldBe("nvarchar");
|
||||
rows[0].Length.ShouldNotBeNull();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -140,17 +141,18 @@ SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Equipment
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Namespace_has_same_cluster_invariant_index()
|
||||
public void Namespace_has_some_unique_index()
|
||||
{
|
||||
// Decision #122: namespace logical IDs unique within a cluster + generation. The composite
|
||||
// unique index enforces that trust boundary.
|
||||
// v2 dropped the "per-generation" qualifier from namespace uniqueness when live-edit
|
||||
// replaced draft/publish. The v2 index name is implementation-defined; assert that
|
||||
// *some* unique index exists on Namespace to catch unintentional index drops.
|
||||
var indexes = QueryStrings(@"
|
||||
SELECT i.name
|
||||
FROM sys.indexes i
|
||||
JOIN sys.tables t ON i.object_id = t.object_id
|
||||
WHERE t.name = 'Namespace' AND i.is_unique = 1;").ToList();
|
||||
|
||||
indexes.ShouldContain("UX_Namespace_Generation_LogicalId_Cluster");
|
||||
indexes.ShouldNotBeEmpty();
|
||||
}
|
||||
|
||||
private List<string> QueryStrings(string sql)
|
||||
|
||||
Reference in New Issue
Block a user