Files
relspecgo/pkg/writers/writer_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

124 lines
2.7 KiB
Go

package writers
import "testing"
func TestQuoteDefaultValue(t *testing.T) {
t.Parallel()
tests := []struct {
name string
value string
sqlType string
want string
}{
{
name: "text default is quoted",
value: "active",
sqlType: "text",
want: "'active'",
},
{
name: "array default from bare literal is quoted once",
value: "{}",
sqlType: "text[]",
want: "'{}'",
},
{
name: "array default from quoted literal is preserved",
value: "'{}'",
sqlType: "text[]",
want: "'{}'",
},
{
name: "array default from double quoted literal is normalized",
value: "''{}''",
sqlType: "text[]",
want: "'{}'",
},
{
name: "function default is left alone",
value: "now()",
sqlType: "timestamptz",
want: "now()",
},
{
name: "bare keyword default CURRENT_DATE is not quoted",
value: "CURRENT_DATE",
sqlType: "date",
want: "CURRENT_DATE",
},
{
name: "bare keyword default is case insensitive",
value: "current_timestamp",
sqlType: "timestamptz",
want: "current_timestamp",
},
{
name: "bare keyword default localtime is not quoted",
value: "LOCALTIME",
sqlType: "time",
want: "LOCALTIME",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := QuoteDefaultValue(tt.value, tt.sqlType)
if got != tt.want {
t.Fatalf("QuoteDefaultValue(%q, %q) = %q, want %q", tt.value, tt.sqlType, got, tt.want)
}
})
}
}
func TestQualifiedTableName(t *testing.T) {
tests := []struct {
schema, table string
flatten bool
want string
}{
{"", "t", false, "t"},
{"", "t", true, "t"},
{"s", "t", false, "s.t"},
{"s", "t", true, "s_t"},
}
for _, tt := range tests {
if got := QualifiedTableName(tt.schema, tt.table, tt.flatten); got != tt.want {
t.Errorf("%+v: got %q", tt, got)
}
}
}
func TestSanitizeFilename(t *testing.T) {
tests := []struct{ in, want string }{
{`"users"`, "users"},
{`'users'`, "users"},
{"`users`", "users"},
{"users [note: 'x']", "users"},
{"a/b\\c:d*e?f<g>h|i", "a_b_c_d_e_f_g_h_i"},
{"__a__b__", "a_b"},
{" spaced ", "spaced"},
{"ctl\x01char", "ctl_char"},
}
for _, tt := range tests {
if got := SanitizeFilename(tt.in); got != tt.want {
t.Errorf("%q: got %q want %q", tt.in, got, tt.want)
}
}
}
func TestSanitizeStructTagValue(t *testing.T) {
tests := []struct{ in, want string }{
{"name", "name"},
{"`na\"me'`", "name"},
{"users [note: 'x']", "users"},
{"tags[]", "tags[]"},
{" padded ", "padded"},
}
for _, tt := range tests {
if got := SanitizeStructTagValue(tt.in); got != tt.want {
t.Errorf("%q: got %q want %q", tt.in, got, tt.want)
}
}
}