Skip to content

Commit 2dbb3db

Browse files
committed
Add test for minimal crate metadata endpoint
1 parent 29c21f5 commit 2dbb3db

File tree

3 files changed

+58
-1
lines changed

3 files changed

+58
-1
lines changed

src/tests/krate/krate.rs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
use crate::builders::{CrateBuilder, VersionBuilder};
2+
use crate::util::{RequestHelper, TestApp};
3+
use diesel::prelude::*;
4+
5+
#[test]
6+
fn krate() {
7+
let (app, anon, user) = TestApp::init().with_user();
8+
let user = user.as_model();
9+
10+
let krate = app.db(|conn| {
11+
use cargo_registry::schema::versions;
12+
use diesel::{update, ExpressionMethods};
13+
14+
let krate = CrateBuilder::new("foo_show", user.id)
15+
.description("description")
16+
.documentation("https://example.com")
17+
.homepage("http://example.com")
18+
.version(VersionBuilder::new("1.0.0"))
19+
.version(VersionBuilder::new("0.5.0"))
20+
.version(VersionBuilder::new("0.5.1"))
21+
.keyword("kw1")
22+
.downloads(20)
23+
.recent_downloads(10)
24+
.expect_build(conn);
25+
26+
// Make version 1.0.0 mimic a version published before we started recording who published
27+
// versions
28+
let none: Option<i32> = None;
29+
update(versions::table)
30+
.filter(versions::num.eq("1.0.0"))
31+
.set(versions::published_by.eq(none))
32+
.execute(conn)
33+
.unwrap();
34+
35+
krate
36+
});
37+
38+
let json = anon.show_crate_minimal("foo_show");
39+
assert_eq!(json.name, krate.name);
40+
assert_eq!(json.id, krate.name);
41+
assert_eq!(json.description, krate.description);
42+
assert_eq!(json.homepage, krate.homepage);
43+
assert_eq!(json.documentation, krate.documentation);
44+
assert_eq!(json.keywords, None);
45+
assert_eq!(json.recent_downloads, None);
46+
assert_eq!(json.versions, None);
47+
}

src/tests/krate/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
mod dependencies;
22
mod downloads;
33
mod following;
4+
mod krate;
45
mod owners;
56
mod publish;
67
mod reverse_dependencies;

src/tests/util.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@ use crate::{
2323
builders::PublishBuilder, CategoryListResponse, CategoryResponse, CrateList, CrateResponse,
2424
GoodCrate, OkBool, OwnersResponse, VersionResponse,
2525
};
26-
use cargo_registry::models::{ApiToken, CreatedApiToken, User};
26+
use cargo_registry::{
27+
models::{ApiToken, CreatedApiToken, User},
28+
views::EncodableCrate,
29+
};
2730

2831
use conduit::{BoxError, Handler, Method};
2932
use conduit_cookie::SessionMiddleware;
@@ -162,6 +165,12 @@ pub trait RequestHelper {
162165
self.get(&url).good()
163166
}
164167

168+
/// Request the JSON used for a crate's minimal page
169+
fn show_crate_minimal(&self, krate_name: &str) -> EncodableCrate {
170+
let url = format!("/api/v1/crates/{krate_name}/crate");
171+
self.get(&url).good()
172+
}
173+
165174
/// Request the JSON used to list a crate's owners
166175
fn show_crate_owners(&self, krate_name: &str) -> OwnersResponse {
167176
let url = format!("/api/v1/crates/{krate_name}/owners");

0 commit comments

Comments
 (0)