Skip to content

Commit 0e782fb

Browse files
committed
WIP: Switch back to diesel for db stuff
1 parent 2c22741 commit 0e782fb

File tree

5 files changed

+184
-158
lines changed

5 files changed

+184
-158
lines changed

src/tests/all.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ use cargo_registry::krate::NewCrate;
3232
use cargo_registry::upload as u;
3333
use cargo_registry::user::NewUser;
3434
use cargo_registry::version::NewVersion;
35-
use cargo_registry::token::ApiToken;
3635
use cargo_registry::user::AuthenticationSource;
3736
use cargo_registry::{User, Crate, Version, Dependency, Category, Model, Replica};
3837
use conduit::{Request, Method};
@@ -299,11 +298,6 @@ fn mock_dep(req: &mut Request, version: &Version, krate: &Crate,
299298
&target.map(|s| s.to_string())).unwrap()
300299
}
301300

302-
fn mock_api_token(req: &mut Request, name: &str) -> ApiToken {
303-
let user = req.extensions().find::<User>().unwrap();
304-
ApiToken::insert(req.tx().unwrap(), user.id, name).unwrap()
305-
}
306-
307301
fn new_category<'a>(category: &'a str, slug: &'a str) -> NewCategory<'a> {
308302
NewCategory { category: category, slug: slug, ..NewCategory::default() }
309303
}

src/tests/token.rs

Lines changed: 123 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use std::collections::HashSet;
22

33
use conduit::{Handler, Method};
44

5-
use cargo_registry::db::RequestTransaction;
65
use cargo_registry::token::{ApiToken, EncodableApiToken};
76

