diff options
Diffstat (limited to 'crates/mozart/src/commands/self_update.rs')
| -rw-r--r-- | crates/mozart/src/commands/self_update.rs | 245 |
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"); - } -} |
