package merge import ( "testing" "git.warky.dev/wdevs/relspecgo/pkg/models" ) func sourceWithRelationship() *models.Database { db := models.InitDatabase("src") s := models.InitSchema("sales") orders := models.InitTable("orders", "sales") orders.Tablespace = "fast" orders.GUID = "guid-1" orders.Relationships["fk_cust"] = &models.Relationship{ Name: "fk_cust", FromTable: "orders", ToTable: "customers", FromColumns: []string{"cust_id"}, ToColumns: []string{"id"}, } s.Tables = append(s.Tables, orders, models.InitTable("Audit", "sales")) db.Schemas = append(db.Schemas, s) return db } func TestCloneTable_CopiesRelationshipsTablespaceGUID(t *testing.T) { src := sourceWithRelationship() target := models.InitDatabase("tgt") MergeDatabases(target, src, nil) got := target.Schemas[0].Tables[0] if got.Tablespace != "fast" || got.GUID != "guid-1" { t.Errorf("tablespace/guid lost: %+v", got) } rel := got.Relationships["fk_cust"] if rel == nil || rel.ToTable != "customers" { t.Fatalf("relationship lost: %+v", got.Relationships) } if rel == src.Schemas[0].Tables[0].Relationships["fk_cust"] { t.Error("relationship must be deep-copied") } rel.FromColumns[0] = "changed" if src.Schemas[0].Tables[0].Relationships["fk_cust"].FromColumns[0] != "cust_id" { t.Error("relationship columns shared with source") } } func TestMerge_SkipTablesAppliesToNewSchemas(t *testing.T) { src := sourceWithRelationship() target := models.InitDatabase("tgt") MergeDatabases(target, src, &MergeOptions{SkipTableNames: map[string]bool{"audit": true}}) tables := target.Schemas[0].Tables if len(tables) != 1 || tables[0].Name != "orders" { t.Errorf("skipped table copied into new schema: %+v", tables) } if len(src.Schemas[0].Tables) != 2 { t.Error("source must not be modified") } }