using Admin.NET.Core; using Admin.NET.Plugin.AiDOP.Infrastructure; using Admin.NET.Plugin.AiDOP.Entity; using Xunit; namespace Admin.NET.Plugin.AiDOP.Tests; public class AidopTenantMigrationTests { [Fact] public void AtomicEntity_IsExcludedFromGlobalCodeFirst() { var ignore = typeof(AdoSmartOpsKpiAtomicDay) .GetCustomAttributes(typeof(IgnoreTableAttribute), inherit: false); Assert.Single(ignore); } [Fact] public void AtomicDefaults_ReadySchemaDoesNotGenerateAlter() { var columns = ReadyColumns(); var clauses = AidopTenantMigration.BuildKpiAtomicDefaultAlterClauses(columns); Assert.Empty(clauses); } [Fact] public void AtomicDefaults_OnlyRepairsDriftedColumns() { var columns = ReadyColumns(); columns.Single(x => x.Name == "grain").DefaultValue = null; var clauses = AidopTenantMigration.BuildKpiAtomicDefaultAlterClauses(columns); var clause = Assert.Single(clauses); Assert.Contains("MODIFY grain", clause); } private static List ReadyColumns() { var emptyDefaultColumns = new[] { "customer_code", "product_code", "order_no", "production_line", "supplier_code", "material_code", "po_no", "warehouse_code", "work_order_no", "equipment_code", "outbound_no" }; var columns = emptyDefaultColumns .Select(name => new KpiAtomicColumnState { Name = name, DefaultValue = "", IsNullable = "NO" }) .ToList(); columns.Add(new KpiAtomicColumnState { Name = "grain", DefaultValue = "day", IsNullable = "NO" }); columns.Add(new KpiAtomicColumnState { Name = "is_deleted", DefaultValue = "0", IsNullable = "NO" }); return columns; } }