113 lines
2.8 KiB
Rust
113 lines
2.8 KiB
Rust
use std::path::{Path, PathBuf};
|
|
|
|
use chrono::Utc;
|
|
use galaxy_core::HostId;
|
|
use uuid::Uuid;
|
|
|
|
use super::{job_matches_scope, JobScopeFilter};
|
|
use crate::ai::agent::conversation::AIConversationId;
|
|
use crate::ai::agent::AIAgentActionId;
|
|
use crate::ai::background_jobs::{BackgroundJob, BackgroundJobStatus};
|
|
|
|
fn job(directory: &str, project: Option<&str>) -> BackgroundJob {
|
|
BackgroundJob {
|
|
id: Uuid::new_v4(),
|
|
conversation_id: AIConversationId::new(),
|
|
action_id: AIAgentActionId::from("background-job-test".to_owned()),
|
|
command: "cargo build".to_owned(),
|
|
working_directory: PathBuf::from(directory),
|
|
project_root: project.map(PathBuf::from),
|
|
host_id: None,
|
|
started_at: Utc::now(),
|
|
finished_at: None,
|
|
status: BackgroundJobStatus::Running,
|
|
exit_code: None,
|
|
error: None,
|
|
completion_delivered: false,
|
|
log_path: PathBuf::new(),
|
|
output: String::new(),
|
|
output_truncated: false,
|
|
log_bytes: 0,
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn project_history_includes_sibling_directories_but_keeps_hosts_separate() {
|
|
let root = Path::new("/project");
|
|
let cwd = Path::new("/project/app");
|
|
let sibling = job("/project/server", Some("/project"));
|
|
assert!(job_matches_scope(
|
|
&sibling,
|
|
JobScopeFilter::Project,
|
|
Some(cwd),
|
|
Some(root),
|
|
None
|
|
));
|
|
assert!(!job_matches_scope(
|
|
&sibling,
|
|
JobScopeFilter::Directory,
|
|
Some(cwd),
|
|
Some(root),
|
|
None
|
|
));
|
|
assert!(!job_matches_scope(
|
|
&job("/other", Some("/other")),
|
|
JobScopeFilter::Project,
|
|
Some(cwd),
|
|
Some(root),
|
|
None
|
|
));
|
|
|
|
let remote = BackgroundJob {
|
|
host_id: Some(HostId::new("remote-host".to_owned())),
|
|
..sibling
|
|
};
|
|
assert!(!job_matches_scope(
|
|
&remote,
|
|
JobScopeFilter::Project,
|
|
Some(cwd),
|
|
Some(root),
|
|
None
|
|
));
|
|
assert!(job_matches_scope(
|
|
&remote,
|
|
JobScopeFilter::Project,
|
|
Some(cwd),
|
|
Some(root),
|
|
remote.host_id.as_ref()
|
|
));
|
|
assert!(job_matches_scope(
|
|
&remote,
|
|
JobScopeFilter::All,
|
|
Some(cwd),
|
|
Some(root),
|
|
None
|
|
));
|
|
}
|
|
|
|
#[test]
|
|
fn directory_history_is_exact_when_no_git_project_exists() {
|
|
let cwd = Path::new("/scratch");
|
|
assert!(job_matches_scope(
|
|
&job("/scratch", None),
|
|
JobScopeFilter::Directory,
|
|
Some(cwd),
|
|
None,
|
|
None
|
|
));
|
|
assert!(!job_matches_scope(
|
|
&job("/scratch/other", None),
|
|
JobScopeFilter::Directory,
|
|
Some(cwd),
|
|
None,
|
|
None
|
|
));
|
|
assert!(!job_matches_scope(
|
|
&job("/scratch", None),
|
|
JobScopeFilter::Project,
|
|
Some(cwd),
|
|
None,
|
|
None
|
|
));
|
|
}
|