1
- use crate :: routes :: me :: tokens :: delete :: RevokedResponse ;
1
+ use crate :: util :: insta :: { self , assert_yaml_snapshot } ;
2
2
use crate :: util:: { RequestHelper , TestApp } ;
3
+ use cargo_registry:: models:: token:: { CrateScope , EndpointScope } ;
3
4
use cargo_registry:: models:: ApiToken ;
4
- use std:: collections:: HashSet ;
5
-
6
- #[ derive( Deserialize ) ]
7
- struct DecodableApiToken {
8
- name : String ,
9
- }
10
-
11
- #[ derive( Deserialize ) ]
12
- struct ListResponse {
13
- api_tokens : Vec < DecodableApiToken > ,
14
- }
5
+ use http:: StatusCode ;
15
6
16
7
#[ test]
17
8
fn list_logged_out ( ) {
@@ -28,33 +19,40 @@ fn list_with_api_token_is_forbidden() {
28
19
#[ test]
29
20
fn list_empty ( ) {
30
21
let ( _, _, user) = TestApp :: init ( ) . with_user ( ) ;
31
- let json: ListResponse = user. get ( "/api/v1/me/tokens" ) . good ( ) ;
32
- assert_eq ! ( json. api_tokens. len( ) , 0 ) ;
22
+ let response = user. get :: < ( ) > ( "/api/v1/me/tokens" ) ;
23
+ assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
24
+ let json = response. into_json ( ) ;
25
+ let response_tokens = json[ "api_tokens" ] . as_array ( ) . unwrap ( ) ;
26
+ assert_eq ! ( response_tokens. len( ) , 0 ) ;
33
27
}
34
28
35
29
#[ test]
36
30
fn list_tokens ( ) {
37
31
let ( app, _, user) = TestApp :: init ( ) . with_user ( ) ;
38
32
let id = user. as_model ( ) . id ;
39
- let tokens = app. db ( |conn| {
33
+ app. db ( |conn| {
40
34
vec ! [
41
35
assert_ok!( ApiToken :: insert( conn, id, "bar" ) ) ,
42
- assert_ok!( ApiToken :: insert( conn, id, "baz" ) ) ,
36
+ assert_ok!( ApiToken :: insert_with_scopes(
37
+ conn,
38
+ id,
39
+ "baz" ,
40
+ Some ( vec![
41
+ CrateScope :: try_from( "serde" ) . unwrap( ) ,
42
+ CrateScope :: try_from( "serde-*" ) . unwrap( )
43
+ ] ) ,
44
+ Some ( vec![ EndpointScope :: PublishUpdate ] )
45
+ ) ) ,
43
46
]
44
47
} ) ;
45
48
46
- let json: ListResponse = user. get ( "/api/v1/me/tokens" ) . good ( ) ;
47
- assert_eq ! ( json. api_tokens. len( ) , tokens. len( ) ) ;
48
- assert_eq ! (
49
- json. api_tokens
50
- . into_iter( )
51
- . map( |t| t. name)
52
- . collect:: <HashSet <_>>( ) ,
53
- tokens
54
- . into_iter( )
55
- . map( |t| t. model. name)
56
- . collect:: <HashSet <_>>( )
57
- ) ;
49
+ let response = user. get :: < ( ) > ( "/api/v1/me/tokens" ) ;
50
+ assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
51
+ assert_yaml_snapshot ! ( response. into_json( ) , {
52
+ ".api_tokens[].id" => insta:: any_id_redaction( ) ,
53
+ ".api_tokens[].created_at" => "[datetime]" ,
54
+ ".api_tokens[].last_used_at" => "[datetime]" ,
55
+ } ) ;
58
56
}
59
57
60
58
#[ test]
@@ -69,19 +67,21 @@ fn list_tokens_exclude_revoked() {
69
67
} ) ;
70
68
71
69
// List tokens expecting them all to be there.
72
- let json: ListResponse = user. get ( "/api/v1/me/tokens" ) . good ( ) ;
73
- assert_eq ! ( json. api_tokens. len( ) , tokens. len( ) ) ;
70
+ let response = user. get :: < ( ) > ( "/api/v1/me/tokens" ) ;
71
+ assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
72
+ let json = response. into_json ( ) ;
73
+ let response_tokens = json[ "api_tokens" ] . as_array ( ) . unwrap ( ) ;
74
+ assert_eq ! ( response_tokens. len( ) , 2 ) ;
74
75
75
76
// Revoke the first token.
76
- let _json: RevokedResponse = user
77
- . delete ( & format ! ( "/api/v1/me/tokens/{}" , tokens[ 0 ] . model. id) )
78
- . good ( ) ;
77
+ let response = user. delete :: < ( ) > ( & format ! ( "/api/v1/me/tokens/{}" , tokens[ 0 ] . model. id) ) ;
78
+ assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
79
79
80
80
// Check that we now have one less token being listed.
81
- let json : ListResponse = user. get ( "/api/v1/me/tokens" ) . good ( ) ;
82
- assert_eq ! ( json . api_tokens . len ( ) , tokens . len ( ) - 1 ) ;
83
- assert ! ( ! json
84
- . api_tokens
85
- . iter ( )
86
- . any ( |token| token . name == tokens [ 0 ] . model . name) ) ;
81
+ let response = user. get :: < ( ) > ( "/api/v1/me/tokens" ) ;
82
+ assert_eq ! ( response . status ( ) , StatusCode :: OK ) ;
83
+ let json = response . into_json ( ) ;
84
+ let response_tokens = json [ " api_tokens" ] . as_array ( ) . unwrap ( ) ;
85
+ assert_eq ! ( response_tokens . len ( ) , 1 ) ;
86
+ assert_eq ! ( response_tokens [ 0 ] [ " name" ] , json! ( "baz" ) ) ;
87
87
}
0 commit comments