Skip to content

Commit e36f29b

Browse files
committed
Use insta snapshot rather than custom type+field assertion
1 parent f08ba7c commit e36f29b

File tree

4 files changed

+45
-44
lines changed

4 files changed

+45
-44
lines changed

src/tests/mod.rs

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -85,22 +85,6 @@ pub struct OkBool {
8585
ok: bool,
8686
}
8787
#[derive(Deserialize, Debug)]
88-
pub struct AdminListResponse {
89-
user_email: Option<String>,
90-
user_email_verified: bool,
91-
crates: Vec<AdminCrateInfo>,
92-
}
93-
#[derive(Deserialize, Debug)]
94-
pub struct AdminCrateInfo {
95-
name: String,
96-
description: Option<String>,
97-
downloads: i64,
98-
num_versions: usize,
99-
yanked: bool,
100-
default_version_num: String,
101-
num_rev_deps: i64,
102-
}
103-
#[derive(Deserialize, Debug)]
10488
pub struct OwnerResp {
10589
// server must include `ok: true` to support old cargo clients
10690
ok: bool,

src/tests/routes/crates/admin.rs

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,20 @@ use crate::{
77
};
88
use diesel::prelude::*;
99
use diesel_async::RunQueryDsl;
10-
use insta::assert_snapshot;
10+
use insta::{assert_json_snapshot, assert_snapshot};
1111

1212
#[tokio::test(flavor = "multi_thread")]
1313
async fn admin_list_by_a_non_admin_fails() {
1414
let (_app, anon, user) = TestApp::init().with_user().await;
1515

16-
let response = anon.admin_list("anything").await;
16+
let response = anon.admin_list::<()>("anything").await;
1717
assert_snapshot!(response.status(), @"403 Forbidden");
1818
assert_snapshot!(
1919
response.text(),
2020
@r#"{"errors":[{"detail":"this action requires authentication"}]}"#
2121
);
2222

23-
let response = user.admin_list("anything").await;
23+
let response = user.admin_list::<()>("anything").await;
2424
assert_snapshot!(response.status(), @"403 Forbidden");
2525
assert_snapshot!(
2626
response.text(),
@@ -65,29 +65,11 @@ async fn index_include_yanked() -> anyhow::Result<()> {
6565

6666
// Include fully yanked (all versions were yanked) crates
6767
let username = &user.gh_login;
68-
let json = admin.admin_list(username).await.good();
68+
let response = admin.admin_list::<()>(username).await;
6969

70-
assert_eq!(json.user_email.unwrap(), "foo@example.com");
71-
assert!(json.user_email_verified);
72-
assert_eq!(json.crates.len(), 2);
73-
74-
let json_crate_0 = &json.crates[0];
75-
assert_eq!(json_crate_0.name, "all_yanked");
76-
assert!(json_crate_0.description.is_none());
77-
assert_eq!(json_crate_0.downloads, 0);
78-
assert_eq!(json_crate_0.num_versions, 2);
79-
assert!(json_crate_0.yanked);
80-
assert_eq!(json_crate_0.default_version_num, "2.0.0");
81-
assert_eq!(json_crate_0.num_rev_deps, 0);
82-
83-
let json_crate_1 = &json.crates[1];
84-
assert_eq!(json_crate_1.name, "unyanked");
85-
assert_eq!(json_crate_1.description.as_ref().unwrap(), "My Fun Crate");
86-
assert_eq!(json_crate_1.downloads, 536);
87-
assert_eq!(json_crate_1.num_versions, 3);
88-
assert!(!json_crate_1.yanked);
89-
assert_eq!(json_crate_1.default_version_num, "1.0.0");
90-
assert_eq!(json_crate_1.num_rev_deps, 1);
70+
assert_json_snapshot!(response.json(), {
71+
".crates[].updated_at" => "[datetime]",
72+
});
9173

9274
Ok(())
9375
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
---
2+
source: src/tests/routes/crates/admin.rs
3+
expression: response.json()
4+
snapshot_kind: text
5+
---
6+
{
7+
"crates": [
8+
{
9+
"bin_names": null,
10+
"crate_size": 0,
11+
"default_version_num": "2.0.0",
12+
"description": null,
13+
"downloads": 0,
14+
"name": "all_yanked",
15+
"num_rev_deps": 0,
16+
"num_versions": 2,
17+
"updated_at": "[datetime]",
18+
"yanked": true
19+
},
20+
{
21+
"bin_names": null,
22+
"crate_size": 0,
23+
"default_version_num": "1.0.0",
24+
"description": "My Fun Crate",
25+
"downloads": 536,
26+
"name": "unyanked",
27+
"num_rev_deps": 1,
28+
"num_versions": 3,
29+
"updated_at": "[datetime]",
30+
"yanked": false
31+
}
32+
],
33+
"user_email": "foo@example.com",
34+
"user_email_verified": true
35+
}

src/tests/util.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
2222
use crate::models::{ApiToken, User};
2323
use crate::tests::{
24-
AdminListResponse, CategoryListResponse, CategoryResponse, CrateList, CrateResponse, GoodCrate,
25-
OwnerResp, OwnersResponse, VersionResponse,
24+
CategoryListResponse, CategoryResponse, CrateList, CrateResponse, GoodCrate, OwnerResp,
25+
OwnersResponse, VersionResponse,
2626
};
2727
use std::future::Future;
2828

@@ -187,7 +187,7 @@ pub trait RequestHelper {
187187
}
188188

189189
/// Request the JSON used for the admin list page
190-
async fn admin_list(&self, owner: &str) -> Response<AdminListResponse> {
190+
async fn admin_list<T>(&self, owner: &str) -> Response<T> {
191191
let url = format!("/api/private/admin_list/{owner}");
192192
self.get(&url).await
193193
}

0 commit comments

Comments
 (0)