@@ -2,139 +2,145 @@ import test from "ava"
2
2
import dedent from "dedent"
3
3
import { spreadAnd , spreadInsert , spreadUpdate , sql , QueryConfig } from "../src/pg"
4
4
5
+ function matches ( t : any , actual : QueryConfig , expectedText : string , expectedValues : any [ ] ) {
6
+ t . is ( dedent ( actual . text ) , dedent ( expectedText ) )
7
+ t . deepEqual ( actual . values , expectedValues )
8
+ }
9
+
5
10
const dedentQueryConfig = ( queryConfig : QueryConfig ) => ( {
6
11
...queryConfig ,
7
12
text : dedent ( queryConfig . text )
8
13
} )
9
14
10
15
test ( "sql template tag creates a valid postgres query" , t => {
11
- t . deepEqual ( sql `SELECT email FROM users WHERE id = ${ 1 } ` , {
12
- text : "SELECT email FROM users WHERE id = $1" ,
13
- values : [ 1 ]
14
- } )
16
+ matches (
17
+ t ,
18
+ sql `SELECT email FROM users WHERE id = ${ 1 } ` ,
19
+ "SELECT email FROM users WHERE id = $1" ,
20
+ [ 1 ]
21
+ )
15
22
} )
16
23
17
24
test ( "sql.safe() works" , t => {
18
- t . deepEqual ( sql `SELECT email FROM users WHERE id = ${ sql . safe ( 1 ) } ` , {
19
- text : "SELECT email FROM users WHERE id = $1" ,
20
- values : [ 1 ]
21
- } )
25
+ matches (
26
+ t ,
27
+ sql `SELECT email FROM users WHERE id = ${ sql . safe ( 1 ) } ` ,
28
+ "SELECT email FROM users WHERE id = $1" ,
29
+ [ 1 ]
30
+ )
31
+
22
32
t . deepEqual (
23
33
`SELECT email FROM users WHERE id = ${ sql . safe ( 1 ) } ` ,
24
34
`SELECT email FROM users WHERE id = [object Object]`
25
35
)
26
36
} )
27
37
28
38
test ( "sql.raw() works" , t => {
29
- t . deepEqual ( sql `SELECT email FROM users WHERE id = ${ sql . raw ( "1" ) } ` , {
30
- text : "SELECT email FROM users WHERE id = 1" ,
31
- values : [ ]
32
- } )
39
+ matches (
40
+ t ,
41
+ sql `SELECT email FROM users WHERE id = ${ sql . raw ( "1" ) } ` ,
42
+ "SELECT email FROM users WHERE id = 1" ,
43
+ [ ]
44
+ )
33
45
} )
34
46
35
47
test ( "spreadAnd() works" , t => {
36
- t . deepEqual (
37
- dedentQueryConfig ( sql `
38
- SELECT * FROM users WHERE ${ spreadAnd ( {
39
- name : "Hugo" ,
40
- age : 20 ,
41
- email : sql . raw ( "'foo@example.com'" ) ,
42
- foo : undefined
43
- } ) }
44
- ` ) ,
45
- dedentQueryConfig ( {
46
- text : `SELECT * FROM users WHERE ("name" = $1 AND "age" = $2 AND "email" = 'foo@example.com')` ,
47
- values : [ "Hugo" , 20 ]
48
- } )
48
+ matches (
49
+ t ,
50
+ sql `
51
+ SELECT * FROM users WHERE ${ spreadAnd ( {
52
+ name : "Hugo" ,
53
+ age : 20 ,
54
+ email : sql . raw ( "'foo@example.com'" ) ,
55
+ foo : undefined
56
+ } ) }
57
+ ` ,
58
+ `SELECT * FROM users WHERE ("name" = $1 AND "age" = $2 AND "email" = 'foo@example.com')` ,
59
+ [ "Hugo" , 20 ]
49
60
)
50
61
} )
51
62
52
63
test ( "spreadInsert() works" , t => {
53
- t . deepEqual (
54
- dedentQueryConfig ( sql `
55
- INSERT INTO users ${ spreadInsert ( {
56
- name : "Hugo" ,
57
- age : 20 ,
58
- created_at : sql . raw ( "NOW()" ) ,
59
- foo : undefined
60
- } ) } RETURNING *
61
- ` ) ,
62
- dedentQueryConfig ( {
63
- text : `INSERT INTO users ("name", "age", "created_at") VALUES ($1, $2, NOW()) RETURNING *` ,
64
- values : [ "Hugo" , 20 ]
65
- } )
66
- )
67
- } )
68
-
69
- test ( "spreadInsert() works with multiple inserts" , t => {
70
- t . deepEqual (
71
- dedentQueryConfig ( sql `
72
- INSERT INTO users ${ spreadInsert (
73
- {
64
+ matches (
65
+ t ,
66
+ sql `
67
+ INSERT INTO users ${ spreadInsert ( {
74
68
name : "Hugo" ,
75
69
age : 20 ,
76
70
created_at : sql . raw ( "NOW()" ) ,
77
71
foo : undefined
78
- } ,
79
- {
80
- age : 25 ,
81
- name : "Jon" ,
82
- foo : undefined ,
83
- created_at : sql . raw ( "NOW()" )
84
- } ,
85
- {
86
- bar : 1 ,
87
- age : 27 ,
88
- name : "Hans" ,
89
- created_at : null
90
- }
91
- ) } RETURNING *
92
- ` ) ,
93
- dedentQueryConfig ( {
94
- text : `INSERT INTO users ("name", "age", "created_at") VALUES ($1, $2, NOW()), ($3, $4, NOW()), ($5, $6, $7) RETURNING *` ,
95
- values : [ "Hugo" , 20 , "Jon" , 25 , "Hans" , 27 , null ]
96
- } )
72
+ } ) } RETURNING *
73
+ ` ,
74
+ `INSERT INTO users ("name", "age", "created_at") VALUES ($1, $2, NOW()) RETURNING *` ,
75
+ [ "Hugo" , 20 ]
76
+ )
77
+ } )
78
+
79
+ test ( "spreadInsert() works with multiple inserts" , t => {
80
+ matches (
81
+ t ,
82
+ sql `
83
+ INSERT INTO users ${ spreadInsert (
84
+ {
85
+ name : "Hugo" ,
86
+ age : 20 ,
87
+ created_at : sql . raw ( "NOW()" ) ,
88
+ foo : undefined
89
+ } ,
90
+ {
91
+ age : 25 ,
92
+ name : "Jon" ,
93
+ foo : undefined ,
94
+ created_at : sql . raw ( "NOW()" )
95
+ } ,
96
+ {
97
+ age : 27 ,
98
+ name : "Hans" ,
99
+ created_at : null
100
+ }
101
+ ) } RETURNING *
102
+ ` ,
103
+ `INSERT INTO users ("name", "age", "created_at") VALUES ($1, $2, NOW()), ($3, $4, NOW()), ($5, $6, $7) RETURNING *` ,
104
+ [ "Hugo" , 20 , "Jon" , 25 , "Hans" , 27 , null ]
97
105
)
98
106
} )
99
107
100
108
test ( "spreadUpdate() works" , t => {
101
- t . deepEqual (
102
- dedentQueryConfig ( sql `
103
- UPDATE users SET ${ spreadUpdate ( {
104
- name : "Hugo" ,
105
- age : 20 ,
106
- created_at : sql . raw ( "NOW()" ) ,
107
- foo : undefined
108
- } ) }
109
- ` ) ,
110
- dedentQueryConfig ( {
111
- text : `UPDATE users SET "name" = $1, "age" = $2, "created_at" = NOW()` ,
112
- values : [ "Hugo" , 20 ]
113
- } )
109
+ matches (
110
+ t ,
111
+ sql `
112
+ UPDATE users SET ${ spreadUpdate ( {
113
+ name : "Hugo" ,
114
+ age : 20 ,
115
+ created_at : sql . raw ( "NOW()" ) ,
116
+ foo : undefined
117
+ } ) }
118
+ ` ,
119
+ `UPDATE users SET "name" = $1, "age" = $2, "created_at" = NOW()` ,
120
+ [ "Hugo" , 20 ]
114
121
)
115
122
} )
116
123
117
124
test ( "works with multiple parameters" , t => {
118
- t . deepEqual (
119
- dedentQueryConfig ( sql `
120
- WITH some_users AS (
121
- SELECT * FROM users WHERE id = ${ 1 } OR email = ${ "foo@example.com" }
122
- )
123
- INSERT INTO users ${ spreadInsert ( {
124
- name : "Hugo" ,
125
- age : 20 ,
126
- created_at : sql . raw ( "NOW()" ) ,
127
- role : "user"
128
- } ) } UNION SELECT * FROM some_users RETURNING *
129
- ` ) ,
130
- dedentQueryConfig ( {
131
- text : `
132
- WITH some_users AS (
133
- SELECT * FROM users WHERE id = $1 OR email = $2
134
- )
135
- INSERT INTO users ("name", "age", "created_at", "role") VALUES ($3, $4, NOW(), $5) UNION SELECT * FROM some_users RETURNING *
125
+ matches (
126
+ t ,
127
+ sql `
128
+ WITH some_users AS (
129
+ SELECT * FROM users WHERE id = ${ 1 } OR email = ${ "foo@example.com" }
130
+ )
131
+ INSERT INTO users ${ spreadInsert ( {
132
+ name : "Hugo" ,
133
+ age : 20 ,
134
+ created_at : sql . raw ( "NOW()" ) ,
135
+ role : "user"
136
+ } ) } UNION SELECT * FROM some_users RETURNING *
137
+ ` ,
138
+ `
139
+ WITH some_users AS (
140
+ SELECT * FROM users WHERE id = $1 OR email = $2
141
+ )
142
+ INSERT INTO users ("name", "age", "created_at", "role") VALUES ($3, $4, NOW(), $5) UNION SELECT * FROM some_users RETURNING *
136
143
` ,
137
- values : [ 1 , "foo@example.com" , "Hugo" , 20 , "user" ]
138
- } )
144
+ [ 1 , "foo@example.com" , "Hugo" , 20 , "user" ]
139
145
)
140
146
} )
0 commit comments