Skip to content

Commit 0b16db9

Browse files
Koenraad VerheydenJoshua Nelson
Koenraad Verheyden
authored and
Joshua Nelson
committed
last_successful_build: refactor tests; added testcase intermittent release failed
1 parent c565f62 commit 0b16db9

File tree

1 file changed

+45
-40
lines changed

1 file changed

+45
-40
lines changed

src/web/crate_details.rs

+45-40
Original file line numberDiff line numberDiff line change
@@ -276,65 +276,70 @@ pub fn crate_details_handler(req: &mut Request) -> IronResult<Response> {
276276
#[cfg(test)]
277277
mod tests {
278278
use super::*;
279+
use crate::test::TestDatabase;
279280
use failure::Error;
280281

281-
fn last_successful_build_equals(
282-
conn: &Connection,
282+
fn create_release(db: &TestDatabase, package: &str, version: &str, successful: bool) -> Result<i32, Error> {
283+
db.fake_release()
284+
.name(package)
285+
.version(version)
286+
.build_result_successful(successful)
287+
.create()
288+
}
289+
290+
fn assert_last_successful_build_equals(
291+
db: &TestDatabase,
283292
package: &str,
284293
version: &str,
285-
expected_last_successful_build: Option<String>
286-
) -> Result<bool, Error> {
294+
expected_last_successful_build: Option<&str>,
295+
) -> Result<(), Error> {
287296

288-
let details = CrateDetails::new(conn, package, version)
297+
let details = CrateDetails::new(&db.conn(), package, version)
289298
.ok_or(failure::err_msg("could not fetch crate details"))?;
290299

291-
Ok(details.last_successful_build == expected_last_successful_build)
300+
assert_eq!(
301+
details.last_successful_build,
302+
expected_last_successful_build.map(|s| s.to_string()),
303+
);
304+
Ok(())
305+
}
306+
307+
#[test]
308+
fn test_last_successful_build_when_last_release_failed() {
309+
crate::test::with_database(|db| {
310+
create_release(&db, "foo", "0.0.1", true)?;
311+
create_release(&db, "foo", "0.0.2", true)?;
312+
create_release(&db, "foo", "0.0.3", false)?;
313+
314+
assert_last_successful_build_equals(&db, "foo", "0.0.1", None)?;
315+
assert_last_successful_build_equals(&db, "foo", "0.0.2", None)?;
316+
assert_last_successful_build_equals(&db, "foo", "0.0.3", Some("0.0.2"))?;
317+
Ok(())
318+
});
292319
}
293320

294321
#[test]
295-
fn test_last_successful_build() {
322+
fn test_last_successful_build_when_all_releases_failed() {
296323
crate::test::with_database(|db| {
297-
// Create some releases in the database, of which the last release failed to build
298-
db.fake_release()
299-
.name("foo")
300-
.version("0.0.1")
301-
.create()?;
302-
db.fake_release()
303-
.name("foo")
304-
.version("0.0.2")
305-
.create()?;
306-
db.fake_release()
307-
.name("foo")
308-
.version("0.0.3")
309-
.build_result_successful(false)
310-
.create()?;
311-
312-
assert!(last_successful_build_equals(&db.conn(), "foo", "0.0.1", None)?);
313-
assert!(last_successful_build_equals(&db.conn(), "foo", "0.0.2", None)?);
314-
assert!(last_successful_build_equals(&db.conn(), "foo", "0.0.3", Some("0.0.2".to_string()))?);
324+
create_release(&db, "foo", "0.0.1", false)?;
325+
create_release(&db, "foo", "0.0.2", false)?;
315326

327+
assert_last_successful_build_equals(&db, "foo", "0.0.1", None)?;
328+
assert_last_successful_build_equals(&db, "foo", "0.0.2", None)?;
316329
Ok(())
317330
});
318331
}
319332

320333
#[test]
321-
fn test_last_successful_build_but_none_succeeded() {
334+
fn test_last_successful_build_when_an_intermittent_release_failed() {
322335
crate::test::with_database(|db| {
323-
// Create some releases in the database, of which all failed to build
324-
db.fake_release()
325-
.name("foo")
326-
.version("0.0.1")
327-
.build_result_successful(false)
328-
.create()?;
329-
db.fake_release()
330-
.name("foo")
331-
.version("0.0.2")
332-
.build_result_successful(false)
333-
.create()?;
334-
335-
assert!(last_successful_build_equals(&db.conn(), "foo", "0.0.1", None)?);
336-
assert!(last_successful_build_equals(&db.conn(), "foo", "0.0.2", None)?);
336+
create_release(&db, "foo", "0.0.1", true)?;
337+
create_release(&db, "foo", "0.0.2", false)?;
338+
create_release(&db, "foo", "0.0.3", true)?;
337339

340+
assert_last_successful_build_equals(&db, "foo", "0.0.1", None)?;
341+
assert_last_successful_build_equals(&db, "foo", "0.0.2", Some("0.0.3"))?;
342+
assert_last_successful_build_equals(&db, "foo", "0.0.3", None)?;
338343
Ok(())
339344
});
340345
}

0 commit comments

Comments
 (0)