#[test]
fn worker_response_deserializes() {
#[derive(serde::Deserialize)]
struct WorkerResponse {
total: u64,
}
let json = r#"{"total": 2847561}"#;
let parsed: WorkerResponse = serde_json::from_str(json).unwrap();
assert_eq!(parsed.total, 2847561);
}
#[test]
fn increment_request_body_format() {
let amount: u64 = 4823;
let body = serde_json::json!({ "amount": amount });
assert_eq!(body["amount"], 4823);
}
#[test]
fn is_newer_version_stable_comparisons() {
assert!(tokensave::cloud::is_newer_version("2.3.0", "2.4.0"));
assert!(tokensave::cloud::is_newer_version("2.4.0", "3.0.0"));
assert!(!tokensave::cloud::is_newer_version("2.4.0", "2.4.0"));
assert!(!tokensave::cloud::is_newer_version("2.4.0", "2.3.0"));
}
#[test]
fn is_newer_version_beta_comparisons() {
assert!(!tokensave::cloud::is_newer_version("2.5.0-beta.1", "2.5.0"));
assert!(!tokensave::cloud::is_newer_version("2.5.0", "2.5.0-beta.1"));
assert!(!tokensave::cloud::is_newer_version("2.5.0-beta.1", "2.6.0"));
assert!(!tokensave::cloud::is_newer_version("2.6.0", "2.5.0-beta.1"));
assert!(tokensave::cloud::is_newer_version(
"2.5.0-beta.1",
"2.5.0-beta.2"
));
assert!(!tokensave::cloud::is_newer_version(
"2.5.0-beta.2",
"2.5.0-beta.1"
));
assert!(tokensave::cloud::is_newer_version(
"2.5.0-beta.1",
"2.6.0-beta.1"
));
}
#[test]
fn is_newer_minor_version_ignores_patch_bumps() {
assert!(!tokensave::cloud::is_newer_minor_version("3.2.0", "3.2.1"));
assert!(!tokensave::cloud::is_newer_minor_version("3.2.1", "3.2.2"));
assert!(tokensave::cloud::is_newer_minor_version("3.2.1", "3.3.0"));
assert!(tokensave::cloud::is_newer_minor_version("3.2.0", "3.3.0"));
assert!(tokensave::cloud::is_newer_minor_version("3.2.1", "4.0.0"));
assert!(!tokensave::cloud::is_newer_minor_version("3.2.0", "3.2.0"));
assert!(!tokensave::cloud::is_newer_minor_version("3.3.0", "3.2.1"));
}
#[test]
fn is_newer_minor_version_beta() {
assert!(!tokensave::cloud::is_newer_minor_version(
"3.2.0-beta.1",
"3.2.0"
));
assert!(!tokensave::cloud::is_newer_minor_version(
"3.2.0-beta.1",
"3.3.0"
));
assert!(!tokensave::cloud::is_newer_minor_version(
"3.2.0",
"3.3.0-beta.1"
));
assert!(tokensave::cloud::is_newer_minor_version(
"3.2.0-beta.1",
"3.3.0-beta.1"
));
assert!(!tokensave::cloud::is_newer_minor_version(
"3.2.0-beta.1",
"3.2.0-beta.2"
));
}
#[test]
fn is_newer_version_same_version() {
assert!(!tokensave::cloud::is_newer_version("3.2.1", "3.2.1"));
}
#[test]
fn is_newer_version_all_components() {
assert!(tokensave::cloud::is_newer_version("3.2.1", "3.3.0"));
assert!(tokensave::cloud::is_newer_version("3.2.1", "4.0.0"));
assert!(tokensave::cloud::is_newer_version("3.2.1", "3.2.2"));
assert!(!tokensave::cloud::is_newer_version("3.3.0", "3.2.1"));
}
#[test]
fn is_newer_version_cross_channel_blocked() {
assert!(!tokensave::cloud::is_newer_version("3.2.1", "3.3.0-beta.1"));
assert!(!tokensave::cloud::is_newer_version("3.2.1-beta.1", "3.3.0"));
}
#[test]
fn is_newer_version_beta_ordering() {
assert!(tokensave::cloud::is_newer_version(
"3.2.1-beta.1",
"3.2.1-beta.2"
));
assert!(!tokensave::cloud::is_newer_version(
"3.2.1-beta.2",
"3.2.1-beta.1"
));
}
#[test]
fn is_newer_version_invalid_versions() {
assert!(!tokensave::cloud::is_newer_version("invalid", "3.2.1"));
assert!(!tokensave::cloud::is_newer_version("3.2.1", "invalid"));
}
#[test]
fn is_newer_minor_version_patch_only() {
assert!(!tokensave::cloud::is_newer_minor_version("3.2.1", "3.2.2"));
}
#[test]
fn is_newer_minor_version_minor_bump() {
assert!(tokensave::cloud::is_newer_minor_version("3.2.1", "3.3.0"));
}
#[test]
fn is_newer_minor_version_major_bump() {
assert!(tokensave::cloud::is_newer_minor_version("3.2.1", "4.0.0"));
}
#[test]
fn is_newer_minor_version_same() {
assert!(!tokensave::cloud::is_newer_minor_version("3.2.1", "3.2.1"));
}
#[test]
fn bump_kind_major_on_different_major() {
use tokensave::cloud::BumpKind;
assert_eq!(
tokensave::cloud::bump_kind("6.4.4", "7.0.0"),
BumpKind::Major
);
assert_eq!(
tokensave::cloud::bump_kind("6.4.4", "8.1.2"),
BumpKind::Major
);
}
#[test]
fn bump_kind_minor_on_same_major_diff_minor() {
use tokensave::cloud::BumpKind;
assert_eq!(
tokensave::cloud::bump_kind("6.4.4", "6.5.0"),
BumpKind::Minor
);
assert_eq!(
tokensave::cloud::bump_kind("6.4.4", "6.9.9"),
BumpKind::Minor
);
}
#[test]
fn bump_kind_patch_on_same_major_minor_diff_patch() {
use tokensave::cloud::BumpKind;
assert_eq!(
tokensave::cloud::bump_kind("6.4.4", "6.4.5"),
BumpKind::Patch
);
}
#[test]
fn bump_kind_none_on_equal_or_downgrade() {
use tokensave::cloud::BumpKind;
assert_eq!(
tokensave::cloud::bump_kind("6.4.4", "6.4.4"),
BumpKind::None
);
assert_eq!(
tokensave::cloud::bump_kind("6.4.4", "6.4.3"),
BumpKind::None
);
assert_eq!(
tokensave::cloud::bump_kind("6.4.4", "6.3.0"),
BumpKind::None
);
assert_eq!(
tokensave::cloud::bump_kind("7.0.0", "6.4.4"),
BumpKind::None
);
}
#[test]
fn bump_kind_empty_old_is_major() {
use tokensave::cloud::BumpKind;
assert_eq!(tokensave::cloud::bump_kind("", "7.0.0"), BumpKind::Major);
assert_eq!(tokensave::cloud::bump_kind("", "6.4.4"), BumpKind::Major);
}
#[test]
fn bump_kind_respects_channels() {
use tokensave::cloud::BumpKind;
assert_eq!(
tokensave::cloud::bump_kind("6.4.4", "7.0.0-beta.1"),
BumpKind::None
);
assert_eq!(
tokensave::cloud::bump_kind("6.4.4-beta.1", "7.0.0"),
BumpKind::None
);
assert_eq!(
tokensave::cloud::bump_kind("6.4.4-beta.1", "7.0.0-beta.1"),
BumpKind::Major
);
assert_eq!(
tokensave::cloud::bump_kind("6.4.4-beta.1", "6.4.4-beta.2"),
BumpKind::Patch
);
}
#[test]
fn is_beta_returns_bool() {
let _ = tokensave::cloud::is_beta();
}
#[test]
fn upgrade_command_always_suggests_tokensave_upgrade() {
use tokensave::cloud::{upgrade_command, InstallMethod};
for method in &[
InstallMethod::Cargo,
InstallMethod::Brew,
InstallMethod::Scoop,
InstallMethod::Unknown,
] {
assert_eq!(upgrade_command(method), "tokensave upgrade");
}
}
#[test]
fn detect_install_method_no_panic() {
let _ = tokensave::cloud::detect_install_method();
}