1
+ use crate :: util:: insta:: { self , assert_yaml_snapshot} ;
1
2
use crate :: util:: { RequestHelper , TestApp } ;
2
3
use cargo_registry:: models:: token:: { CrateScope , EndpointScope } ;
3
4
use cargo_registry:: models:: ApiToken ;
4
- use cargo_registry:: views:: EncodableApiTokenWithToken ;
5
5
use diesel:: prelude:: * ;
6
6
use http:: StatusCode ;
7
+ use serde_json:: Value ;
7
8
8
9
static NEW_BAR : & [ u8 ] = br#"{ "api_token": { "name": "bar" } }"# ;
9
10
10
- #[ derive( Deserialize ) ]
11
- struct NewResponse {
12
- api_token : EncodableApiTokenWithToken ,
13
- }
14
-
15
11
#[ test]
16
12
fn create_token_logged_out ( ) {
17
13
let ( _, anon) = TestApp :: init ( ) . empty ( ) ;
@@ -63,9 +59,14 @@ fn create_token_exceeded_tokens_per_user() {
63
59
fn create_token_success ( ) {
64
60
let ( app, _, user) = TestApp :: init ( ) . with_user ( ) ;
65
61
66
- let json: NewResponse = user. put ( "/api/v1/me/tokens" , NEW_BAR ) . good ( ) ;
67
- assert_eq ! ( json. api_token. name, "bar" ) ;
68
- assert ! ( !json. api_token. token. is_empty( ) ) ;
62
+ let response = user. put :: < ( ) > ( "/api/v1/me/tokens" , NEW_BAR ) ;
63
+ assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
64
+ assert_yaml_snapshot ! ( response. into_json( ) , {
65
+ ".api_token.id" => insta:: any_id_redaction( ) ,
66
+ ".api_token.created_at" => "[datetime]" ,
67
+ ".api_token.last_used_at" => "[datetime]" ,
68
+ ".api_token.token" => insta:: api_token_redaction( ) ,
69
+ } ) ;
69
70
70
71
let tokens: Vec < ApiToken > =
71
72
app. db ( |conn| assert_ok ! ( ApiToken :: belonging_to( user. as_model( ) ) . load( conn) ) ) ;
@@ -80,21 +81,22 @@ fn create_token_success() {
80
81
#[ test]
81
82
fn create_token_multiple_have_different_values ( ) {
82
83
let ( _, _, user) = TestApp :: init ( ) . with_user ( ) ;
83
- let first: NewResponse = user. put ( "/api/v1/me/tokens" , NEW_BAR ) . good ( ) ;
84
- let second: NewResponse = user. put ( "/api/v1/me/tokens" , NEW_BAR ) . good ( ) ;
84
+ let first: Value = user. put ( "/api/v1/me/tokens" , NEW_BAR ) . good ( ) ;
85
+ let second: Value = user. put ( "/api/v1/me/tokens" , NEW_BAR ) . good ( ) ;
85
86
86
- assert_ne ! ( first. api_token. token, second. api_token. token) ;
87
+ assert_eq ! ( first[ "api_token" ] [ "name" ] , second[ "api_token" ] [ "name" ] ) ;
88
+ assert_ne ! ( first[ "api_token" ] [ "token" ] , second[ "api_token" ] [ "token" ] ) ;
87
89
}
88
90
89
91
#[ test]
90
92
fn create_token_multiple_users_have_different_values ( ) {
91
93
let ( app, _, user1) = TestApp :: init ( ) . with_user ( ) ;
92
- let first_token : NewResponse = user1. put ( "/api/v1/me/tokens" , NEW_BAR ) . good ( ) ;
94
+ let first : Value = user1. put ( "/api/v1/me/tokens" , NEW_BAR ) . good ( ) ;
93
95
94
96
let user2 = app. db_new_user ( "bar" ) ;
95
- let second_token : NewResponse = user2. put ( "/api/v1/me/tokens" , NEW_BAR ) . good ( ) ;
97
+ let second : Value = user2. put ( "/api/v1/me/tokens" , NEW_BAR ) . good ( ) ;
96
98
97
- assert_ne ! ( first_token . api_token. token, second_token . api_token. token) ;
99
+ assert_ne ! ( first [ " api_token" ] [ " token" ] , second [ " api_token" ] [ " token" ] ) ;
98
100
}
99
101
100
102
#[ test]
@@ -123,11 +125,14 @@ fn create_token_with_scopes() {
123
125
}
124
126
} ) ;
125
127
126
- let json: NewResponse = user
127
- . put ( "/api/v1/me/tokens" , & serde_json:: to_vec ( & json) . unwrap ( ) )
128
- . good ( ) ;
129
- assert_eq ! ( json. api_token. name, "bar" ) ;
130
- assert ! ( !json. api_token. token. is_empty( ) ) ;
128
+ let response = user. put :: < ( ) > ( "/api/v1/me/tokens" , & serde_json:: to_vec ( & json) . unwrap ( ) ) ;
129
+ assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
130
+ assert_yaml_snapshot ! ( response. into_json( ) , {
131
+ ".api_token.id" => insta:: any_id_redaction( ) ,
132
+ ".api_token.created_at" => "[datetime]" ,
133
+ ".api_token.last_used_at" => "[datetime]" ,
134
+ ".api_token.token" => insta:: api_token_redaction( ) ,
135
+ } ) ;
131
136
132
137
let tokens: Vec < ApiToken > =
133
138
app. db ( |conn| assert_ok ! ( ApiToken :: belonging_to( user. as_model( ) ) . load( conn) ) ) ;
@@ -160,11 +165,14 @@ fn create_token_with_null_scopes() {
160
165
}
161
166
} ) ;
162
167
163
- let json: NewResponse = user
164
- . put ( "/api/v1/me/tokens" , & serde_json:: to_vec ( & json) . unwrap ( ) )
165
- . good ( ) ;
166
- assert_eq ! ( json. api_token. name, "bar" ) ;
167
- assert ! ( !json. api_token. token. is_empty( ) ) ;
168
+ let response = user. put :: < ( ) > ( "/api/v1/me/tokens" , & serde_json:: to_vec ( & json) . unwrap ( ) ) ;
169
+ assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
170
+ assert_yaml_snapshot ! ( response. into_json( ) , {
171
+ ".api_token.id" => insta:: any_id_redaction( ) ,
172
+ ".api_token.created_at" => "[datetime]" ,
173
+ ".api_token.last_used_at" => "[datetime]" ,
174
+ ".api_token.token" => insta:: api_token_redaction( ) ,
175
+ } ) ;
168
176
169
177
let tokens: Vec < ApiToken > =
170
178
app. db ( |conn| assert_ok ! ( ApiToken :: belonging_to( user. as_model( ) ) . load( conn) ) ) ;
0 commit comments