82 lines
3.0 KiB
Rust
82 lines
3.0 KiB
Rust
use storage::{OnboardingBootstrapInput, ProfileStore};
|
|
use tempfile::tempdir;
|
|
|
|
#[test]
|
|
fn onboarding_bootstrap_creates_company_goal_agent_project_task_and_run() {
|
|
let sandbox = tempdir().expect("temp dir");
|
|
let mut store = ProfileStore::open(sandbox.path()).expect("open store");
|
|
|
|
let summary = store
|
|
.bootstrap_onboarding(OnboardingBootstrapInput {
|
|
company_name: "Orbit Ops".to_string(),
|
|
company_description: "Local-first operations company".to_string(),
|
|
workspace_path: "/tmp/orbit-ops".to_string(),
|
|
execution_mode: "ai_ceo".to_string(),
|
|
goal_title: "Ship the native shell".to_string(),
|
|
goal_description:
|
|
"Rebuild the product in Rust and GPUI without losing product grammar.".to_string(),
|
|
connector_id: "anthropic".to_string(),
|
|
connector_model: Some("claude-sonnet".to_string()),
|
|
})
|
|
.expect("bootstrap onboarding");
|
|
|
|
let snapshot = store.snapshot().expect("snapshot");
|
|
assert_eq!(
|
|
snapshot.current_company_id.as_deref(),
|
|
Some(summary.company_id.as_str())
|
|
);
|
|
assert!(
|
|
snapshot
|
|
.companies
|
|
.iter()
|
|
.any(|company| company.id == summary.company_id && company.name == "Orbit Ops")
|
|
);
|
|
assert!(
|
|
snapshot
|
|
.workspaces
|
|
.iter()
|
|
.any(|workspace| Some(workspace.id.as_str()) == summary.workspace_id.as_deref())
|
|
);
|
|
assert!(
|
|
snapshot
|
|
.goals
|
|
.iter()
|
|
.any(|goal| goal.title == "Ship the native shell" && goal.status == "active")
|
|
);
|
|
assert!(snapshot.agents.iter().any(|agent| {
|
|
agent.id == summary.lead_agent_id
|
|
&& agent.name == "CEO"
|
|
&& agent.connector_id == "anthropic"
|
|
&& agent.model.as_deref() == Some("claude-sonnet")
|
|
}));
|
|
assert!(
|
|
snapshot
|
|
.projects
|
|
.iter()
|
|
.any(|project| project.id == summary.project_id && project.status == "in_progress")
|
|
);
|
|
assert!(snapshot.tasks.iter().any(|task| {
|
|
task.id == summary.task_id
|
|
&& task.active_run_id.as_deref() == Some(summary.run_id.as_str())
|
|
&& task.assignee_agent_id.as_deref() == Some(summary.lead_agent_id.as_str())
|
|
}));
|
|
assert!(snapshot.runs.iter().any(|run| {
|
|
run.id == summary.run_id
|
|
&& run.agent_id == summary.lead_agent_id
|
|
&& run.status == "queued"
|
|
&& run.task_id.as_deref() == Some(summary.task_id.as_str())
|
|
}));
|
|
assert!(snapshot.activity.iter().any(|activity| {
|
|
activity.entity_id == summary.company_id && activity.action == "company.bootstrapped"
|
|
}));
|
|
|
|
let reopened = ProfileStore::open(sandbox.path()).expect("reopen store");
|
|
let reopened_snapshot = reopened.snapshot().expect("reopened snapshot");
|
|
assert!(
|
|
reopened_snapshot
|
|
.runs
|
|
.iter()
|
|
.any(|run| run.id == summary.run_id && run.status == "queued")
|
|
);
|
|
}
|