Skip to content

Commit 229fb17

Browse files
committed
Split up badge tests into smaller ones
1 parent f8a0948 commit 229fb17

File tree

1 file changed

+164
-52
lines changed

1 file changed

+164
-52
lines changed

src/tests/badge.rs

Lines changed: 164 additions & 52 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,101 @@ 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+
}
75108

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+
}
136+
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+
let mut badges = HashMap::new();
95167
let travis_ci2 = Badge::TravisCi {
96168
branch: None,
97169
repository: String::from("rust-lang/rust"),
@@ -105,73 +177,117 @@ fn update_crate() {
105177
String::from("travis-ci"),
106178
badge_attributes_travis_ci2.clone()
107179
);
108-
Badge::update_crate(tx(&req), &krate, badges.clone()).unwrap();
180+
Badge::update_crate(tx(&req), &krate, badges).unwrap();
109181
let current_badges = krate.badges(tx(&req)).unwrap();
110-
assert_eq!(current_badges, 2);
111-
assert!(current_badges.contains(&gitlab));
182+
assert_eq!(current_badges.len(), 2);
183+
assert!(current_badges.contains(&test_badges.gitlab));
112184
assert!(current_badges.contains(&travis_ci2));
185+
}
113186

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![]);
187+
#[test]
188+
fn clear_badges() {
189+
// Add 3 badges and then remove them
190+
let (req, krate, test_badges) = set_up();
191+
192+
let mut badges = HashMap::new();
118193

119194
// Adding 3 badges
120195
badges.insert(
121196
String::from("appveyor"),
122-
badge_attributes_appveyor.clone()
197+
test_badges.appveyor_attributes
123198
);
124199
badges.insert(
125200
String::from("travis-ci"),
126-
badge_attributes_travis_ci.clone()
201+
test_badges.travis_ci_attributes
127202
);
128203
badges.insert(
129204
String::from("gitlab"),
130-
badge_attributes_gitlab.clone()
205+
test_badges.gitlab_attributes
131206
);
132-
Badge::update_crate(
133-
tx(&req), &krate, badges.clone()
134-
).unwrap();
207+
Badge::update_crate(tx(&req), &krate, badges.clone()).unwrap();
135208

136209
let current_badges = krate.badges(tx(&req)).unwrap();
137210
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));
211+
assert!(current_badges.contains(&test_badges.appveyor));
212+
assert!(current_badges.contains(&test_badges.travis_ci));
213+
assert!(current_badges.contains(&test_badges.gitlab));
141214

142215
// Removing all badges
143216
badges.clear();
144-
Badge::update_crate(tx(&req), &krate, badges.clone()).unwrap();
217+
Badge::update_crate(tx(&req), &krate, badges).unwrap();
145218
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![]);
219+
}
220+
221+
#[test]
222+
fn appveyor_extra_keys() {
223+
// Add a badge with extra invalid keys
224+
let (req, krate, mut test_badges) = set_up();
146225

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)
226+
let mut badges = HashMap::new();
150227

151228
// Extra invalid keys are fine, we'll just ignore those
152-
badge_attributes_appveyor.insert(
229+
test_badges.appveyor_attributes.insert(
153230
String::from("extra"),
154231
String::from("info")
155232
);
156233
badges.insert(
157234
String::from("appveyor"),
158-
badge_attributes_appveyor.clone()
235+
test_badges.appveyor_attributes
159236
);
160237

238+
let invalid_badges = Badge::update_crate(tx(&req), &krate, badges).unwrap();
239+
assert_eq!(invalid_badges.len(), 1);
240+
assert!(invalid_badges.contains(&String::from("appveyor")));
241+
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![]);
242+
}
243+
244+
#[test]
245+
fn travis_ci_required_keys() {
246+
// Add a travis ci badge missing a required field
247+
let (req, krate, mut test_badges) = set_up();
248+
249+
let mut badges = HashMap::new();
250+
161251
// Repository is a required key
162-
badge_attributes_travis_ci.remove("repository");
252+
test_badges.travis_ci_attributes.remove("repository");
163253
badges.insert(
164254
String::from("travis-ci"),
165-
badge_attributes_travis_ci.clone()
255+
test_badges.travis_ci_attributes
166256
);
167257

258+
let invalid_badges = Badge::update_crate(tx(&req), &krate, badges).unwrap();
259+
assert_eq!(invalid_badges.len(), 1);
260+
assert!(invalid_badges.contains(&String::from("travis-ci")));
261+
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![]);
262+
}
263+
264+
#[test]
265+
fn gitlab_required_keys() {
266+
// Add a gitlab badge missing a required field
267+
let (req, krate, mut test_badges) = set_up();
268+
269+
let mut badges = HashMap::new();
270+
168271
// Repository is a required key
169-
badge_attributes_gitlab.remove("repository");
272+
test_badges.gitlab_attributes.remove("repository");
170273
badges.insert(
171274
String::from("gitlab"),
172-
badge_attributes_gitlab.clone()
275+
test_badges.gitlab_attributes
173276
);
174277

278+
let invalid_badges = Badge::update_crate(tx(&req), &krate, badges).unwrap();
279+
assert_eq!(invalid_badges.len(), 1);
280+
assert!(invalid_badges.contains(&String::from("gitlab")));
281+
assert_eq!(krate.badges(tx(&req)).unwrap(), vec![]);
282+
}
283+
284+
#[test]
285+
fn unknown_badge() {
286+
// Add an unknown badge
287+
let (req, krate, _) = set_up();
288+
289+
let mut badges = HashMap::new();
290+
175291
// This is not a badge that crates.io knows about
176292
let mut invalid_attributes = HashMap::new();
177293
invalid_attributes.insert(
@@ -180,15 +296,11 @@ fn update_crate() {
180296
);
181297
badges.insert(
182298
String::from("not-a-badge"),
183-
invalid_attributes.clone()
299+
invalid_attributes
184300
);
185301

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

0 commit comments

Comments
 (0)