87
#[derive(RustcDecodable)]
@@ -23,7 +22,7 @@ macro_rules! assert_contains {
2322
#[test]
2423
fn list_logged_out() {
2524
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");
2726

2827
let response = t_resp!(middle.call(&mut req));
2928
assert_eq!(response.status.0, 403);
@@ -32,9 +31,13 @@ fn list_logged_out() {
3231
#[test]
3332
fn list_empty() {
3433
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");
3635

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);
3841

3942
let mut response = ok_resp!(middle.call(&mut req));
4043
let json: ListResponse = ::json(&mut response);
@@ -45,13 +48,18 @@ fn list_empty() {
4548
#[test]
4649
fn list_tokens() {
4750
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");
4952

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);
5563

5664
let mut response = ok_resp!(middle.call(&mut req));
5765
let json: ListResponse = ::json(&mut response);
@@ -65,7 +73,7 @@ fn list_tokens() {
6573
#[test]
6674
fn create_token_logged_out() {
6775
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");
6977

7078
req.with_body(br#"{ "api_token": { "name": "bar" } }"#);
7179

@@ -76,9 +84,13 @@ fn create_token_logged_out() {
7684
#[test]
7785
fn create_token_invalid_request() {
7886
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");
8088

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);
8294
req.with_body(br#"{ "name": "" }"#);
8395

8496
let mut response = t_resp!(middle.call(&mut req));
@@ -91,9 +103,13 @@ fn create_token_invalid_request() {
91103
#[test]
92104
fn create_token_no_name() {
93105
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");
95107

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);
97113
req.with_body(br#"{ "api_token": { "name": "" } }"#);
98114

99115
let mut response = t_resp!(middle.call(&mut req));
@@ -106,9 +122,13 @@ fn create_token_no_name() {
106122
#[test]
107123
fn create_token_long_body() {
108124
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");
110126

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);
112132
req.with_body(&[5; 5192]); // Send a request with a 5kB body of 5's
113133

114134
let mut response = t_resp!(middle.call(&mut req));
@@ -121,12 +141,17 @@ fn create_token_long_body() {
121141
#[test]
122142
fn create_token_exceeded_tokens_per_user() {
123143
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");
125145

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);
130155
req.with_body(br#"{ "api_token": { "name": "bar" } }"#);
131156

132157
let mut response = t_resp!(middle.call(&mut req));
@@ -139,9 +164,13 @@ fn create_token_exceeded_tokens_per_user() {
139164
#[test]
140165
fn create_token_success() {
141166
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");
143168

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);
145174
req.with_body(br#"{ "api_token": { "name": "bar" } }"#);
146175

147176
let mut response = ok_resp!(middle.call(&mut req));
@@ -150,7 +179,8 @@ fn create_token_success() {
150179
assert_eq!(json.api_token.name, "bar");
151180
assert!(json.api_token.token.is_some());
152181

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));
154184
assert_eq!(tokens.len(), 1);
155185
assert_eq!(tokens[0].name, "bar");
156186
assert_eq!(tokens[0].token, json.api_token.token.unwrap());
@@ -160,11 +190,14 @@ fn create_token_success() {
160190
#[test]
161191
fn create_token_with_token() {
162192
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");
164194

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+
}
168201
req.header("Authorization", &token.token);
169202
req.with_body(br#"{ "api_token": { "name": "baz" } }"#);
170203

@@ -178,9 +211,13 @@ fn create_token_with_token() {
178211
#[test]
179212
fn revoke_token_non_existing() {
180213
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");
182215

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);
184221

185222
let mut response = ok_resp!(middle.call(&mut req));
186223
::json::<RevokedResponse>(&mut response);
@@ -189,18 +226,22 @@ fn revoke_token_non_existing() {
189226
#[test]
190227
fn revoke_token_doesnt_revoke_other_users_token() {
191228
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");
197230

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);
200240

201241
// List tokens for first user contains the token
202242
{
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));
204245
assert_eq!(tokens.len(), 1);
205246
assert_eq!(tokens[0].name, token.name);
206247
}
@@ -215,7 +256,8 @@ fn revoke_token_doesnt_revoke_other_users_token() {
215256

216257
// List tokens for first user still contains the token
217258
{
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));
219261
assert_eq!(tokens.len(), 1);
220262
assert_eq!(tokens[0].name, token.name);
221263
}
@@ -224,13 +266,20 @@ fn revoke_token_doesnt_revoke_other_users_token() {
224266
#[test]
225267
fn revoke_token_success() {
226268
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);
230278

231279
// List tokens contains the token
232280
{
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();
234283
assert_eq!(tokens.len(), 1);
235284
assert_eq!(tokens[0].name, token.name);
236285
}
@@ -245,22 +294,26 @@ fn revoke_token_success() {
245294

246295
// List tokens no longer contains the token
247296
{
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();
249299
assert_eq!(tokens.len(), 0);
250300
}
251301
}
252302

253303
#[test]
254304
fn token_gives_access_to_me() {
255305
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+
257308
let response = t_resp!(middle.call(&mut req));
258309
assert_eq!(response.status.0, 403);
259310

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+
}
264317
req.header("Authorization", &token.token);
265318

266319
let mut response = ok_resp!(middle.call(&mut req));
@@ -272,20 +325,25 @@ fn token_gives_access_to_me() {
272325
#[test]
273326
fn using_token_updates_last_used_at() {
274327
let (_b, app, middle) = ::app();
275-
let mut req = ::req(app, Method::Get, "/me");
328+
let mut req = ::req(app.clone(), Method::Get, "/me");
276329
let response = t_resp!(middle.call(&mut req));
277330
assert_eq!(response.status.0, 403);
278331

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+
}
283338
req.header("Authorization", &token.token);
284339
assert!(token.last_used_at.is_none());
285340

286341
ok_resp!(middle.call(&mut req));
287342

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+
};
289347
assert!(token.last_used_at.is_some());
290348

291349
// Would check that it updates the timestamp here, but the timestamp is
@@ -296,15 +354,18 @@ fn using_token_updates_last_used_at() {
296354
#[test]
297355
fn deleted_token_does_not_give_access_to_me() {
298356
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+
300359
let response = t_resp!(middle.call(&mut req));
301360
assert_eq!(response.status.0, 403);
302361

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+
}
308369
req.header("Authorization", &token.token);
309370

310371
let response = t_resp!(middle.call(&mut req));

0 commit comments

Comments
 (0)