forked from timsolov/rest-query-parser
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexternal_test.go
65 lines (53 loc) · 1.71 KB
/
external_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package rqp
import (
"database/sql"
"database/sql/driver"
"testing"
"github.com/stretchr/testify/assert"
)
type MyValuer struct{}
func (v MyValuer) Value() (driver.Value, error) {
return "NULL", nil
}
func Test_in(t *testing.T) {
t.Run("ALL OK", func(t *testing.T) {
q, args, err := in("id IN (?)", []string{"1", "2"})
assert.NoError(t, err)
assert.Equal(t, "id IN (?, ?)", q)
assert.Equal(t, []interface{}{"1", "2"}, args)
})
t.Run("Valuer", func(t *testing.T) {
q, args, err := in("id IN (?)", []sql.NullString{{String: "1", Valid: true}, {String: "2"}})
assert.NoError(t, err)
assert.Equal(t, "id IN (?, ?)", q)
assert.Equal(t, []interface{}{sql.NullString{String: "1", Valid: true}, sql.NullString{String: "2", Valid: false}}, args)
})
t.Run("MyValuer", func(t *testing.T) {
q, args, err := in("id IN (?)", MyValuer{})
assert.NoError(t, err)
assert.Equal(t, "id IN (?)", q)
assert.Equal(t, []interface{}{MyValuer{}}, args)
})
t.Run("More arguments", func(t *testing.T) {
_, _, err := in("id IN (?), id2 = ?", []string{"1", "2"})
assert.EqualError(t, err, "number of bindVars exceeds arguments")
})
t.Run("Less arguments", func(t *testing.T) {
s := "2"
sPtr := &s
_, _, err := in("id = ?", []string{"1", "2"}, sPtr)
assert.EqualError(t, err, "number of bindVars less than number arguments")
})
t.Run("No slice", func(t *testing.T) {
_, _, err := in("id IN (?)", "1")
assert.NoError(t, err)
})
t.Run("Empty slice", func(t *testing.T) {
_, _, err := in("id IN (?)", []string{})
assert.Error(t, err, "empty slice passed to 'in' query")
})
t.Run("Skip not slice", func(t *testing.T) {
_, _, err := in("id IN (?), id2 = ?", "1", []interface{}{"2"})
assert.NoError(t, err)
})
}