@@ -2,7 +2,6 @@ use std::collections::HashSet;
2
2
3
3
use conduit:: { Handler , Method } ;
4
4
5
- use cargo_registry:: db:: RequestTransaction ;
6
5
use cargo_registry:: token:: { ApiToken , EncodableApiToken } ;
7
6
8
7
#[ derive( RustcDecodable ) ]
@@ -23,7 +22,7 @@ macro_rules! assert_contains {
23
22
#[ test]
24
23
fn list_logged_out ( ) {
25
24
let ( _b, app, middle) = :: app ( ) ;
26
- let mut req = :: req ( app, Method :: Get , "/me/tokens" ) ;
25
+ let mut req = :: req ( app. clone ( ) , Method :: Get , "/me/tokens" ) ;
27
26
28
27
let response = t_resp ! ( middle. call( & mut req) ) ;
29
28
assert_eq ! ( response. status. 0 , 403 ) ;
@@ -32,9 +31,13 @@ fn list_logged_out() {
32
31
#[ test]
33
32
fn list_empty ( ) {
34
33
let ( _b, app, middle) = :: app ( ) ;
35
- let mut req = :: req ( app, Method :: Get , "/me/tokens" ) ;
34
+ let mut req = :: req ( app. clone ( ) , Method :: Get , "/me/tokens" ) ;
36
35
37
- :: mock_user ( & mut req, :: user ( "foo" ) ) ;
36
+ let user = {
37
+ let conn = t ! ( app. diesel_database. get( ) ) ;
38
+ t ! ( :: new_user( "foo" ) . create_or_update( & conn) )
39
+ } ;
40
+ :: sign_in_as ( & mut req, & user) ;
38
41
39
42
let mut response = ok_resp ! ( middle. call( & mut req) ) ;
40
43
let json: ListResponse = :: json ( & mut response) ;
@@ -45,13 +48,18 @@ fn list_empty() {
45
48
#[ test]
46
49
fn list_tokens ( ) {
47
50
let ( _b, app, middle) = :: app ( ) ;
48
- let mut req = :: req ( app, Method :: Get , "/me/tokens" ) ;
51
+ let mut req = :: req ( app. clone ( ) , Method :: Get , "/me/tokens" ) ;
49
52
50
- :: mock_user ( & mut req, :: user ( "foo" ) ) ;
51
- let tokens = vec ! [
52
- :: mock_api_token( & mut req, "bar" ) ,
53
- :: mock_api_token( & mut req, "baz" ) ,
54
- ] ;
53
+ let ( user, tokens) ;
54
+ {
55
+ let conn = t ! ( app. diesel_database. get( ) ) ;
56
+ user = t ! ( :: new_user( "foo" ) . create_or_update( & conn) ) ;
57
+ tokens = vec ! [
58
+ t!( ApiToken :: insert( & conn, user. id, "bar" ) ) ,
59
+ t!( ApiToken :: insert( & conn, user. id, "baz" ) ) ,
60
+ ] ;
61
+ }
62
+ :: sign_in_as ( & mut req, & user) ;
55
63
56
64
let mut response = ok_resp ! ( middle. call( & mut req) ) ;
57
65
let json: ListResponse = :: json ( & mut response) ;
@@ -65,7 +73,7 @@ fn list_tokens() {
65
73
#[ test]
66
74
fn create_token_logged_out ( ) {
67
75
let ( _b, app, middle) = :: app ( ) ;
68
- let mut req = :: req ( app, Method :: Post , "/me/tokens" ) ;
76
+ let mut req = :: req ( app. clone ( ) , Method :: Post , "/me/tokens" ) ;
69
77
70
78
req. with_body ( br#"{ "api_token": { "name": "bar" } }"# ) ;
71
79
@@ -76,9 +84,13 @@ fn create_token_logged_out() {
76
84
#[ test]
77
85
fn create_token_invalid_request ( ) {
78
86
let ( _b, app, middle) = :: app ( ) ;
79
- let mut req = :: req ( app, Method :: Post , "/me/tokens" ) ;
87
+ let mut req = :: req ( app. clone ( ) , Method :: Post , "/me/tokens" ) ;
80
88
81
- :: mock_user ( & mut req, :: user ( "foo" ) ) ;
89
+ let user = {
90
+ let conn = t ! ( app. diesel_database. get( ) ) ;
91
+ t ! ( :: new_user( "foo" ) . create_or_update( & conn) )
92
+ } ;
93
+ :: sign_in_as ( & mut req, & user) ;
82
94
req. with_body ( br#"{ "name": "" }"# ) ;
83
95
84
96
let mut response = t_resp ! ( middle. call( & mut req) ) ;
@@ -91,9 +103,13 @@ fn create_token_invalid_request() {
91
103
#[ test]
92
104
fn create_token_no_name ( ) {
93
105
let ( _b, app, middle) = :: app ( ) ;
94
- let mut req = :: req ( app, Method :: Post , "/me/tokens" ) ;
106
+ let mut req = :: req ( app. clone ( ) , Method :: Post , "/me/tokens" ) ;
95
107
96
- :: mock_user ( & mut req, :: user ( "foo" ) ) ;
108
+ let user = {
109
+ let conn = t ! ( app. diesel_database. get( ) ) ;
110
+ t ! ( :: new_user( "foo" ) . create_or_update( & conn) )
111
+ } ;
112
+ :: sign_in_as ( & mut req, & user) ;
97
113
req. with_body ( br#"{ "api_token": { "name": "" } }"# ) ;
98
114
99
115
let mut response = t_resp ! ( middle. call( & mut req) ) ;
@@ -106,9 +122,13 @@ fn create_token_no_name() {
106
122
#[ test]
107
123
fn create_token_long_body ( ) {
108
124
let ( _b, app, middle) = :: app ( ) ;
109
- let mut req = :: req ( app, Method :: Post , "/me/tokens" ) ;
125
+ let mut req = :: req ( app. clone ( ) , Method :: Post , "/me/tokens" ) ;
110
126
111
- :: mock_user ( & mut req, :: user ( "foo" ) ) ;
127
+ let user = {
128
+ let conn = t ! ( app. diesel_database. get( ) ) ;
129
+ t ! ( :: new_user( "foo" ) . create_or_update( & conn) )
130
+ } ;
131
+ :: sign_in_as ( & mut req, & user) ;
112
132
req. with_body ( & [ 5 ; 5192 ] ) ; // Send a request with a 5kB body of 5's
113
133
114
134
let mut response = t_resp ! ( middle. call( & mut req) ) ;
@@ -121,12 +141,17 @@ fn create_token_long_body() {
121
141
#[ test]
122
142
fn create_token_exceeded_tokens_per_user ( ) {
123
143
let ( _b, app, middle) = :: app ( ) ;
124
- let mut req = :: req ( app, Method :: Post , "/me/tokens" ) ;
144
+ let mut req = :: req ( app. clone ( ) , Method :: Post , "/me/tokens" ) ;
125
145
126
- :: mock_user ( & mut req, :: user ( "foo" ) ) ;
127
- for i in 0 ..1000 {
128
- :: mock_api_token ( & mut req, & format ! ( "token {}" , i) ) ;
129
- }
146
+ let user;
147
+ {
148
+ let conn = t ! ( app. diesel_database. get( ) ) ;
149
+ user = t ! ( :: new_user( "foo" ) . create_or_update( & conn) ) ;
150
+ for i in 0 ..1000 {
151
+ t ! ( ApiToken :: insert( & conn, user. id, & format!( "token {}" , i) ) ) ;
152
+ }
153
+ } ;
154
+ :: sign_in_as ( & mut req, & user) ;
130
155
req. with_body ( br#"{ "api_token": { "name": "bar" } }"# ) ;
131
156
132
157
let mut response = t_resp ! ( middle. call( & mut req) ) ;
@@ -139,9 +164,13 @@ fn create_token_exceeded_tokens_per_user() {
139
164
#[ test]
140
165
fn create_token_success ( ) {
141
166
let ( _b, app, middle) = :: app ( ) ;
142
- let mut req = :: req ( app, Method :: Post , "/me/tokens" ) ;
167
+ let mut req = :: req ( app. clone ( ) , Method :: Post , "/me/tokens" ) ;
143
168
144
- let user = :: mock_user ( & mut req, :: user ( "foo" ) ) ;
169
+ let user = {
170
+ let conn = t ! ( app. diesel_database. get( ) ) ;
171
+ t ! ( :: new_user( "foo" ) . create_or_update( & conn) )
172
+ } ;
173
+ :: sign_in_as ( & mut req, & user) ;
145
174
req. with_body ( br#"{ "api_token": { "name": "bar" } }"# ) ;
146
175
147
176
let mut response = ok_resp ! ( middle. call( & mut req) ) ;
@@ -150,7 +179,8 @@ fn create_token_success() {
150
179
assert_eq ! ( json. api_token. name, "bar" ) ;
151
180
assert ! ( json. api_token. token. is_some( ) ) ;
152
181
153
- let tokens = ApiToken :: find_for_user ( req. tx ( ) . unwrap ( ) , user. id ) . unwrap ( ) ;
182
+ let conn = t ! ( app. diesel_database. get( ) ) ;
183
+ let tokens = t ! ( ApiToken :: find_for_user( & conn, user. id) ) ;
154
184
assert_eq ! ( tokens. len( ) , 1 ) ;
155
185
assert_eq ! ( tokens[ 0 ] . name, "bar" ) ;
156
186
assert_eq ! ( tokens[ 0 ] . token, json. api_token. token. unwrap( ) ) ;
@@ -160,11 +190,14 @@ fn create_token_success() {
160
190
#[ test]
161
191
fn create_token_with_token ( ) {
162
192
let ( _b, app, middle) = :: app ( ) ;
163
- let mut req = :: req ( app, Method :: Post , "/me/tokens" ) ;
193
+ let mut req = :: req ( app. clone ( ) , Method :: Post , "/me/tokens" ) ;
164
194
165
- let user = :: mock_user ( & mut req, :: user ( "foo" ) ) ;
166
- :: logout ( & mut req) ;
167
- let token = t ! ( ApiToken :: insert( req. tx( ) . unwrap( ) , user. id, "bar" ) ) ;
195
+ let ( user, token) ;
196
+ {
197
+ let conn = t ! ( app. diesel_database. get( ) ) ;
198
+ user = t ! ( :: new_user( "foo" ) . create_or_update( & conn) ) ;
199
+ token = t ! ( ApiToken :: insert( & conn, user. id, "bar" ) ) ;
200
+ }
168
201
req. header ( "Authorization" , & token. token ) ;
169
202
req. with_body ( br#"{ "api_token": { "name": "baz" } }"# ) ;
170
203
@@ -178,9 +211,13 @@ fn create_token_with_token() {
178
211
#[ test]
179
212
fn revoke_token_non_existing ( ) {
180
213
let ( _b, app, middle) = :: app ( ) ;
181
- let mut req = :: req ( app, Method :: Delete , "/me/tokens/5" ) ;
214
+ let mut req = :: req ( app. clone ( ) , Method :: Delete , "/me/tokens/5" ) ;
182
215
183
- :: mock_user ( & mut req, :: user ( "foo" ) ) ;
216
+ let user = {
217
+ let conn = t ! ( app. diesel_database. get( ) ) ;
218
+ t ! ( :: new_user( "foo" ) . create_or_update( & conn) )
219
+ } ;
220
+ :: sign_in_as ( & mut req, & user) ;
184
221
185
222
let mut response = ok_resp ! ( middle. call( & mut req) ) ;
186
223
:: json :: < RevokedResponse > ( & mut response) ;
@@ -189,18 +226,22 @@ fn revoke_token_non_existing() {
189
226
#[ test]
190
227
fn revoke_token_doesnt_revoke_other_users_token ( ) {
191
228
let ( _b, app, middle) = :: app ( ) ;
192
- let mut req = :: req ( app, Method :: Delete , "/me/tokens" ) ;
193
-
194
- // Create one user with a token
195
- let user1 = :: mock_user ( & mut req, :: user ( "foo" ) ) ;
196
- let token = :: mock_api_token ( & mut req, "bar" ) ;
229
+ let mut req = :: req ( app. clone ( ) , Method :: Delete , "/me/tokens" ) ;
197
230
198
- // Create and sign in with a different user
199
- :: mock_user ( & mut req, :: user ( "baz" ) ) ;
231
+ // Create one user with a token and sign in with a different user
232
+ let ( user1, token, user2) ;
233
+ {
234
+ let conn = t ! ( app. diesel_database. get( ) ) ;
235
+ user1 = t ! ( :: new_user( "foo" ) . create_or_update( & conn) ) ;
236
+ token = t ! ( ApiToken :: insert( & conn, user1. id, "bar" ) ) ;
237
+ user2 = t ! ( :: new_user( "baz" ) . create_or_update( & conn) )
238
+ } ;
239
+ :: sign_in_as ( & mut req, & user2) ;
200
240
201
241
// List tokens for first user contains the token
202
242
{
203
- let tokens = ApiToken :: find_for_user ( req. tx ( ) . unwrap ( ) , user1. id ) . unwrap ( ) ;
243
+ let conn = t ! ( app. diesel_database. get( ) ) ;
244
+ let tokens = t ! ( ApiToken :: find_for_user( & conn, user1. id) ) ;
204
245
assert_eq ! ( tokens. len( ) , 1 ) ;
205
246
assert_eq ! ( tokens[ 0 ] . name, token. name) ;
206
247
}
@@ -215,7 +256,8 @@ fn revoke_token_doesnt_revoke_other_users_token() {
215
256
216
257
// List tokens for first user still contains the token
217
258
{
218
- let tokens = ApiToken :: find_for_user ( req. tx ( ) . unwrap ( ) , user1. id ) . unwrap ( ) ;
259
+ let conn = t ! ( app. diesel_database. get( ) ) ;
260
+ let tokens = t ! ( ApiToken :: find_for_user( & conn, user1. id) ) ;
219
261
assert_eq ! ( tokens. len( ) , 1 ) ;
220
262
assert_eq ! ( tokens[ 0 ] . name, token. name) ;
221
263
}
@@ -224,13 +266,20 @@ fn revoke_token_doesnt_revoke_other_users_token() {
224
266
#[ test]
225
267
fn revoke_token_success ( ) {
226
268
let ( _b, app, middle) = :: app ( ) ;
227
- let mut req = :: req ( app, Method :: Delete , "/me/tokens" ) ;
228
- let user = :: mock_user ( & mut req, :: user ( "foo" ) ) ;
229
- let token = :: mock_api_token ( & mut req, "bar" ) ;
269
+ let mut req = :: req ( app. clone ( ) , Method :: Delete , "/me/tokens" ) ;
270
+
271
+ let ( user, token) ;
272
+ {
273
+ let conn = t ! ( app. diesel_database. get( ) ) ;
274
+ user = t ! ( :: new_user( "foo" ) . create_or_update( & conn) ) ;
275
+ token = t ! ( ApiToken :: insert( & conn, user. id, "bar" ) ) ;
276
+ }
277
+ :: sign_in_as ( & mut req, & user) ;
230
278
231
279
// List tokens contains the token
232
280
{
233
- let tokens = ApiToken :: find_for_user ( req. tx ( ) . unwrap ( ) , user. id ) . unwrap ( ) ;
281
+ let conn = t ! ( app. diesel_database. get( ) ) ;
282
+ let tokens = ApiToken :: find_for_user ( & conn, user. id ) . unwrap ( ) ;
234
283
assert_eq ! ( tokens. len( ) , 1 ) ;
235
284
assert_eq ! ( tokens[ 0 ] . name, token. name) ;
236
285
}
@@ -245,22 +294,26 @@ fn revoke_token_success() {
245
294
246
295
// List tokens no longer contains the token
247
296
{
248
- let tokens = ApiToken :: find_for_user ( req. tx ( ) . unwrap ( ) , user. id ) . unwrap ( ) ;
297
+ let conn = t ! ( app. diesel_database. get( ) ) ;
298
+ let tokens = ApiToken :: find_for_user ( & conn, user. id ) . unwrap ( ) ;
249
299
assert_eq ! ( tokens. len( ) , 0 ) ;
250
300
}
251
301
}
252
302
253
303
#[ test]
254
304
fn token_gives_access_to_me ( ) {
255
305
let ( _b, app, middle) = :: app ( ) ;
256
- let mut req = :: req ( app, Method :: Get , "/me" ) ;
306
+ let mut req = :: req ( app. clone ( ) , Method :: Get , "/me" ) ;
307
+
257
308
let response = t_resp ! ( middle. call( & mut req) ) ;
258
309
assert_eq ! ( response. status. 0 , 403 ) ;
259
310
260
- let user = :: mock_user ( & mut req, :: user ( "foo" ) ) ;
261
- :: logout ( & mut req) ;
262
-
263
- let token = t ! ( ApiToken :: insert( req. tx( ) . unwrap( ) , user. id, "bar" ) ) ;
311
+ let ( user, token) ;
312
+ {
313
+ let conn = t ! ( app. diesel_database. get( ) ) ;
314
+ user = t ! ( :: new_user( "foo" ) . create_or_update( & conn) ) ;
315
+ token = t ! ( ApiToken :: insert( & conn, user. id, "bar" ) ) ;
316
+ }
264
317
req. header ( "Authorization" , & token. token ) ;
265
318
266
319
let mut response = ok_resp ! ( middle. call( & mut req) ) ;
@@ -272,20 +325,25 @@ fn token_gives_access_to_me() {
272
325
#[ test]
273
326
fn using_token_updates_last_used_at ( ) {
274
327
let ( _b, app, middle) = :: app ( ) ;
275
- let mut req = :: req ( app, Method :: Get , "/me" ) ;
328
+ let mut req = :: req ( app. clone ( ) , Method :: Get , "/me" ) ;
276
329
let response = t_resp ! ( middle. call( & mut req) ) ;
277
330
assert_eq ! ( response. status. 0 , 403 ) ;
278
331
279
- let user = :: mock_user ( & mut req, :: user ( "foo" ) ) ;
280
- :: logout ( & mut req) ;
281
-
282
- let token = t ! ( ApiToken :: insert( req. tx( ) . unwrap( ) , user. id, "bar" ) ) ;
332
+ let ( user, token) ;
333
+ {
334
+ let conn = t ! ( app. diesel_database. get( ) ) ;
335
+ user = t ! ( :: new_user( "foo" ) . create_or_update( & conn) ) ;
336
+ token = t ! ( ApiToken :: insert( & conn, user. id, "bar" ) ) ;
337
+ }
283
338
req. header ( "Authorization" , & token. token ) ;
284
339
assert ! ( token. last_used_at. is_none( ) ) ;
285
340
286
341
ok_resp ! ( middle. call( & mut req) ) ;
287
342
288
- let token = t ! ( ApiToken :: find_for_user( req. tx( ) . unwrap( ) , user. id) ) . pop ( ) . unwrap ( ) ;
343
+ let token = {
344
+ let conn = t ! ( app. diesel_database. get( ) ) ;
345
+ t ! ( ApiToken :: find_for_user( & conn, user. id) ) . pop ( ) . unwrap ( )
346
+ } ;
289
347
assert ! ( token. last_used_at. is_some( ) ) ;
290
348
291
349
// Would check that it updates the timestamp here, but the timestamp is
@@ -296,15 +354,18 @@ fn using_token_updates_last_used_at() {
296
354
#[ test]
297
355
fn deleted_token_does_not_give_access_to_me ( ) {
298
356
let ( _b, app, middle) = :: app ( ) ;
299
- let mut req = :: req ( app, Method :: Get , "/me" ) ;
357
+ let mut req = :: req ( app. clone ( ) , Method :: Get , "/me" ) ;
358
+
300
359
let response = t_resp ! ( middle. call( & mut req) ) ;
301
360
assert_eq ! ( response. status. 0 , 403 ) ;
302
361
303
- let user = :: mock_user ( & mut req, :: user ( "foo" ) ) ;
304
- :: logout ( & mut req) ;
305
-
306
- let token = t ! ( ApiToken :: insert( req. tx( ) . unwrap( ) , user. id, "bar" ) ) ;
307
- t ! ( ApiToken :: delete( req. tx( ) . unwrap( ) , user. id, token. id) ) ;
362
+ let token;
363
+ {
364
+ let conn = t ! ( app. diesel_database. get( ) ) ;
365
+ let user = t ! ( :: new_user( "foo" ) . create_or_update( & conn) ) ;
366
+ token = t ! ( ApiToken :: insert( & conn, user. id, "bar" ) ) ;
367
+ t ! ( ApiToken :: delete( & conn, user. id, token. id) ) ;
368
+ }
308
369
req. header ( "Authorization" , & token. token ) ;
309
370
310
371
let response = t_resp ! ( middle. call( & mut req) ) ;
0 commit comments