-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathfilter_test.go
102 lines (93 loc) · 2.32 KB
/
filter_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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package rqp
import (
"net/url"
"testing"
"github.com/stretchr/testify/assert"
)
func Test_Where(t *testing.T) {
t.Run("ErrUnknownMethod", func(t *testing.T) {
filter := Filter{
Key: "id[not]",
Name: "id",
Method: NOT,
}
_, err := filter.Where()
assert.Equal(t, err, ErrUnknownMethod)
filter = Filter{
Key: "id[fake]",
Name: "id",
Method: "fake",
}
_, err = filter.Where()
assert.Equal(t, err, ErrUnknownMethod)
})
}
func Test_Args(t *testing.T) {
t.Run("ErrUnknownMethod", func(t *testing.T) {
filter := Filter{
Key: "id[not]",
Name: "id",
Method: NOT,
Value: "id",
}
_, err := filter.Args()
assert.Equal(t, err, ErrUnknownMethod)
filter = Filter{
Key: "id[fake]",
Name: "id",
Method: "fake",
}
_, err = filter.Args()
assert.Equal(t, err, ErrUnknownMethod)
})
}
func Test_RemoveOrEntries(t *testing.T) {
type testCase struct {
name string
urlQuery string
filterToRemove string
wantWhere string
}
tests := []testCase{
{
name: "should fix OR statements after removing EndOR filter with 2 items",
urlQuery: "?test1[eq]=test10|test2[eq]=test10",
filterToRemove: "test2",
wantWhere: " WHERE test1 = ?",
},
{
name: "should fix OR statements after removing StartOR filter with 2 items",
urlQuery: "?test1[eq]=test10|test2[eq]=test10",
filterToRemove: "test1",
wantWhere: " WHERE test2 = ?",
},
{
name: "should fix OR statements after removing StartOR filter with 3 items",
urlQuery: "?test1[eq]=test10|test2[eq]=test10|test3[eq]=test10",
filterToRemove: "test1",
wantWhere: " WHERE (test2 = ? OR test3 = ?)",
},
{
name: "should fix OR statements after removing EndOR filter with 3 items",
urlQuery: "?test1[eq]=test10|test2[eq]=test10|test3[eq]=test10",
filterToRemove: "test3",
wantWhere: " WHERE (test1 = ? OR test2 = ?)",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// Arrange
URL, _ := url.Parse(tt.urlQuery)
q := NewQV(nil, Validations{
"test1": nil,
"test2": nil,
"test3": nil,
})
_ = q.SetUrlQuery(URL.Query()).Parse()
// Act
_ = q.RemoveFilter(tt.filterToRemove)
// Assert
assert.Equal(t, tt.wantWhere, q.WHERE())
})
}
}