Skip to content

Commit ed309a6

Browse files
committed
Use insta for GET /api/v1/summary tests
1 parent 8480300 commit ed309a6

File tree

7 files changed

+537
-42
lines changed

7 files changed

+537
-42
lines changed

Cargo.lock

Lines changed: 89 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ url = "2.1"
8888
conduit-test = "0.9.0-alpha.3"
8989
diesel_migrations = { version = "1.3.0", features = ["postgres"] }
9090
hyper-tls = "0.4"
91+
insta = { version = "1.1.0", features = ["redactions"] }
9192
lazy_static = "1.0"
9293
tokio = { version = "0.2", default-features = false, features = ["stream"]}
9394
tower-service = "0.3.0"

src/tests/all.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ mod categories;
5050
mod category;
5151
mod dump_db;
5252
mod git;
53+
mod insta;
5354
mod keyword;
5455
mod krate;
5556
mod owners;

src/tests/insta.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
use chrono::DateTime;
2+
use insta::{dynamic_redaction, internals::Redaction};
3+
4+
pub fn rfc3339_redaction() -> Redaction {
5+
dynamic_redaction(|value, _| {
6+
assert!(DateTime::parse_from_rfc3339(value.as_str().unwrap()).is_ok());
7+
"[datetime]"
8+
})
9+
}

src/tests/krate.rs

Lines changed: 11 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
use crate::{
22
builders::{CrateBuilder, DependencyBuilder, PublishBuilder, VersionBuilder},
3+
insta::rfc3339_redaction,
34
new_category, new_dependency, new_user, CrateMeta, CrateResponse, GoodCrate, OkBool,
45
RequestHelper, TestApp,
56
};
67
use cargo_registry::{
78
models::{krate::MAX_NAME_LENGTH, Category, Crate},
89
schema::{api_tokens, crates, emails, metadata, versions, versions_published_by},
9-
views::{
10-
EncodableCategory, EncodableCrate, EncodableDependency, EncodableKeyword, EncodableVersion,
11-
EncodableVersionDownload,
12-
},
10+
views::{EncodableDependency, EncodableVersion, EncodableVersionDownload},
1311
};
1412
use std::{
1513
collections::HashMap,
@@ -22,6 +20,8 @@ use chrono::Utc;
2220
use conduit::StatusCode;
2321
use diesel::{dsl::*, prelude::*, update};
2422
use flate2::{write::GzEncoder, Compression};
23+
use insta::assert_json_snapshot;
24+
use serde_json::Value;
2525

2626
#[derive(Deserialize)]
2727
struct VersionsList {
@@ -42,18 +42,6 @@ struct Downloads {
4242
version_downloads: Vec<EncodableVersionDownload>,
4343
}
4444

45-
#[derive(Deserialize)]
46-
struct SummaryResponse {
47-
num_downloads: i64,
48-
num_crates: i64,
49-
new_crates: Vec<EncodableCrate>,
50-
most_downloaded: Vec<EncodableCrate>,
51-
most_recently_downloaded: Vec<EncodableCrate>,
52-
just_updated: Vec<EncodableCrate>,
53-
popular_keywords: Vec<EncodableKeyword>,
54-
popular_categories: Vec<EncodableCategory>,
55-
}
56-
5745
impl crate::util::MockAnonymousUser {
5846
fn reverse_dependencies(&self, krate_name: &str) -> RevDeps {
5947
let url = format!("/api/v1/crates/{}/reverse_dependencies", krate_name);
@@ -1330,7 +1318,8 @@ fn new_krate_records_verified_email() {
13301318
#[test]
13311319
fn summary_doesnt_die() {
13321320
let (_, anon) = TestApp::init().empty();
1333-
anon.get::<SummaryResponse>("/api/v1/summary").good();
1321+
let json: Value = anon.get("/api/v1/summary").good();
1322+
assert_json_snapshot!(json);
13341323
}
13351324

13361325
#[test]
@@ -1403,31 +1392,11 @@ fn summary_new_crates() {
14031392
.unwrap();
14041393
});
14051394

1406-
let json: SummaryResponse = anon.get("/api/v1/summary").good();
1407-
1408-
assert_eq!(json.num_crates, 5);
1409-
assert_eq!(json.num_downloads, 6000);
1410-
assert_eq!(json.most_downloaded[0].name, "most_recent_downloads");
1411-
assert_eq!(json.most_downloaded[0].downloads, 5000);
1412-
assert_eq!(json.most_downloaded[0].recent_downloads, Some(50));
1413-
assert_eq!(
1414-
json.most_recently_downloaded[0].name,
1415-
"most_recent_downloads"
1416-
);
1417-
assert_eq!(json.most_recently_downloaded[0].recent_downloads, Some(50));
1418-
assert_eq!(json.popular_keywords[0].keyword, "popular");
1419-
assert_eq!(json.popular_categories[0].category, "Category 1");
1420-
assert_eq!(json.just_updated.len(), 2);
1421-
1422-
assert_eq!(json.just_updated[0].name, "just_updated_patch");
1423-
assert_eq!(json.just_updated[0].max_version, "0.2.0");
1424-
assert_eq!(json.just_updated[0].newest_version, "0.1.1");
1425-
1426-
assert_eq!(json.just_updated[1].name, "just_updated");
1427-
assert_eq!(json.just_updated[1].max_version, "0.1.2");
1428-
assert_eq!(json.just_updated[1].newest_version, "0.1.2");
1429-
1430-
assert_eq!(json.new_crates.len(), 5);
1395+
let json: Value = anon.get("/api/v1/summary").good();
1396+
assert_json_snapshot!(json, {
1397+
".**.created_at" => rfc3339_redaction(),
1398+
".**.updated_at" => rfc3339_redaction(),
1399+
});
14311400
}
14321401

14331402
#[test]
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
source: src/tests/krate.rs
3+
expression: json
4+
---
5+
{
6+
"just_updated": [],
7+
"most_downloaded": [],
8+
"most_recently_downloaded": [],
9+
"new_crates": [],
10+
"num_crates": 0,
11+
"num_downloads": 0,
12+
"popular_categories": [],
13+
"popular_keywords": []
14+
}

0 commit comments

Comments
 (0)