github.com/RevenueMonster/sqlike@v1.0.6/types/set_test.go (about) 1 package types 2 3 import ( 4 "reflect" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestSet(t *testing.T) { 11 12 set := Set{"a", "b", "c", "d"} 13 14 t.Run("DataType", func(it *testing.T) { 15 col := set.DataType(nil, field{ 16 name: "Set", 17 t: reflect.TypeOf(set), 18 null: true, 19 }) 20 21 require.Equal(it, "Set", col.Name) 22 require.Equal(it, "SET", col.DataType) 23 require.Equal(it, "SET('')", col.Type) 24 require.Nil(it, col.DefaultValue) 25 require.True(it, col.Nullable) 26 require.Equal(it, "utf8mb4", *col.Charset) 27 require.Equal(it, "utf8mb4_0900_ai_ci", *col.Collation) 28 }) 29 30 t.Run("driver.Valuer with nil value", func(it *testing.T) { 31 var set Set 32 v, err := set.Value() 33 require.NoError(it, err) 34 require.Nil(it, v) 35 }) 36 37 t.Run("driver.Valuer with value", func(it *testing.T) { 38 v, err := set.Value() 39 require.NoError(it, err) 40 require.Equal(it, "a,b,c,d", v) 41 }) 42 43 t.Run("Scan Set with sql.Scanner", func(it *testing.T) { 44 var set2 Set 45 err := set2.Scan("a,b,c,d") 46 require.NoError(it, err) 47 require.Equal(it, set, set2) 48 49 set2 = Set{} 50 err = set2.Scan([]byte("a,b,c,d")) 51 require.NoError(t, err) 52 require.Equal(t, set, set2) 53 }) 54 55 }