package mssql import ( "testing" "git.warky.dev/wdevs/relspecgo/pkg/mssql" "git.warky.dev/wdevs/relspecgo/pkg/readers" "github.com/stretchr/testify/assert" ) // 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) }) } }