cueward-adapter-macos 0.5.0

macOS adapter for Cueward with Safari, Notes, Messages, Reminders, Calendar, Screenshot, Clipboard, and OCR integrations.
use super::tests::fixture;
use super::*;
use std::fs;
use std::os::unix::fs::{MetadataExt, PermissionsExt};
use std::process::Command;

use super::execution_tests::{perform, refresh};
#[test]
fn native_move_keeps_mode_mtime_birthtime_and_extended_attribute() {
    let (root, mut request) = fixture();
    let source = root.path().join(&request.path);
    fs::set_permissions(&source, fs::Permissions::from_mode(0o640)).unwrap();
    assert!(
        Command::new("/usr/bin/xattr")
            .args(["-w", "com.cueward.test-relocation", "OWNED metadata"])
            .arg(&source)
            .status()
            .unwrap()
            .success()
    );
    refresh(&mut request);
    let before = source.metadata().unwrap();
    let receipt = perform(&request);
    assert_eq!(
        receipt.status,
        RelocationStatus::Completed,
        "{:?}",
        receipt.error
    );
    let destination = root.path().join(&request.destination);
    let after = destination.metadata().unwrap();
    assert_eq!(
        (
            before.ino(),
            before.mode(),
            before.mtime(),
            before.mtime_nsec(),
            before.created().unwrap()
        ),
        (
            after.ino(),
            after.mode(),
            after.mtime(),
            after.mtime_nsec(),
            after.created().unwrap()
        )
    );
    let xattr = Command::new("/usr/bin/xattr")
        .args(["-p", "com.cueward.test-relocation"])
        .arg(&destination)
        .output()
        .unwrap();
    assert!(xattr.status.success());
    assert_eq!(xattr.stdout, b"OWNED metadata\n");
}
struct Immutable(std::path::PathBuf);
impl Drop for Immutable {
    fn drop(&mut self) {
        let _ = Command::new("/usr/bin/chflags")
            .arg("nouchg")
            .arg(&self.0)
            .status();
    }
}
#[test]
fn permission_denial_keeps_source_and_does_not_create_destination() {
    let (root, mut request) = fixture();
    let immutable = Immutable(root.path().join(&request.path));
    assert!(
        Command::new("/usr/bin/chflags")
            .arg("uchg")
            .arg(&immutable.0)
            .status()
            .unwrap()
            .success()
    );
    refresh(&mut request);
    let receipt = perform(&request);
    assert_eq!(receipt.status, RelocationStatus::NotStarted);
    assert_eq!(receipt.renamed, Some(false));
    assert_eq!(receipt.error.unwrap().code, FileErrorCode::PermissionDenied);
    assert!(immutable.0.exists());
    assert!(!root.path().join(&request.destination).exists());
}