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  }