Skip to content

Commit f105d92

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

File tree

1 file changed

+176
-51
lines changed

1 file changed

+176
-51
lines changed

src/tests/badge.rs

Lines changed: 176 additions & 51 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+
// Update attributes for the 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.clone()
72104
);
73105
Badge::update_crate(tx(&req), &krate, badges.clone()).unwrap();
74-
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![appveyor.clone()]);
106+
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![test_badges.appveyor.clone()]);
107+
}
108+
109+
#[test]
110+
fn update_add_travis_ci() {
111+
// Update attributes for the travis ci badge
112+
let (req, krate, test_badges) = set_up();
113+
114+
let mut badges = HashMap::new();
115+
badges.insert(
116+
String::from("travis_ci"),
117+
test_badges.travis_ci_attributes
118+
);
119+
Badge::update_crate(tx(&req), &krate, badges).unwrap();
120+
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![test_badges.travis_ci]);
121+
}
122+
123+
#[test]
124+
fn update_add_gitlab() {
125+
// Update attributes for the gitlab badge
126+
let (req, krate, test_badges) = set_up();
127+
128+
let mut badges = HashMap::new();
129+
badges.insert(
130+
String::from("gitlab"),
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+
}
75136

137+
#[test]
138+
fn replace_badge() {
76139
// Replacing one badge with another
77-
badges.clear();
140+
let (req, krate, test_badges) = set_up();
141+
142+
// Add a badge
143+
let mut badges = HashMap::new();
78144
badges.insert(
79-
String::from("travis-ci"),
80-
badge_attributes_travis_ci.clone()
145+
String::from("gitlab"),
146+
test_badges.gitlab_attributes
81147
);
82148
Badge::update_crate(tx(&req), &krate, badges.clone()).unwrap();
83-
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![travis_ci.clone()]);
149+
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![test_badges.gitlab]);
84150

85-
// Replacing one badge with another (again)
151+
// Replace with another badge
86152
badges.clear();
87153
badges.insert(
88-
String::from("gitlab"),
89-
badge_attributes_gitlab.clone()
154+
String::from("travis-ci"),
155+
test_badges.travis_ci_attributes.clone()
90156
);
91-
Badge::update_crate(tx(&req), &krate, badges.clone()).unwrap();
92-
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![gitlab.clone()]);
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();
93165

94-
// Updating badge attributes
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,118 @@ 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();
110194
assert_eq!(current_badges.len(), 2);
111-
assert!(current_badges.contains(&gitlab));
195+
assert!(current_badges.contains(&test_badges.gitlab));
112196
assert!(current_badges.contains(&travis_ci2));
197+
}
113198

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![]);
199+
#[test]
200+
fn clear_badges() {
201+
// Add 3 badges and then remove them
202+
let (req, krate, test_badges) = set_up();
203+
204+
let mut badges = HashMap::new();
118205

119206
// Adding 3 badges
120207
badges.insert(
121208
String::from("appveyor"),
122-
badge_attributes_appveyor.clone()
209+
test_badges.appveyor_attributes
123210
);
124211
badges.insert(
125212
String::from("travis-ci"),
126-
badge_attributes_travis_ci.clone()
213+
test_badges.travis_ci_attributes
127214
);
128215
badges.insert(
129216
String::from("gitlab"),
130-
badge_attributes_gitlab.clone()
217+
test_badges.gitlab_attributes
131218
);
132-
Badge::update_crate(
133-
tx(&req), &krate, badges.clone()
134-
).unwrap();
219+
Badge::update_crate(tx(&req), &krate, badges.clone()).unwrap();
135220

136221
let current_badges = krate.badges(tx(&req)).unwrap();
137222
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));
223+
assert!(current_badges.contains(&test_badges.appveyor));
224+
assert!(current_badges.contains(&test_badges.travis_ci));
225+
assert!(current_badges.contains(&test_badges.gitlab));
141226

142227
// Removing all badges
143228
badges.clear();
144-
Badge::update_crate(tx(&req), &krate, badges.clone()).unwrap();
229+
Badge::update_crate(tx(&req), &krate, badges).unwrap();
145230
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![]);
231+
}
146232

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)
233+
#[test]
234+
fn appveyor_extra_keys() {
235+
// Add a badge with extra invalid keys
236+
let (req, krate, test_badges) = set_up();
237+
238+
let mut badges = HashMap::new();
150239

151240
// Extra invalid keys are fine, we'll just ignore those
152-
badge_attributes_appveyor.insert(
241+
let mut appveyor_attributes = test_badges.appveyor_attributes.clone();
242+
appveyor_attributes.insert(
153243
String::from("extra"),
154244
String::from("info")
155245
);
156246
badges.insert(
157247
String::from("appveyor"),
158-
badge_attributes_appveyor.clone()
248+
test_badges.appveyor_attributes
159249
);
160250

251+
let invalid_badges = Badge::update_crate(tx(&req), &krate, badges).unwrap();
252+
assert_eq!(invalid_badges.len(), 1);
253+
assert!(invalid_badges.contains(&String::from("appveyor")));
254+
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![test_badges.appveyor]);
255+
}
256+
257+
#[test]
258+
fn travis_ci_required_keys() {
259+
// Add a travis ci badge missing a required field
260+
let (req, krate, mut test_badges) = set_up();
261+
262+
let mut badges = HashMap::new();
263+
161264
// Repository is a required key
162-
badge_attributes_travis_ci.remove("repository");
265+
test_badges.travis_ci_attributes.remove("repository");
163266
badges.insert(
164267
String::from("travis-ci"),
165-
badge_attributes_travis_ci.clone()
268+
test_badges.travis_ci_attributes
166269
);
167270

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

291+
let invalid_badges = Badge::update_crate(tx(&req), &krate, badges).unwrap();
292+
assert_eq!(invalid_badges.len(), 1);
293+
assert!(invalid_badges.contains(&String::from("gitlab")));
294+
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![]);
295+
}
296+
297+
#[test]
298+
fn unknown_badge() {
299+
// Add an unknown badge
300+
let (req, krate, _) = set_up();
301+
302+
let mut badges = HashMap::new();
303+
175304
// This is not a badge that crates.io knows about
176305
let mut invalid_attributes = HashMap::new();
177306
invalid_attributes.insert(
@@ -180,15 +309,11 @@ fn update_crate() {
180309
);
181310
badges.insert(
182311
String::from("not-a-badge"),
183-
invalid_attributes.clone()
312+
invalid_attributes
184313
);
185314

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")));
315+
let invalid_badges = Badge::update_crate(tx(&req), &krate, badges).unwrap();
316+
assert_eq!(invalid_badges.len(), 1);
192317
assert!(invalid_badges.contains(&String::from("not-a-badge")));
193-
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![appveyor.clone()]);
318+
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![]);
194319
}

0 commit comments

Comments
 (0)