use cydonia::model::update;
#[test]
fn a_later_release_is_the_only_one_offered() {
assert!(update::newer("0.1.4", "0.1.3"));
assert!(update::newer("0.2.0", "0.1.9"));
assert!(update::newer("1.0.0", "0.9.9"));
assert!(!update::newer("0.1.3", "0.1.3"));
assert!(!update::newer("0.1.2", "0.1.3"));
assert!(!update::newer("0.9.9", "1.0.0"));
}
#[test]
fn a_version_this_cannot_order_is_not_offered() {
assert!(!update::newer("0.1.4-rc1", "0.1.3"));
assert!(!update::newer("0.1.4", "0.1.3-rc1"));
assert!(!update::newer("0.2", "0.1.3"));
assert!(!update::newer("0.1.4.1", "0.1.3"));
assert!(!update::newer("", "0.1.3"));
assert!(!update::newer("latest", "0.1.3"));
}
#[test]
fn the_image_is_named_as_the_makefile_names_it() {
assert_eq!(update::asset("0.1.4"), "cydonia-0.1.4-arm64.dmg");
}
#[test]
fn the_release_is_where_the_site_says_it_is() {
assert_eq!(
update::url("0.1.4"),
"https://github.com/crabtalk/cydonia/releases/download/v0.1.4/cydonia-0.1.4-arm64.dmg"
);
}
#[test]
fn the_feed_is_a_file_at_the_site_root() {
assert_eq!(update::FEED, "https://cydonia.sh/changelog.json");
}
#[test]
fn an_image_names_its_own_version() {
let image = std::path::PathBuf::from(update::asset("0.1.4"));
assert_eq!(update::version_of(&image).as_deref(), Some("0.1.4"));
for name in [
"cydonia-0.1.4-x86_64.dmg",
"cydonia-0.1.4-arm64.part",
"mnt",
] {
let path = std::path::PathBuf::from(name);
assert_eq!(update::version_of(&path), None, "{name}");
}
}
#[test]
fn the_shipped_changelog_is_a_feed_this_build_can_read() {
let feed = include_str!("../../../changelog.json");
let head = update::head(feed).expect("changelog.json is the feed's shape");
assert_eq!(head, env!("CARGO_PKG_VERSION"));
}
#[test]
fn only_a_spent_staging_directory_of_ours_is_swept() {
let version = env!("CARGO_PKG_VERSION");
assert!(update::spent(&format!(".cydonia-update-{version}")));
assert!(update::spent(".cydonia-update-0.0.1"));
assert!(!update::spent(".cydonia-update-99.0.0"));
assert!(!update::spent("cydonia.app"));
assert!(!update::spent("Safari.app"));
assert!(!update::spent(".DS_Store"));
}