aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart/src/commands/self_update.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/mozart/src/commands/self_update.rs')
-rw-r--r--crates/mozart/src/commands/self_update.rs245
1 files changed, 0 insertions, 245 deletions
diff --git a/crates/mozart/src/commands/self_update.rs b/crates/mozart/src/commands/self_update.rs
index 74983ba..758fa04 100644
--- a/crates/mozart/src/commands/self_update.rs
+++ b/crates/mozart/src/commands/self_update.rs
@@ -452,248 +452,3 @@ fn clean_backups(data_dir: &Path, except: Option<&Path>) -> anyhow::Result<()> {
Ok(())
}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use std::fs;
- use tempfile::tempdir;
-
- fn make_release(tag: &str, prerelease: bool, assets: Vec<GitHubAsset>) -> GitHubRelease {
- GitHubRelease {
- tag_name: tag.to_string(),
- prerelease,
- assets,
- }
- }
-
- fn make_asset(name: &str, url: &str) -> GitHubAsset {
- GitHubAsset {
- name: name.to_string(),
- browser_download_url: url.to_string(),
- size: 1024,
- }
- }
-
- #[test]
- fn test_platform_asset_name() {
- let name = platform_asset_name().expect("platform_asset_name should succeed");
- assert!(!name.is_empty(), "asset name must not be empty");
- assert!(
- name.starts_with("mozart-"),
- "asset name should start with 'mozart-', got: {name}"
- );
- // Verify the name matches the expected pattern: mozart-<os>-<arch>[.exe]
- assert!(
- name.contains("linux") || name.contains("macos") || name.contains("windows"),
- "asset name should contain an OS, got: {name}"
- );
- assert!(
- name.contains("x86_64") || name.contains("aarch64") || name.contains("x86"),
- "asset name should contain an architecture, got: {name}"
- );
- }
-
- #[test]
- fn test_find_target_release_latest() {
- let releases = vec![
- make_release("v0.3.0", false, vec![]),
- make_release("v0.2.0", false, vec![]),
- make_release("v0.1.0", false, vec![]),
- ];
-
- let result = find_target_release(&releases, None).expect("should find latest");
- assert_eq!(result.tag_name, "v0.3.0");
- }
-
- #[test]
- fn test_find_target_release_specific_version() {
- let releases = vec![
- make_release("v0.3.0", false, vec![]),
- make_release("v0.2.0", false, vec![]),
- make_release("v0.1.0", false, vec![]),
- ];
-
- // Without v prefix
- let result = find_target_release(&releases, Some("0.2.0")).expect("should find 0.2.0");
- assert_eq!(result.tag_name, "v0.2.0");
-
- // With v prefix
- let result_v = find_target_release(&releases, Some("v0.1.0")).expect("should find v0.1.0");
- assert_eq!(result_v.tag_name, "v0.1.0");
- }
-
- #[test]
- fn test_find_target_release_not_found() {
- let releases = vec![
- make_release("v0.3.0", false, vec![]),
- make_release("v0.2.0", false, vec![]),
- ];
-
- let result = find_target_release(&releases, Some("9.9.9"));
- assert!(result.is_err(), "should return error for missing version");
- let msg = result.unwrap_err().to_string();
- assert!(
- msg.contains("9.9.9"),
- "error message should mention the version"
- );
- }
-
- #[test]
- fn test_find_target_release_empty() {
- let releases: Vec<GitHubRelease> = vec![];
-
- let result = find_target_release(&releases, None);
- assert!(
- result.is_err(),
- "should return error for empty release list"
- );
- }
-
- #[test]
- fn test_find_asset_found() {
- let asset = make_asset(
- "mozart-linux-x86_64",
- "https://example.com/mozart-linux-x86_64",
- );
- let release = make_release(
- "v0.2.0",
- false,
- vec![
- make_asset(
- "mozart-macos-aarch64",
- "https://example.com/mozart-macos-aarch64",
- ),
- asset,
- ],
- );
-
- let found = find_asset(&release, "mozart-linux-x86_64").expect("should find asset");
- assert_eq!(found.name, "mozart-linux-x86_64");
- assert_eq!(
- found.browser_download_url,
- "https://example.com/mozart-linux-x86_64"
- );
- }
-
- #[test]
- fn test_find_asset_not_found() {
- let release = make_release(
- "v0.2.0",
- false,
- vec![make_asset(
- "mozart-linux-x86_64",
- "https://example.com/mozart-linux-x86_64",
- )],
- );
-
- let result = find_asset(&release, "mozart-windows-x86_64.exe");
- assert!(result.is_err(), "should return error for missing asset");
- let msg = result.unwrap_err().to_string();
- assert!(
- msg.contains("mozart-windows-x86_64.exe"),
- "error message should mention the asset name"
- );
- }
-
- #[test]
- fn test_get_data_dir_from_env() {
- let dir = tempdir().unwrap();
- let expected = dir.path().to_path_buf();
-
- // SAFETY: test-only env mutation
- unsafe { std::env::set_var("MOZART_DATA_DIR", &expected) };
-
- let result = get_data_dir().expect("should succeed with MOZART_DATA_DIR set");
- assert_eq!(result, expected);
-
- unsafe { std::env::remove_var("MOZART_DATA_DIR") };
- }
-
- #[test]
- fn test_get_data_dir_default() {
- // Ensure MOZART_DATA_DIR is not set
- unsafe { std::env::remove_var("MOZART_DATA_DIR") };
-
- let result = get_data_dir().expect("should succeed when HOME is set");
- let path_str = result.to_string_lossy();
- assert!(
- path_str.ends_with(".local/share/mozart"),
- "default data dir should end with .local/share/mozart, got: {path_str}"
- );
- }
-
- #[test]
- fn test_find_latest_backup() {
- let dir = tempdir().unwrap();
-
- // Create two backup files; the second one is newer
- let old_backup = dir.path().join("mozart-0.1.0.old");
- let new_backup = dir.path().join("mozart-0.2.0.old");
- fs::write(&old_backup, b"old binary").unwrap();
- // Ensure the newer file has a later mtime
- std::thread::sleep(std::time::Duration::from_millis(10));
- fs::write(&new_backup, b"new binary").unwrap();
-
- let found = find_latest_backup(dir.path()).expect("should find latest backup");
- assert_eq!(found, new_backup);
- }
-
- #[test]
- fn test_find_latest_backup_empty() {
- let dir = tempdir().unwrap();
- // No backup files present
- let result = find_latest_backup(dir.path());
- assert!(result.is_err(), "should return error when no backups found");
- }
-
- #[test]
- fn test_clean_backups() {
- let dir = tempdir().unwrap();
-
- let backup1 = dir.path().join("mozart-0.1.0.old");
- let backup2 = dir.path().join("mozart-0.2.0.old");
- let keep = dir.path().join("somefile.txt");
-
- fs::write(&backup1, b"binary").unwrap();
- fs::write(&backup2, b"binary").unwrap();
- fs::write(&keep, b"keep me").unwrap();
-
- clean_backups(dir.path(), None).expect("clean_backups should succeed");
-
- assert!(!backup1.exists(), "backup1 should be removed");
- assert!(!backup2.exists(), "backup2 should be removed");
- assert!(keep.exists(), "non-backup file should remain");
- }
-
- #[test]
- fn test_clean_backups_with_except() {
- let dir = tempdir().unwrap();
-
- let backup1 = dir.path().join("mozart-0.1.0.old");
- let backup2 = dir.path().join("mozart-0.2.0.old");
-
- fs::write(&backup1, b"binary").unwrap();
- fs::write(&backup2, b"binary").unwrap();
-
- clean_backups(dir.path(), Some(&backup2)).expect("clean_backups should succeed");
-
- assert!(!backup1.exists(), "backup1 should be removed");
- assert!(backup2.exists(), "backup2 should be preserved (excepted)");
- }
-
- #[test]
- fn test_effective_channel() {
- assert_eq!(effective_channel(false), "stable");
- assert_eq!(effective_channel(true), "preview");
- }
-
- #[test]
- fn test_version_from_backup() {
- let path = PathBuf::from("/some/dir/mozart-0.3.1.old");
- assert_eq!(version_from_backup(&path), "0.3.1");
-
- let bad_path = PathBuf::from("/some/dir/unknown-file.txt");
- assert_eq!(version_from_backup(&bad_path), "unknown");
- }
-}