Skip to content

Commit a74b3bf

Browse files
committed
fix & add tests for get-releases / deployed_only
1 parent cf6947b commit a74b3bf

File tree

2 files changed

+72
-7
lines changed

2 files changed

+72
-7
lines changed

Diff for: src/test/fakes.rs

+20
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ pub(crate) struct FakeRelease<'a> {
3737
pub(crate) struct FakeBuild {
3838
s3_build_log: Option<String>,
3939
db_build_log: Option<String>,
40+
build_time: Option<DateTime<Utc>>,
4041
result: BuildResult,
4142
}
4243

@@ -107,6 +108,11 @@ impl<'a> FakeRelease<'a> {
107108
self
108109
}
109110

111+
pub(crate) fn has_docs(mut self, new: bool) -> Self {
112+
self.has_docs = new;
113+
self
114+
}
115+
110116
pub(crate) fn name(mut self, new: &str) -> Self {
111117
self.package.name = new.into();
112118
self.package.id = format!("{}-id", new);
@@ -457,6 +463,12 @@ impl FakeGithubStats {
457463
}
458464

459465
impl FakeBuild {
466+
pub(crate) fn build_time(self, build_time: impl Into<DateTime<Utc>>) -> Self {
467+
Self {
468+
build_time: Some(build_time.into()),
469+
..self
470+
}
471+
}
460472
pub(crate) fn rustc_version(self, rustc_version: impl Into<String>) -> Self {
461473
Self {
462474
result: BuildResult {
@@ -524,6 +536,13 @@ impl FakeBuild {
524536
)?;
525537
}
526538

539+
if let Some(build_time) = self.build_time.as_ref() {
540+
conn.query(
541+
"UPDATE builds SET build_time = $2 WHERE id = $1",
542+
&[&build_id, &build_time],
543+
)?;
544+
}
545+
527546
if let Some(s3_build_log) = self.s3_build_log.as_deref() {
528547
let path = format!("build-logs/{}/{}.txt", build_id, default_target);
529548
storage.store_one(path, s3_build_log)?;
@@ -538,6 +557,7 @@ impl Default for FakeBuild {
538557
Self {
539558
s3_build_log: Some("It works!".into()),
540559
db_build_log: None,
560+
build_time: None,
541561
result: BuildResult {
542562
rustc_version: "rustc 2.0.0-nightly (000000000 1970-01-01)".into(),
543563
docsrs_version: "docs.rs 1.0.0 (000000000 1970-01-01)".into(),

Diff for: src/web/releases.rs

+52-7
Original file line numberDiff line numberDiff line change
@@ -716,7 +716,8 @@ mod tests {
716716
use super::*;
717717
use crate::index::api::CrateOwner;
718718
use crate::test::{
719-
assert_redirect, assert_redirect_unchecked, assert_success, wrapper, TestFrontend,
719+
assert_redirect, assert_redirect_unchecked, assert_success, wrapper, FakeBuild,
720+
TestFrontend,
720721
};
721722
use anyhow::Error;
722723
use chrono::{Duration, TimeZone};
@@ -732,12 +733,36 @@ mod tests {
732733
wrapper(|env| {
733734
let db = env.db();
734735

735-
env.fake_release().name("foo").version("1.0.0").create()?;
736+
let now = Utc::now();
736737

737-
assert!(
738-
!get_releases(&mut db.conn(), 1, 10, Order::ReleaseTime, true, false).is_empty()
738+
env.fake_release()
739+
.name("recent")
740+
.version("1.0.0")
741+
.builds(vec![FakeBuild::default().build_time(now)])
742+
.create()?;
743+
744+
env.fake_release()
745+
.name("old")
746+
.version("1.0.0")
747+
.builds(vec![
748+
FakeBuild::default().build_time(now - Duration::minutes(21))
749+
])
750+
.create()?;
751+
752+
assert_eq!(
753+
get_releases(&mut db.conn(), 1, 10, Order::ReleaseTime, true, false)
754+
.iter()
755+
.map(|r| r.name.clone())
756+
.collect::<Vec<_>>(),
757+
vec!["recent", "old"],
758+
);
759+
assert_eq!(
760+
get_releases(&mut db.conn(), 1, 10, Order::ReleaseTime, true, true)
761+
.iter()
762+
.map(|r| r.name.clone())
763+
.collect::<Vec<_>>(),
764+
vec!["old"],
739765
);
740-
assert!(get_releases(&mut db.conn(), 1, 10, Order::ReleaseTime, true, true).is_empty());
741766
Ok(())
742767
})
743768
}
@@ -1255,25 +1280,44 @@ mod tests {
12551280
.version("0.1.0")
12561281
.github_stats("some/repo", 33, 22, 11)
12571282
.release_time(Utc.ymd(2020, 4, 16).and_hms(4, 33, 50))
1283+
.builds(vec![
1284+
FakeBuild::default().build_time(Utc.ymd(2020, 4, 16).and_hms(4, 33, 50))
1285+
])
12581286
.create()?;
12591287
env.fake_release()
12601288
.name("crate_that_succeeded_with_github")
12611289
.version("0.2.0-rc")
12621290
.github_stats("some/repo", 33, 22, 11)
12631291
.release_time(Utc.ymd(2020, 4, 16).and_hms(8, 33, 50))
1264-
.build_result_failed()
1292+
.has_docs(false)
1293+
.builds(vec![FakeBuild::default()
1294+
.build_time(Utc.ymd(2020, 4, 16).and_hms(8, 33, 50))
1295+
.successful(false)])
12651296
.create()?;
12661297
env.fake_release()
12671298
.name("crate_that_succeeded_with_github")
12681299
.github_stats("some/repo", 33, 22, 11)
12691300
.release_time(Utc.ymd(2020, 5, 16).and_hms(4, 33, 50))
1301+
.builds(vec![
1302+
FakeBuild::default().build_time(Utc.ymd(2020, 5, 16).and_hms(4, 33, 50))
1303+
])
12701304
.version("0.2.0")
12711305
.create()?;
12721306
env.fake_release()
12731307
.name("crate_that_failed")
12741308
.version("0.1.0")
12751309
.release_time(Utc.ymd(2020, 6, 16).and_hms(4, 33, 50))
1276-
.build_result_failed()
1310+
.has_docs(false)
1311+
.builds(vec![FakeBuild::default()
1312+
.build_time(Utc.ymd(2020, 6, 16).and_hms(4, 33, 50))
1313+
.successful(false)])
1314+
.create()?;
1315+
let now = Utc::now();
1316+
env.fake_release()
1317+
.name("crate_that_was_just_deployed_and_will_not_be_shown")
1318+
.version("0.1.0")
1319+
.release_time(now)
1320+
.builds(vec![FakeBuild::default().build_time(now)])
12771321
.create()?;
12781322

12791323
// make sure that crates get at most one release shown, so they don't crowd the homepage
@@ -1289,6 +1333,7 @@ mod tests {
12891333
assert_eq!(
12901334
get_release_links("/releases", env.frontend())?,
12911335
[
1336+
"/crate_that_was_just_deployed_and_will_not_be_shown/0.1.0/crate_that_was_just_deployed_and_will_not_be_shown/",
12921337
"/crate/crate_that_failed/0.1.0",
12931338
"/crate_that_succeeded_with_github/0.2.0/crate_that_succeeded_with_github/",
12941339
"/crate/crate_that_succeeded_with_github/0.2.0-rc",

0 commit comments

Comments
 (0)