Files
relspecgo/pkg/merge/merge_regression_test.go
T
warkanum 495a21b67b test: expand coverage across readers, writers, cmd, ui, diff and merge
Implements tests/_plans and previously deferred packages; updates plan
README with new coverage numbers.
2026-10-03 21:33:59 +02:00

59 lines
1.8 KiB
Go

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")
}
}