package bun import ( "strings" "testing" "git.warky.dev/wdevs/relspecgo/pkg/models" ) func TestBuildBunTag_IdentityColumn(t *testing.T) { mapper := NewTypeMapper("", "") build := func(pk bool, identity bool, generation string) *models.Column { col := models.InitColumn("id", "users", "public") col.Type = "bigint" col.IsPrimaryKey = pk col.Identity = identity col.IdentityGeneration = generation return col } tests := []struct { name string column *models.Column wantFlag bool wantMarker bool }{ {"always identity non-pk is write-blocked", build(false, true, "ALWAYS"), true, true}, {"always identity pk is only marked", build(true, true, "ALWAYS"), false, true}, {"by default identity is writable", build(false, true, "BY DEFAULT"), false, false}, {"non-identity is untouched", build(false, false, ""), false, false}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { tag := mapper.BuildBunTag(tt.column, nil) has := func(s string) bool { for _, p := range strings.Split(tag, ",") { if p == s { return true } } return false } if has("scanonly") != tt.wantFlag || has("identity") != tt.wantMarker { t.Errorf("tag %q: scanonly/identity = %v/%v, want %v/%v", tag, has("scanonly"), has("identity"), tt.wantFlag, tt.wantMarker) } }) } }