use super::*;

#[test]
fn repo_order() {
    let mk_repo = |last_closed_time: Option<Timestamp>, path: &str| Project {
        last_closed_time: cmp::Reverse(last_closed_time),
        path: PathBuf::from(path),
    };

    // Repos in expected order
    const FST_SECOND: i64 = 10000000;
    // Most recently closed
    let repo_0 =
        mk_repo(Some(Timestamp::from_second(FST_SECOND).unwrap()), "0");
    let repo_1 =
        mk_repo(Some(Timestamp::from_second(FST_SECOND - 1).unwrap()), "0");
    let time_2 = Timestamp::from_second(FST_SECOND - 2).unwrap();
    let repo_2 = mk_repo(Some(time_2), "0");
    let repo_3 = mk_repo(Some(time_2), "1");
    let repo_4 =
        mk_repo(Some(Timestamp::from_second(FST_SECOND - 3).unwrap()), "0");
    let repo_5 = mk_repo(None, "3");
    let repo_6 = mk_repo(None, "4");

    // Construct in random order
    let repos = Projects::from_iter([
        repo_3.clone(),
        repo_1.clone(),
        repo_6.clone(),
        repo_4.clone(),
        repo_2.clone(),
        repo_0.clone(),
        repo_5.clone(),
    ]);
    itertools::assert_equal(
        repos,
        [repo_0, repo_1, repo_2, repo_3, repo_4, repo_5, repo_6],
    );
}