Skip to content

Commit 765930d

Browse files
committed
Split up badge tests into smaller ones
1 parent 556dcff commit 765930d

File tree

1 file changed

+176
-54
lines changed

1 file changed

+176
-54
lines changed

src/tests/badge.rs

Lines changed: 176 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,25 @@
11
use conduit::{Request, Method};
2+
use conduit_test::MockRequest;
23
use postgres::GenericConnection;
34

4-
use cargo_registry::db::RequestTransaction;
55
use cargo_registry::badge::Badge;
6+
use cargo_registry::db::RequestTransaction;
7+
use cargo_registry::krate::Crate;
68

79
use std::collections::HashMap;
810

11+
struct BadgeRef {
12+
appveyor: Badge,
13+
appveyor_attributes: HashMap<String, String>,
14+
travis_ci: Badge,
15+
travis_ci_attributes: HashMap<String, String>,
16+
gitlab: Badge,
17+
gitlab_attributes: HashMap<String, String>,
18+
}
19+
920
fn tx(req: &Request) -> &GenericConnection { req.tx().unwrap() }
1021

11-
#[test]
12-
fn update_crate() {
22+
fn set_up() -> (MockRequest, Crate, BadgeRef) {
1323
let (_b, app, _middle) = ::app();
1424
let mut req = ::req(app, Method::Get, "/api/v1/crates/badged_crate");
1525

@@ -59,39 +69,113 @@ fn update_crate() {
5969
String::from("rust-lang/rust")
6070
);
6171

62-
let mut badges = HashMap::new();
72+
let badges = BadgeRef {
73+
appveyor: appveyor,
74+
appveyor_attributes: badge_attributes_appveyor,
75+
travis_ci: travis_ci,
76+
travis_ci_attributes: badge_attributes_travis_ci,
77+
gitlab: gitlab,
78+
gitlab_attributes: badge_attributes_gitlab,
79+
};
80+
(req, krate, badges)
81+
}
82+
83+
#[test]
84+
fn update_no_badges() {
85+
// Add no badges
86+
let (req, krate, _) = set_up();
87+
88+
let badges = HashMap::new();
6389

6490
// Updating with no badges has no effect
65-
Badge::update_crate(tx(&req), &krate, badges.clone()).unwrap();
91+
Badge::update_crate(tx(&req), &krate, badges).unwrap();
6692
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![]);
93+
}
94+
95+
#[test]
96+
fn update_add_appveyor() {
97+
// Add an appveyor badge
98+
let (req, krate, test_badges) = set_up();
6799

68-
// Happy path adding one badge
100+
let mut badges = HashMap::new();
69101
badges.insert(
70102
String::from("appveyor"),
71-
badge_attributes_appveyor.clone()
103+
test_badges.appveyor_attributes
72104
);
73-
Badge::update_crate(tx(&req), &krate, badges.clone()).unwrap();
74-
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![appveyor.clone()]);
105+
Badge::update_crate(tx(&req), &krate, badges).unwrap();
106+
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![test_badges.appveyor]);
107+
}
75108

76-
// Replacing one badge with another
77-
badges.clear();
109+
#[test]
110+
fn update_add_travis_ci() {
111+
// Add a travis ci badge
112+
let (req, krate, test_badges) = set_up();
113+
114+
let mut badges = HashMap::new();
78115
badges.insert(
79116
String::from("travis-ci"),
80-
badge_attributes_travis_ci.clone()
117+
test_badges.travis_ci_attributes
81118
);
82-
Badge::update_crate(tx(&req), &krate, badges.clone()).unwrap();
83-
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![travis_ci.clone()]);
119+
Badge::update_crate(tx(&req), &krate, badges).unwrap();
120+
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![test_badges.travis_ci]);
121+
}
84122

