* Add lint/format checks to the Gitea release workflow and Makefile (targets: vet, fmt, fmt-check, staticcheck, govulncheck, check) * Switch .golangci.json formatter from gofmt to gofumpt (extra.group-params) * Bump golang.org/x/text 0.37.0 -> 0.39.0 for GO-2026-5970; re-vendor * Fix staticcheck S1011 in pkg/diff; drop unused pgsql writer helpers * Fix gocritic unnamedResult (pkg/diff) and rangeValCopy (pkg/pgsql) * Apply gofumpt + goimports formatting across the tree
88 lines
2.5 KiB
Go
88 lines
2.5 KiB
Go
package mssql
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"git.warky.dev/wdevs/relspecgo/pkg/mssql"
|
|
"git.warky.dev/wdevs/relspecgo/pkg/readers"
|
|
)
|
|
|
|
// TestMapDataType tests MSSQL type mapping to canonical types
|
|
func TestMapDataType(t *testing.T) {
|
|
reader := NewReader(&readers.ReaderOptions{})
|
|
|
|
tests := []struct {
|
|
name string
|
|
mssqlType string
|
|
expectedType string
|
|
}{
|
|
{"INT to int", "INT", "int"},
|
|
{"BIGINT to int64", "BIGINT", "int64"},
|
|
{"BIT to bool", "BIT", "bool"},
|
|
{"NVARCHAR to string", "NVARCHAR(255)", "string"},
|
|
{"DATETIME2 to timestamp", "DATETIME2", "timestamp"},
|
|
{"DATETIMEOFFSET to timestamptz", "DATETIMEOFFSET", "timestamptz"},
|
|
{"UNIQUEIDENTIFIER to uuid", "UNIQUEIDENTIFIER", "uuid"},
|
|
{"FLOAT to float64", "FLOAT", "float64"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
result := reader.mapDataType(tt.mssqlType)
|
|
assert.Equal(t, tt.expectedType, result)
|
|
})
|
|
}
|
|
}
|
|
|
|
// TestConvertCanonicalToMSSQL tests canonical to MSSQL type conversion
|
|
func TestConvertCanonicalToMSSQL(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
canonicalType string
|
|
expectedMSSQL string
|
|
}{
|
|
{"int to INT", "int", "INT"},
|
|
{"int64 to BIGINT", "int64", "BIGINT"},
|
|
{"bool to BIT", "bool", "BIT"},
|
|
{"string to NVARCHAR(255)", "string", "NVARCHAR(255)"},
|
|
{"text to NVARCHAR(MAX)", "text", "NVARCHAR(MAX)"},
|
|
{"timestamp to DATETIME2", "timestamp", "DATETIME2"},
|
|
{"timestamptz to DATETIMEOFFSET", "timestamptz", "DATETIMEOFFSET"},
|
|
{"uuid to UNIQUEIDENTIFIER", "uuid", "UNIQUEIDENTIFIER"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
result := mssql.ConvertCanonicalToMSSQL(tt.canonicalType)
|
|
assert.Equal(t, tt.expectedMSSQL, result)
|
|
})
|
|
}
|
|
}
|
|
|
|
// TestConvertMSSQLToCanonical tests MSSQL to canonical type conversion
|
|
func TestConvertMSSQLToCanonical(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
mssqlType string
|
|
expectedType string
|
|
}{
|
|
{"INT to int", "INT", "int"},
|
|
{"BIGINT to int64", "BIGINT", "int64"},
|
|
{"BIT to bool", "BIT", "bool"},
|
|
{"NVARCHAR with params", "NVARCHAR(255)", "string"},
|
|
{"DATETIME2 to timestamp", "DATETIME2", "timestamp"},
|
|
{"DATETIMEOFFSET to timestamptz", "DATETIMEOFFSET", "timestamptz"},
|
|
{"UNIQUEIDENTIFIER to uuid", "UNIQUEIDENTIFIER", "uuid"},
|
|
{"VARBINARY to bytea", "VARBINARY(MAX)", "bytea"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
result := mssql.ConvertMSSQLToCanonical(tt.mssqlType)
|
|
assert.Equal(t, tt.expectedType, result)
|
|
})
|
|
}
|
|
}
|