| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- using Admin.NET.Plugin.AiDOP.DataPlatform.Schema;
- using Xunit;
- namespace Admin.NET.Plugin.AiDOP.Tests.DataPlatform;
- public class MdpSchemaAlignerTests
- {
- private const string Create = """
- CREATE TABLE IF NOT EXISTS mdp_std_demo (
- id BIGINT AUTO_INCREMENT PRIMARY KEY,
- tenant_id BIGINT NOT NULL,
- approved_flag TINYINT NOT NULL DEFAULT 1,
- UNIQUE KEY uk_demo (tenant_id),
- KEY idx_demo (approved_flag)
- ) ENGINE=InnoDB
- """;
- [Fact]
- public void MissingTable_PlansCreateOnly()
- {
- var planned = MdpSchemaAligner.Plan(Create, SchemaSnapshot.Missing);
- Assert.Single(planned);
- Assert.StartsWith("CREATE TABLE", planned[0], StringComparison.OrdinalIgnoreCase);
- Assert.DoesNotContain("DROP", planned[0], StringComparison.OrdinalIgnoreCase);
- }
- [Fact]
- public void MissingColumnAndIndex_PlansAdditiveAlterOnly()
- {
- var snapshot = new SchemaSnapshot(true, ["id", "tenant_id"], ["PRIMARY"]);
- var planned = MdpSchemaAligner.Plan(Create, snapshot);
- Assert.Equal(3, planned.Count);
- Assert.Contains(planned, x => x.Contains("ADD COLUMN approved_flag", StringComparison.OrdinalIgnoreCase));
- Assert.Contains(planned, x => x.Contains("ADD UNIQUE KEY `uk_demo`", StringComparison.OrdinalIgnoreCase));
- Assert.Contains(planned, x => x.Contains("ADD KEY `idx_demo`", StringComparison.OrdinalIgnoreCase));
- Assert.DoesNotContain(planned, x => x.Contains("DROP", StringComparison.OrdinalIgnoreCase));
- }
- [Fact]
- public void ReadyTable_PlansNothing()
- {
- var snapshot = new SchemaSnapshot(
- true,
- ["id", "tenant_id", "approved_flag"],
- ["PRIMARY", "uk_demo", "idx_demo"]);
- Assert.Empty(MdpSchemaAligner.Plan(Create, snapshot));
- }
- [Fact]
- public void LikeTable_SkippedWhenPresent()
- {
- const string like = "CREATE TABLE IF NOT EXISTS mdp_stg_s4_shipment LIKE mdp_stg_s4_iqc";
- Assert.Empty(MdpSchemaAligner.Plan(like, new SchemaSnapshot(true, [], [])));
- var created = MdpSchemaAligner.Plan(like, SchemaSnapshot.Missing);
- Assert.Single(created);
- Assert.Contains("LIKE", created[0], StringComparison.OrdinalIgnoreCase);
- }
- [Fact]
- public void NonNeutralTable_IsLeftUntouched()
- {
- const string sql = "CREATE TABLE IF NOT EXISTS qms_demo (id BIGINT)";
- var planned = MdpSchemaAligner.Plan(sql, SchemaSnapshot.Missing);
- Assert.Equal([sql], planned);
- }
- }
|