Skip to content

Commit 53b4262

Browse files
committed
Add test for rev-dep API endpoint.
This includes making some changes to the test harness, e.g. allowing dependencies to be added from multiple versions of the dependent crate.
1 parent 99a46f4 commit 53b4262

File tree

3 files changed

+33
-16
lines changed

3 files changed

+33
-16
lines changed

src/tests/all.rs

100644100755
+10-5
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ use conduit_test::MockRequest;
2424
use cargo_registry::app::App;
2525
use cargo_registry::db::{mod, RequestTransaction};
2626
use cargo_registry::{User, Crate, Version, Keyword};
27+
use cargo_registry::util::CargoResult;
2728

2829
macro_rules! t( ($e:expr) => (
2930
match $e {
@@ -213,8 +214,14 @@ fn mock_user(req: &mut Request, u: User) -> User {
213214
}
214215

215216
fn mock_crate(req: &mut Request, krate: Crate) -> Crate {
217+
let (c, v) = mock_crate_vers(req, krate, &semver::Version::parse("1.0.0").unwrap());
218+
v.unwrap();
219+
c
220+
}
221+
fn mock_crate_vers(req: &mut Request, krate: Crate, v: &semver::Version)
222+
-> (Crate, CargoResult<Version>) {
216223
let user = req.extensions().find::<User>().unwrap();
217-
let krate = Crate::find_or_insert(req.tx().unwrap(), krate.name.as_slice(),
224+
let mut krate = Crate::find_or_insert(req.tx().unwrap(), krate.name.as_slice(),
218225
user.id, &krate.description,
219226
&krate.homepage,
220227
&krate.documentation,
@@ -224,10 +231,8 @@ fn mock_crate(req: &mut Request, krate: Crate) -> Crate {
224231
&krate.license).unwrap();
225232
Keyword::update_crate(req.tx().unwrap(), &krate,
226233
krate.keywords.as_slice()).unwrap();
227-
Version::insert(req.tx().unwrap(), krate.id,
228-
&semver::Version::parse("1.0.0").unwrap(),
229-
&HashMap::new(), &[]).unwrap();
230-
return krate;
234+
let v = krate.add_version(req.tx().unwrap(), v, &HashMap::new(), &[]);
235+
(krate, v)
231236
}
232237

233238
fn mock_keyword(req: &mut Request, name: &str) -> Keyword {

src/tests/krate.rs

+13-5
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,7 @@ fn dependencies() {
497497
let c1 = ::krate("foo");
498498
let c2 = ::krate("bar");
499499
middle.add(::middleware::MockUser(user.clone()));
500-
middle.add(::middleware::MockDependency(c1.clone(), c2.clone()));
500+
middle.add(::middleware::MockDependency(c1.clone(), "1.0.0", c2.clone()));
501501
let rel = format!("/api/v1/crates/{}/1.0.0/dependencies", c1.name);
502502
let mut req = MockRequest::new(conduit::Get, rel.as_slice());
503503
let mut response = ok_resp!(middle.call(&mut req));
@@ -701,16 +701,24 @@ fn reverse_dependencies() {
701701
let c1 = ::krate("foo");
702702
let c2 = ::krate("bar");
703703
middle.add(::middleware::MockUser(user.clone()));
704-
middle.add(::middleware::MockDependency(c1.clone(), c2.clone()));
705-
let rel = format!("/api/v1/crates/{}/1.0.0/reverse_dependencies", c2.name);
704+
// multiple dependencies of c1 on c2, to detect we handle this
705+
// correctly.
706+
middle.add(::middleware::MockDependency(c1.clone(), "1.0.0", c2.clone()));
707+
middle.add(::middleware::MockDependency(c1.clone(), "1.1.0", c2.clone()));
708+
709+
let rel = format!("/api/v1/crates/{}/reverse_dependencies", c2.name);
706710
let mut req = MockRequest::new(conduit::Get, rel.as_slice());
707711
let mut response = ok_resp!(middle.call(&mut req));
708712
let deps = ::json::<RevDeps>(&mut response);
713+
assert_eq!(deps.reverse_dependencies.len(), 1);
709714
assert_eq!(deps.reverse_dependencies[0].crate_id.as_slice(), &*c1.name);
710715
drop(req);
711716

712-
let rel = format!("/api/v1/crates/{}/1.0.2/reverse_dependencies", c1.name);
717+
// c1 has no dependent crates.
718+
let rel = format!("/api/v1/crates/{}/reverse_dependencies", c1.name);
713719
let mut req = MockRequest::new(conduit::Get, rel.as_slice());
714720
let mut response = ok_resp!(middle.call(&mut req));
715-
::json::<::Bad>(&mut response);
721+
let deps = ::json::<RevDeps>(&mut response);
722+
assert_eq!(deps.reverse_dependencies.len(), 0);
723+
drop(req);
716724
}

src/tests/middleware.rs

+10-6
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,19 @@ impl Middleware for MockCrate {
2828
}
2929
}
3030

31-
pub struct MockDependency(pub Crate, pub Crate);
31+
pub struct MockDependency(pub Crate, pub &'static str, pub Crate);
3232

3333
impl Middleware for MockDependency {
3434
fn before(&self, req: &mut Request) -> Result<(), Box<Show + 'static>> {
35-
let MockDependency(ref a, ref b) = *self;
36-
let crate_a = ::mock_crate(req, a.clone());
37-
let crate_b = ::mock_crate(req, b.clone());
38-
let va = crate_a.versions(req.tx().unwrap()).unwrap()[0].id;
39-
Dependency::insert(req.tx().unwrap(), va, crate_b.id,
35+
let MockDependency(ref a, version, ref b) = *self;
36+
let vers = semver::Version::parse(version).unwrap();
37+
let (_crate_a, va) = ::mock_crate_vers(req, a.clone(), &vers);
38+
39+
// don't panic on duplicate uploads
40+
let (crate_b, _) = ::mock_crate_vers(req, b.clone(),
41+
&semver::Version::parse("1.0.0").unwrap());
42+
43+
Dependency::insert(req.tx().unwrap(), va.unwrap().id, crate_b.id,
4044
&semver::VersionReq::parse(">= 0").unwrap(),
4145
Kind::Normal,
4246
false, true, &[], &None).unwrap();

0 commit comments

Comments
 (0)