@@ -90,6 +90,33 @@ async fn insert() -> Result<(), Box<dyn Error>> {
90
90
Ok ( ( ) )
91
91
}
92
92
93
+ #[ tokio:: test]
94
+ #[ cfg( feature = "serde" ) ]
95
+ async fn insert_serde ( ) -> Result < ( ) , Box < dyn Error > > {
96
+ #[ derive( serde:: Serialize ) ]
97
+ struct Message {
98
+ message : String ,
99
+ channel_id : i32 ,
100
+ username : String ,
101
+ }
102
+
103
+ let client = Postgrest :: new ( REST_URL ) ;
104
+ let resp = client
105
+ . from ( "messages" )
106
+ . insert ( & [ Message {
107
+ message : "Test message 1" . to_string ( ) ,
108
+ channel_id : 1 ,
109
+ username : "kiwicopple" . to_string ( ) ,
110
+ } ] ) ?
111
+ . execute ( )
112
+ . await ?;
113
+ let status = resp. status ( ) ;
114
+
115
+ assert_eq ! ( status. as_u16( ) , 201 ) ;
116
+
117
+ Ok ( ( ) )
118
+ }
119
+
93
120
#[ tokio:: test]
94
121
#[ cfg( not( feature = "serde" ) ) ]
95
122
async fn upsert ( ) -> Result < ( ) , Box < dyn Error > > {
@@ -111,6 +138,39 @@ async fn upsert() -> Result<(), Box<dyn Error>> {
111
138
Ok ( ( ) )
112
139
}
113
140
141
+ #[ tokio:: test]
142
+ #[ cfg( feature = "serde" ) ]
143
+ async fn upsert_serde ( ) -> Result < ( ) , Box < dyn Error > > {
144
+ #[ derive( serde:: Serialize ) ]
145
+ struct User {
146
+ username : String ,
147
+ status : String ,
148
+ }
149
+
150
+ let client = Postgrest :: new ( REST_URL ) ;
151
+ let resp = client
152
+ . from ( "users" )
153
+ . upsert ( & [
154
+ User {
155
+ username : "dragarcia" . to_string ( ) ,
156
+ status : "OFFLINE" . to_string ( ) ,
157
+ } ,
158
+ User {
159
+ username : "supabot2" . to_string ( ) ,
160
+ status : "ONLINE" . to_string ( ) ,
161
+ } ,
162
+ ] ) ?
163
+ . execute ( )
164
+ . await ?;
165
+ let body = resp. text ( ) . await ?;
166
+ let body = json:: parse ( & body) ?;
167
+
168
+ assert_eq ! ( body[ 0 ] [ "username" ] , "dragarcia" ) ;
169
+ assert_eq ! ( body[ 1 ] [ "username" ] , "supabot2" ) ;
170
+
171
+ Ok ( ( ) )
172
+ }
173
+
114
174
#[ tokio:: test]
115
175
#[ cfg( not( feature = "serde" ) ) ]
116
176
async fn upsert_existing ( ) -> Result < ( ) , Box < dyn Error > > {
@@ -130,6 +190,34 @@ async fn upsert_existing() -> Result<(), Box<dyn Error>> {
130
190
Ok ( ( ) )
131
191
}
132
192
193
+ #[ tokio:: test]
194
+ #[ cfg( feature = "serde" ) ]
195
+ async fn upsert_existing_serde ( ) -> Result < ( ) , Box < dyn Error > > {
196
+ #[ derive( serde:: Serialize ) ]
197
+ struct User {
198
+ username : String ,
199
+ status : String ,
200
+ }
201
+
202
+ let client = Postgrest :: new ( REST_URL ) ;
203
+ let resp = client
204
+ . from ( "users" )
205
+ . upsert ( & User {
206
+ username : "dragarcia" . to_string ( ) ,
207
+ status : "ONLINE" . to_string ( ) ,
208
+ } ) ?
209
+ . on_conflict ( "username" )
210
+ . execute ( )
211
+ . await ?;
212
+ let body = resp. text ( ) . await ?;
213
+ let body = json:: parse ( & body) ?;
214
+
215
+ assert_eq ! ( body[ 0 ] [ "username" ] , "dragarcia" ) ;
216
+ assert_eq ! ( body[ 0 ] [ "status" ] , "ONLINE" ) ;
217
+
218
+ Ok ( ( ) )
219
+ }
220
+
133
221
#[ tokio:: test]
134
222
#[ cfg( not( feature = "serde" ) ) ]
135
223
async fn upsert_nonexisting ( ) -> Result < ( ) , Box < dyn Error > > {
@@ -148,6 +236,33 @@ async fn upsert_nonexisting() -> Result<(), Box<dyn Error>> {
148
236
Ok ( ( ) )
149
237
}
150
238
239
+ #[ tokio:: test]
240
+ #[ cfg( feature = "serde" ) ]
241
+ async fn upsert_nonexisting_serde ( ) -> Result < ( ) , Box < dyn Error > > {
242
+ #[ derive( serde:: Serialize ) ]
243
+ struct User {
244
+ username : String ,
245
+ status : String ,
246
+ }
247
+
248
+ let client = Postgrest :: new ( REST_URL ) ;
249
+ let resp = client
250
+ . from ( "users" )
251
+ . upsert ( & User {
252
+ username : "supabot3" . to_string ( ) ,
253
+ status : "ONLINE" . to_string ( ) ,
254
+ } ) ?
255
+ . execute ( )
256
+ . await ?;
257
+ let body = resp. text ( ) . await ?;
258
+ let body = json:: parse ( & body) ?;
259
+
260
+ assert_eq ! ( body[ 0 ] [ "username" ] , "supabot3" ) ;
261
+ assert_eq ! ( body[ 0 ] [ "status" ] , "ONLINE" ) ;
262
+
263
+ Ok ( ( ) )
264
+ }
265
+
151
266
#[ tokio:: test]
152
267
#[ cfg( not( feature = "serde" ) ) ]
153
268
async fn update ( ) -> Result < ( ) , Box < dyn Error > > {
@@ -168,6 +283,33 @@ async fn update() -> Result<(), Box<dyn Error>> {
168
283
Ok ( ( ) )
169
284
}
170
285
286
+ #[ tokio:: test]
287
+ #[ cfg( feature = "serde" ) ]
288
+ async fn update_serde ( ) -> Result < ( ) , Box < dyn Error > > {
289
+ #[ derive( serde:: Serialize ) ]
290
+ struct User {
291
+ status : String ,
292
+ }
293
+
294
+ let client = Postgrest :: new ( REST_URL ) ;
295
+ let resp = client
296
+ . from ( "users" )
297
+ . eq ( "status" , "ONLINE" )
298
+ . update ( & User {
299
+ status : "ONLINE" . to_string ( ) ,
300
+ } ) ?
301
+ . execute ( )
302
+ . await ?;
303
+ let status = resp. status ( ) ;
304
+ let body = resp. text ( ) . await ?;
305
+ let body = json:: parse ( & body) ?;
306
+
307
+ assert_eq ! ( status. as_u16( ) , 200 ) ;
308
+ assert_eq ! ( body[ 0 ] [ "status" ] , "ONLINE" ) ;
309
+
310
+ Ok ( ( ) )
311
+ }
312
+
171
313
#[ tokio:: test]
172
314
async fn delete ( ) -> Result < ( ) , Box < dyn Error > > {
173
315
let client = Postgrest :: new ( REST_URL ) ;
0 commit comments