85-
// Replacing one badge with another (again)
86-
badges.clear();
123+
#[test]
124+
fn update_add_gitlab() {
125+
// Add a gitlab badge
126+
let (req, krate, test_badges) = set_up();
127+
128+
let mut badges = HashMap::new();
87129
badges.insert(
88130
String::from("gitlab"),
89-
badge_attributes_gitlab.clone()
131+
test_badges.gitlab_attributes
132+
);
133+
Badge::update_crate(tx(&req), &krate, badges).unwrap();
134+
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![test_badges.gitlab]);
135+
}
136+
137+
#[test]
138+
fn replace_badge() {
139+
// Replacing one badge with another
140+
let (req, krate, test_badges) = set_up();
141+
142+
// Add a badge
143+
let mut badges = HashMap::new();
144+
badges.insert(
145+
String::from("gitlab"),
146+
test_badges.gitlab_attributes
90147
);
91148
Badge::update_crate(tx(&req), &krate, badges.clone()).unwrap();
92-
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![gitlab.clone()]);
149+
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![test_badges.gitlab]);
93150

94-
// Updating badge attributes
151+
// Replace with another badge
152+
badges.clear();
153+
badges.insert(
154+
String::from("travis-ci"),
155+
test_badges.travis_ci_attributes.clone()
156+
);
157+
Badge::update_crate(tx(&req), &krate, badges).unwrap();
158+
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![test_badges.travis_ci]);
159+
}
160+
161+
#[test]
162+
fn update_attributes() {
163+
// Update badge attributes
164+
let (req, krate, test_badges) = set_up();
165+
166+
// Add a travis-ci badge
167+
let mut badges = HashMap::new();
168+
badges.insert(
169+
String::from("travis-ci"),
170+
test_badges.travis_ci_attributes
171+
);
172+
Badge::update_crate(tx(&req), &krate, badges).unwrap();
173+
let current_badges = krate.badges(tx(&req)).unwrap();
174+
assert_eq!(current_badges.len(), 1);
175+
assert!(current_badges.contains(&test_badges.travis_ci));
176+
177+
// Now update the travis ci badge with different attributes
178+
let mut badges = HashMap::new();
95179
let travis_ci2 = Badge::TravisCi {
96180
branch: None,
97181
repository: String::from("rust-lang/rust"),
@@ -105,73 +189,115 @@ fn update_crate() {
105189
String::from("travis-ci"),
106190
badge_attributes_travis_ci2.clone()
107191
);
108-
Badge::update_crate(tx(&req), &krate, badges.clone()).unwrap();
192+
Badge::update_crate(tx(&req), &krate, badges).unwrap();
109193
let current_badges = krate.badges(tx(&req)).unwrap();
110-
assert_eq!(current_badges.len(), 2);
111-
assert!(current_badges.contains(&gitlab));
194+
assert_eq!(current_badges.len(), 1);
112195
assert!(current_badges.contains(&travis_ci2));
196+
}
113197

114-
// Removing one badge
115-
badges.clear();
116-
Badge::update_crate(tx(&req), &krate, badges.clone()).unwrap();
117-
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![]);
198+
#[test]
199+
fn clear_badges() {
200+
// Add 3 badges and then remove them
201+
let (req, krate, test_badges) = set_up();
202+
203+
let mut badges = HashMap::new();
118204

119205
// Adding 3 badges
120206
badges.insert(
121207
String::from("appveyor"),
122-
badge_attributes_appveyor.clone()
208+
test_badges.appveyor_attributes
123209
);
124210
badges.insert(
125211
String::from("travis-ci"),
126-
badge_attributes_travis_ci.clone()
212+
test_badges.travis_ci_attributes
127213
);
128214
badges.insert(
129215
String::from("gitlab"),
130-
badge_attributes_gitlab.clone()
216+
test_badges.gitlab_attributes
131217
);
132-
Badge::update_crate(
133-
tx(&req), &krate, badges.clone()
134-
).unwrap();
218+
Badge::update_crate(tx(&req), &krate, badges.clone()).unwrap();
135219

136220
let current_badges = krate.badges(tx(&req)).unwrap();
137221
assert_eq!(current_badges.len(), 3);
138-
assert!(current_badges.contains(&appveyor));
139-
assert!(current_badges.contains(&travis_ci));
140-
assert!(current_badges.contains(&gitlab));
222+
assert!(current_badges.contains(&test_badges.appveyor));
223+
assert!(current_badges.contains(&test_badges.travis_ci));
224+
assert!(current_badges.contains(&test_badges.gitlab));
141225

142226
// Removing all badges
143227
badges.clear();
144-
Badge::update_crate(tx(&req), &krate, badges.clone()).unwrap();
228+
Badge::update_crate(tx(&req), &krate, badges).unwrap();
145229
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![]);
230+
}
146231

