-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfilter_test.go
More file actions
127 lines (123 loc) · 3.65 KB
/
Copy pathfilter_test.go
File metadata and controls
127 lines (123 loc) · 3.65 KB
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package go_fluxy
import (
"testing"
)
func TestFilterBuilder(t *testing.T) {
testCases := []struct {
name string
builder func(*FilterBuilder)
expected string
}{
{
name: "single filter",
builder: func(fb *FilterBuilder) {
fb.AddFilter("field1", "value1")
},
expected: `r.field1 = "value1"`,
},
{
name: "multiple filters with AND condition",
builder: func(fb *FilterBuilder) {
fb.AddFilter("field1", "value1").And().
AddFilter("field2", "value2")
},
expected: `r.field1 = "value1" and r.field2 = "value2"`,
},
{
name: "multiple filters with OR condition",
builder: func(fb *FilterBuilder) {
fb.AddFilter("field1", "value1").Or().
AddFilter("field2", "value2")
},
expected: `r.field1 = "value1" or r.field2 = "value2"`,
},
{
name: "complete filter",
builder: func(fb *FilterBuilder) {
fb.AddCompleteFilter(`r.field1 = "value1" and r.field2 = "value2"`)
},
expected: `(r.field1 = "value1" and r.field2 = "value2")`,
},
{
name: "filters with mixed conditions",
builder: func(fb *FilterBuilder) {
fb.AddFilter("field1", "value1").And().
AddFilter("field2", "value2").Or().
AddFilter("field3", "value3").And().
AddFilter("field4", "value4")
},
expected: `r.field1 = "value1" and r.field2 = "value2" or r.field3 = "value3" and r.field4 = "value4"`,
},
{
name: "filters with different operators",
builder: func(fb *FilterBuilder) {
fb.AddFilter("field1", "value1").Gt().And().
AddFilter("field2", "value2").Lt().Or().
AddFilter("field3", "value3").Neq()
},
expected: `r.field1 > "value1" and r.field2 < "value2" or r.field3 != "value3"`,
},
{
name: "larger filter expression",
builder: func(fb *FilterBuilder) {
fb.AddFilter("field1", "value1").And().
AddFilter("field2", "value2").And().
AddFilter("field3", "value3").Gt().Or().
AddFilter("field4", "value4").Neq().And().
AddFilter("field5", "value5").Lte()
},
expected: `r.field1 = "value1" and r.field2 = "value2" and r.field3 > "value3" or r.field4 != "value4" and r.field5 <= "value5"`,
},
{
name: "Grouped filters",
builder: func(fb *FilterBuilder) {
fb.AddFilter("field1", "value1").Eq().
And().
AddFilter("field2", "value2").Gt().
Or().
StartGroup().
AddFilter("field3", "value3").Lt().
And().
AddFilter("field4", "value4").Neq().
EndGroup()
},
expected: `r.field1 = "value1" and r.field2 > "value2" or (r.field3 < "value3" and r.field4 != "value4")`,
},
{
name: "Complete filters",
builder: func(fb *FilterBuilder) {
fb.AddCompleteFilter(`r.field1 = "value1" and r.field2 > "value2"`).
Or().
AddCompleteFilter(`r.field3 < "value3" and r.field4 != "value4"`)
},
expected: `(r.field1 = "value1" and r.field2 > "value2") or (r.field3 < "value3" and r.field4 != "value4")`,
},
{
name: "Combination of all",
builder: func(fb *FilterBuilder) {
fb.AddFilter("field1", "value1").Eq().
And().
AddFilter("field2", "value2").Gt().
Or().
StartGroup().
AddFilter("field3", "value3").Lt().
And().
AddFilter("field4", "value4").Neq().
EndGroup().
Or().
AddCompleteFilter(`r.field5 = "value5" and r.field6 > "value6"`)
},
expected: `r.field1 = "value1" and r.field2 > "value2" or (r.field3 < "value3" and r.field4 != "value4") or (r.field5 = "value5" and r.field6 > "value6")`,
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
fb := NewFilterBuilder()
tc.builder(fb)
filter := fb.Build()
if filter != tc.expected {
t.Errorf("Expected filter: %s, got: %s", tc.expected, filter)
}
})
}
}