github.com/RichardKnop/go-oauth2-server@v1.0.5-0.20201019163316-d02a401490d0/util/sql_test.go (about) 1 package util_test 2 3 import ( 4 "database/sql" 5 "database/sql/driver" 6 "testing" 7 "time" 8 9 "github.com/RichardKnop/go-oauth2-server/util" 10 "github.com/lib/pq" 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func TestIntOrNull(t *testing.T) { 15 nullInt := util.PositiveIntOrNull(1) 16 assert.True(t, nullInt.Valid) 17 18 value, err := nullInt.Value() 19 assert.Nil(t, err) 20 assert.Equal(t, int64(1), value) 21 } 22 23 func TestPositiveIntOrNull(t *testing.T) { 24 var ( 25 nullInt sql.NullInt64 26 value driver.Value 27 err error 28 ) 29 30 // When the number is negative 31 nullInt = util.PositiveIntOrNull(-1) 32 33 // nullInt.Valid should be false 34 assert.False(t, nullInt.Valid) 35 36 // nullInt.Value() should return nil 37 value, err = nullInt.Value() 38 assert.Nil(t, err) 39 assert.Nil(t, value) 40 41 // When the number is greater than zero 42 nullInt = util.PositiveIntOrNull(1) 43 44 // nullInt.Valid should be true 45 assert.True(t, nullInt.Valid) 46 47 // nullInt.Value() should return the integer 48 value, err = nullInt.Value() 49 assert.Nil(t, err) 50 assert.Equal(t, int64(1), value) 51 } 52 53 func TestFloatOrNull(t *testing.T) { 54 nullFloat := util.FloatOrNull(1.5) 55 assert.True(t, nullFloat.Valid) 56 57 value, err := nullFloat.Value() 58 assert.Nil(t, err) 59 assert.Equal(t, 1.5, value) 60 } 61 62 func TestPositiveFloatOrNull(t *testing.T) { 63 var ( 64 nullFloat sql.NullFloat64 65 value driver.Value 66 err error 67 ) 68 69 // When the number is negative 70 nullFloat = util.PositiveFloatOrNull(-0.5) 71 72 // nullFloat.Valid should be false 73 assert.False(t, nullFloat.Valid) 74 75 // nullFloat.Value() should return nil 76 value, err = nullFloat.Value() 77 assert.Nil(t, err) 78 assert.Nil(t, value) 79 80 // When the number is greater than zero 81 nullFloat = util.PositiveFloatOrNull(1.5) 82 83 // nullFloat.Valid should be true 84 assert.True(t, nullFloat.Valid) 85 86 // nullFloat.Value() should return the integer 87 value, err = nullFloat.Value() 88 assert.Nil(t, err) 89 assert.Equal(t, 1.5, value) 90 } 91 92 func TestStringOrNull(t *testing.T) { 93 var ( 94 nullString sql.NullString 95 value driver.Value 96 err error 97 ) 98 99 // When the string is empty 100 nullString = util.StringOrNull("") 101 102 // nullString.Valid should be false 103 assert.False(t, nullString.Valid) 104 105 // nullString.Value() should return nil 106 value, err = nullString.Value() 107 assert.Nil(t, err) 108 assert.Nil(t, value) 109 110 // When the string is not empty 111 nullString = util.StringOrNull("foo") 112 113 // nullString.Valid should be true 114 assert.True(t, nullString.Valid) 115 116 // nullString.Value() should return the string 117 value, err = nullString.Value() 118 assert.Nil(t, err) 119 assert.Equal(t, "foo", value) 120 } 121 122 func TestTimeOrNull(t *testing.T) { 123 var ( 124 nullTime pq.NullTime 125 value driver.Value 126 err error 127 ) 128 129 // When the time is nil 130 nullTime = util.TimeOrNull(nil) 131 132 // nullTime.Valid should be false 133 assert.False(t, nullTime.Valid) 134 135 // nullInt.Value() should return nil 136 value, err = nullTime.Value() 137 assert.Nil(t, err) 138 assert.Nil(t, value) 139 140 // When the time is time.Time instance 141 now := time.Now() 142 nullTime = util.TimeOrNull(&now) 143 144 // nullTime.Valid should be true 145 assert.True(t, nullTime.Valid) 146 147 // nullTime.Value() should return the time.Time 148 value, err = nullTime.Value() 149 assert.Nil(t, err) 150 assert.Equal(t, now, value) 151 }