147-
// Attempting to add one valid badge (appveyor) and three invalid badges
148-
// (travis-ci and gitlab without a required attribute and an unknown badge
149-
// type)
232+
#[test]
233+
fn appveyor_extra_keys() {
234+
// Add a badge with extra invalid keys
235+
let (req, krate, test_badges) = set_up();
150236

151-
// Extra invalid keys are fine, we'll just ignore those
152-
badge_attributes_appveyor.insert(
237+
let mut badges = HashMap::new();
238+
239+
// Extra invalid keys are fine, they just get ignored
240+
let mut appveyor_attributes = test_badges.appveyor_attributes.clone();
241+
appveyor_attributes.insert(
153242
String::from("extra"),
154243
String::from("info")
155244
);
156245
badges.insert(
157246
String::from("appveyor"),
158-
badge_attributes_appveyor.clone()
247+
test_badges.appveyor_attributes
159248
);
160249

250+
Badge::update_crate(tx(&req), &krate, badges).unwrap();
251+
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![test_badges.appveyor]);
252+
}
253+
254+
#[test]
255+
fn travis_ci_required_keys() {
256+
// Add a travis ci badge missing a required field
257+
let (req, krate, mut test_badges) = set_up();
258+
259+
let mut badges = HashMap::new();
260+
161261
// Repository is a required key
162-
badge_attributes_travis_ci.remove("repository");
262+
test_badges.travis_ci_attributes.remove("repository");
163263
badges.insert(
164264
String::from("travis-ci"),
165-
badge_attributes_travis_ci.clone()
265+
test_badges.travis_ci_attributes
166266
);
167267

268+
let invalid_badges = Badge::update_crate(tx(&req), &krate, badges).unwrap();
269+
assert_eq!(invalid_badges.len(), 1);
270+
assert!(invalid_badges.contains(&String::from("travis-ci")));
271+
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![]);
272+
}
273+
274+
#[test]
275+
fn gitlab_required_keys() {
276+
// Add a gitlab badge missing a required field
277+
let (req, krate, mut test_badges) = set_up();
278+
279+
let mut badges = HashMap::new();
280+
168281
// Repository is a required key
169-
badge_attributes_gitlab.remove("repository");
282+
test_badges.gitlab_attributes.remove("repository");
170283
badges.insert(
171284
String::from("gitlab"),
172-
badge_attributes_gitlab.clone()
285+
test_badges.gitlab_attributes
173286
);
174287

288+
let invalid_badges = Badge::update_crate(tx(&req), &krate, badges).unwrap();
289+
assert_eq!(invalid_badges.len(), 1);
290+
assert!(invalid_badges.contains(&String::from("gitlab")));
291+
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![]);
292+
}
293+
294+
#[test]
295+
fn unknown_badge() {
296+
// Add an unknown badge
297+
let (req, krate, _) = set_up();
298+
299+
let mut badges = HashMap::new();
300+
175301
// This is not a badge that crates.io knows about
176302
let mut invalid_attributes = HashMap::new();
177303
invalid_attributes.insert(
@@ -180,15 +306,11 @@ fn update_crate() {
180306
);
181307
badges.insert(
182308
String::from("not-a-badge"),
183-
invalid_attributes.clone()
309+
invalid_attributes
184310
);
185311

186-
let invalid_badges = Badge::update_crate(
187-
tx(&req), &krate, badges.clone()
188-
).unwrap();
189-
assert_eq!(invalid_badges.len(), 3);
190-
assert!(invalid_badges.contains(&String::from("travis-ci")));
191-
assert!(invalid_badges.contains(&String::from("gitlab")));
312+
let invalid_badges = Badge::update_crate(tx(&req), &krate, badges).unwrap();
313+
assert_eq!(invalid_badges.len(), 1);
192314
assert!(invalid_badges.contains(&String::from("not-a-badge")));
193-
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![appveyor.clone()]);
315+
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![]);
194316
}

0 commit comments

Comments
 (0)