1
1
mod scopes;
2
2
3
3
use chrono:: NaiveDateTime ;
4
+ use derive_builder:: Builder ;
4
5
use diesel:: prelude:: * ;
5
6
6
7
pub use self :: scopes:: { CrateScope , EndpointScope } ;
@@ -11,24 +12,34 @@ use crate::util::rfc3339;
11
12
use crate :: util:: token:: { HashedToken , PlainToken } ;
12
13
13
14
/// The model representing a row in the `api_tokens` database table.
14
- #[ derive( Debug , Identifiable , Queryable , Selectable , Associations , Serialize ) ]
15
+ #[ derive( Debug , Identifiable , Queryable , Selectable , Associations , Serialize , Builder ) ]
15
16
#[ diesel( belongs_to( User ) ) ]
17
+ #[ builder( name = "MockApiTokenBuilder" ) ]
16
18
pub struct ApiToken {
19
+ #[ builder( default ) ]
17
20
pub id : i32 ,
18
21
#[ serde( skip) ]
22
+ #[ builder( default ) ]
19
23
pub user_id : i32 ,
24
+ #[ builder( default , setter( into) ) ]
20
25
pub name : String ,
21
26
#[ serde( with = "rfc3339" ) ]
27
+ #[ builder( default , setter( strip_option) ) ]
22
28
pub created_at : NaiveDateTime ,
23
29
#[ serde( with = "rfc3339::option" ) ]
30
+ #[ builder( default , setter( strip_option) ) ]
24
31
pub last_used_at : Option < NaiveDateTime > ,
25
32
#[ serde( skip) ]
33
+ #[ builder( default = "false" ) ]
26
34
pub revoked : bool ,
27
35
/// `None` or a list of crate scope patterns (see RFC #2947)
36
+ #[ builder( default , setter( strip_option) ) ]
28
37
pub crate_scopes : Option < Vec < CrateScope > > ,
29
38
/// A list of endpoint scopes or `None` for the `legacy` endpoint scope (see RFC #2947)
39
+ #[ builder( default , setter( strip_option) ) ]
30
40
pub endpoint_scopes : Option < Vec < EndpointScope > > ,
31
41
#[ serde( with = "rfc3339::option" ) ]
42
+ #[ builder( default , setter( strip_option) ) ]
32
43
pub expired_at : Option < NaiveDateTime > ,
33
44
}
34
45
@@ -95,6 +106,10 @@ impl ApiToken {
95
106
. or_else ( |_| tokens. select ( ApiToken :: as_select ( ) ) . first ( conn) )
96
107
. map_err ( Into :: into)
97
108
}
109
+
110
+ pub fn mock_builder ( ) -> MockApiTokenBuilder {
111
+ MockApiTokenBuilder :: default ( )
112
+ }
98
113
}
99
114
100
115
#[ derive( Debug ) ]
@@ -110,22 +125,22 @@ mod tests {
110
125
111
126
#[ test]
112
127
fn api_token_serializes_to_rfc3339 ( ) {
113
- let tok = ApiToken {
114
- id : 12345 ,
115
- user_id : 23456 ,
116
- revoked : false ,
117
- name : "" . to_string ( ) ,
118
- created_at : NaiveDate :: from_ymd_opt ( 2017 , 1 , 6 )
119
- . unwrap ( )
120
- . and_hms_opt ( 14 , 23 , 11 )
121
- . unwrap ( ) ,
122
- last_used_at : NaiveDate :: from_ymd_opt ( 2017 , 1 , 6 )
123
- . unwrap ( )
124
- . and_hms_opt ( 14 , 23 , 12 ) ,
125
- crate_scopes : None ,
126
- endpoint_scopes : None ,
127
- expired_at : None ,
128
- } ;
128
+ let created_at = NaiveDate :: from_ymd_opt ( 2017 , 1 , 6 )
129
+ . unwrap ( )
130
+ . and_hms_opt ( 14 , 23 , 11 )
131
+ . unwrap ( ) ;
132
+
133
+ let last_used_at = NaiveDate :: from_ymd_opt ( 2017 , 1 , 6 )
134
+ . unwrap ( )
135
+ . and_hms_opt ( 14 , 23 , 12 )
136
+ . unwrap ( ) ;
137
+
138
+ let tok = ApiToken :: mock_builder ( )
139
+ . created_at ( created_at )
140
+ . last_used_at ( last_used_at )
141
+ . build ( )
142
+ . unwrap ( ) ;
143
+
129
144
let json = serde_json:: to_string ( & tok) . unwrap ( ) ;
130
145
assert_some ! ( json
131
146
. as_str( )
0 commit comments