Skip to content

Commit aa42f79

Browse files
committed
models/token: Derive MockApiTokenBuilder
1 parent d0c6551 commit aa42f79

File tree

1 file changed

+32
-17
lines changed

1 file changed

+32
-17
lines changed

src/models/token.rs

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
mod scopes;
22

33
use chrono::NaiveDateTime;
4+
use derive_builder::Builder;
45
use diesel::prelude::*;
56

67
pub use self::scopes::{CrateScope, EndpointScope};
@@ -11,24 +12,34 @@ use crate::util::rfc3339;
1112
use crate::util::token::{HashedToken, PlainToken};
1213

1314
/// 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)]
1516
#[diesel(belongs_to(User))]
17+
#[builder(name = "MockApiTokenBuilder")]
1618
pub struct ApiToken {
19+
#[builder(default)]
1720
pub id: i32,
1821
#[serde(skip)]
22+
#[builder(default)]
1923
pub user_id: i32,
24+
#[builder(default, setter(into))]
2025
pub name: String,
2126
#[serde(with = "rfc3339")]
27+
#[builder(default, setter(strip_option))]
2228
pub created_at: NaiveDateTime,
2329
#[serde(with = "rfc3339::option")]
30+
#[builder(default, setter(strip_option))]
2431
pub last_used_at: Option<NaiveDateTime>,
2532
#[serde(skip)]
33+
#[builder(default = "false")]
2634
pub revoked: bool,
2735
/// `None` or a list of crate scope patterns (see RFC #2947)
36+
#[builder(default, setter(strip_option))]
2837
pub crate_scopes: Option<Vec<CrateScope>>,
2938
/// A list of endpoint scopes or `None` for the `legacy` endpoint scope (see RFC #2947)
39+
#[builder(default, setter(strip_option))]
3040
pub endpoint_scopes: Option<Vec<EndpointScope>>,
3141
#[serde(with = "rfc3339::option")]
42+
#[builder(default, setter(strip_option))]
3243
pub expired_at: Option<NaiveDateTime>,
3344
}
3445

@@ -95,6 +106,10 @@ impl ApiToken {
95106
.or_else(|_| tokens.select(ApiToken::as_select()).first(conn))
96107
.map_err(Into::into)
97108
}
109+
110+
pub fn mock_builder() -> MockApiTokenBuilder {
111+
MockApiTokenBuilder::default()
112+
}
98113
}
99114

100115
#[derive(Debug)]
@@ -110,22 +125,22 @@ mod tests {
110125

111126
#[test]
112127
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+
129144
let json = serde_json::to_string(&tok).unwrap();
130145
assert_some!(json
131146
.as_str()

0 commit comments

Comments
 (0)