Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 90 additions & 0 deletions src/cortex-engine/src/tools/handlers/plan.rs
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,21 @@ impl ToolHandler for PlanHandler {
}
}

// Use cases section
if let Some(ref use_cases) = args.use_cases
&& !use_cases.is_empty()
{
output.push_str("## Use Cases\n\n");
for use_case in use_cases {
if let Some(use_case_str) = use_case.as_str() {
output.push_str(&format!("- {}\n", use_case_str));
} else {
output.push_str(&format!("- {}\n", use_case));
}
}
output.push('\n');
}

// Tasks section
output.push_str("## Tasks\n\n");
for task in &tasks {
Expand Down Expand Up @@ -367,3 +382,78 @@ impl ToolHandler for PlanHandler {
}))
}
}

#[cfg(test)]
mod tests {
use super::*;
use serde_json::json;
use std::path::PathBuf;

#[tokio::test]
async fn test_plan_includes_use_cases_section_when_present() {
let handler = PlanHandler::new();
let context = ToolContext::new(PathBuf::from("."));

let args = json!({
"title": "Auth Improvements",
"description": "Plan to improve auth flows",
"architecture": "Layered service architecture",
"tasks": [{
"id": "T1",
"title": "Update auth middleware"
}],
"use_cases": [
"User can log in",
"User can log out"
],
"agent_analyses": [{
"agent": "security",
"role": "Security Engineer",
"findings": ["Current token validation is weak"],
"recommendations": ["Enforce stronger token checks"]
}]
});

let result = handler.execute(args, &context).await;
assert!(result.is_ok());

let tool_result = result.unwrap();
assert!(tool_result.success);
assert!(tool_result.output.contains("## Use Cases"));
assert!(tool_result.output.contains("- User can log in"));
assert!(tool_result.output.contains("- User can log out"));

let metadata = tool_result.metadata.unwrap();
let data = metadata.data.unwrap();
assert!(data["use_cases"].is_array());
assert_eq!(data["use_cases"].as_array().unwrap().len(), 2);
}

#[tokio::test]
async fn test_plan_omits_use_cases_section_when_absent() {
let handler = PlanHandler::new();
let context = ToolContext::new(PathBuf::from("."));

let args = json!({
"title": "Auth Improvements",
"description": "Plan to improve auth flows",
"tasks": [{
"id": "T1",
"title": "Update auth middleware"
}],
"agent_analyses": [{
"agent": "security",
"role": "Security Engineer",
"findings": ["Current token validation is weak"],
"recommendations": ["Enforce stronger token checks"]
}]
});

let result = handler.execute(args, &context).await;
assert!(result.is_ok());

let tool_result = result.unwrap();
assert!(tool_result.success);
assert!(!tool_result.output.contains("## Use Cases"));
}
}