-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsqlbuilder_orderby_test.go
123 lines (104 loc) · 2.96 KB
/
sqlbuilder_orderby_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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package sqle
import (
"testing"
"github.com/iancoleman/strcase"
"github.com/stretchr/testify/require"
)
func TestOrderByBuilder(t *testing.T) {
tests := []struct {
name string
build func() *Builder
wanted string
}{
{
name: "no_safe_columns_should_work",
build: func() *Builder {
b := New("SELECT * FROM users")
b.Order().
ByDesc("created_at").
ByAsc("id", "name").
ByAsc("updated_at")
return b
},
wanted: "SELECT * FROM users ORDER BY `created_at` DESC, `id` ASC, `name` ASC, `updated_at` ASC",
},
{
name: "safe_columns_should_work",
build: func() *Builder {
b := New("SELECT * FROM users")
b.Order(WithAllow("id", "created_at", "updated_at")).
ByAsc("id", "name").
ByDesc("created_at", "unsafe_input").
ByAsc("updated_at")
return b
},
wanted: "SELECT * FROM users ORDER BY `id` ASC, `created_at` DESC, `updated_at` ASC",
},
{
name: "order_by_raw_sql_should_work",
build: func() *Builder {
b := New("SELECT * FROM users")
b.Order(WithAllow("id", "created_at", "updated_at", "age")).
By("created_at desc, id, name asc, updated_at asc, age invalid_by, unsafe_asc, unsafe_desc desc")
return b
},
wanted: "SELECT * FROM users ORDER BY `created_at` DESC, `id` ASC, `updated_at` ASC",
},
{
name: "with_order_by_should_work",
build: func() *Builder {
b := New("SELECT * FROM users")
ob := NewOrderBy(WithAllow("id", "created_at", "updated_at", "age"))
ob.By("created_at desc, id, name asc, updated_at asc, age invalid_by, unsafe_asc, unsafe_desc desc")
b.WithOrderBy(ob)
return b
},
wanted: "SELECT * FROM users ORDER BY `created_at` DESC, `id` ASC, `updated_at` ASC",
},
{
name: "with_nil_order_by_should_work",
build: func() *Builder {
b := New("SELECT * FROM users")
b.Order(WithAllow("id", "created_at", "updated_at")).
ByAsc("id", "name").
ByDesc("created_at", "unsafe_input").
ByAsc("updated_at")
b.WithOrderBy(nil)
return b
},
wanted: "SELECT * FROM users ORDER BY `id` ASC, `created_at` DESC, `updated_at` ASC",
},
{
name: "with_empty_order_by_should_work",
build: func() *Builder {
b := New("SELECT * FROM users")
ob := NewOrderBy(WithAllow("age")).
ByAsc("id", "name").
ByDesc("created_at", "unsafe_input").
ByAsc("updated_at")
b.WithOrderBy(ob)
return b
},
wanted: "SELECT * FROM users",
},
{
name: "with_to_name_order_by_should_work",
build: func() *Builder {
b := New("SELECT * FROM users")
ob := NewOrderBy(WithToName(strcase.ToSnake), WithAllow("created_at")).
ByAsc("id", "name").
ByDesc("createdAt", "unsafe_input").
ByAsc("updated_at")
b.WithOrderBy(ob)
return b
},
wanted: "SELECT * FROM users ORDER BY `created_at` DESC",
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
actual := test.build().String()
require.Equal(t, test.wanted, actual)
})
}
}