Files
IdeaSDK/crates/app-tauri/tests/tickets_missing_carnet.rs
Blomios 045e0984cc chantier: durcissement reprise headless inter-projets + persistance profils Opencode
- Implémentation reprise de session Opencode headless (conversational_recovery)
- Persistance des profils IA Opencode dans .ideai/memory avec JSON Schema
- Gestion des permissions MCP pour agents externes
- Tests QA verts : structured_launch_d3, conversation_log, tickets_missing_carnet, agents, ProfilesSettings
2026-07-28 12:23:34 +02:00

99 lines
2.8 KiB
Rust

use std::path::PathBuf;
use app_tauri_lib::state::AppState;
use application::CreateProjectInput;
use infrastructure::TicketToolProvider;
use serde_json::json;
use uuid::Uuid;
fn temp_path(tag: &str) -> PathBuf {
std::env::temp_dir().join(format!("idea-app-tauri-test-{tag}-{}", Uuid::new_v4()))
}
#[tokio::test]
async fn idea_ticket_read_is_best_effort_but_read_carnet_stays_strict_when_carnet_file_is_missing()
{
let state = AppState::build(temp_path("appdata"));
let project_root = temp_path("project").to_string_lossy().into_owned();
let project = state
.create_project
.execute(CreateProjectInput {
name: "App Tauri Tickets".to_owned(),
root: project_root,
remote: None,
default_profile_id: None,
})
.await
.expect("test project is created")
.project;
let created = state
.ticket_tool_binder
.handle_ticket_tool(
&project,
"qa-agent",
"idea_ticket_create",
json!({
"title": "Missing carnet fallback",
"description": "Created by app-tauri integration test",
"priority": "high",
"status": "open"
}),
)
.await
.expect("ticket create succeeds");
let ticket_ref = created["ref"]
.as_str()
.expect("ticket ref is present")
.to_owned();
let read = state
.ticket_tool_binder
.handle_ticket_tool(
&project,
"qa-agent",
"idea_ticket_read",
json!({ "ref": ticket_ref, "includeCarnet": true }),
)
.await
.expect("ticket read succeeds");
assert!(
read["carnet"].is_string(),
"ticket read returns a string carnet"
);
std::fs::remove_file(
PathBuf::from(project.root.as_str())
.join(".ideai")
.join("tickets")
.join(ticket_ref.trim_start_matches('#'))
.join("carnet.md"),
)
.expect("test removes ticket carnet");
let read_without_carnet_file = state
.ticket_tool_binder
.handle_ticket_tool(
&project,
"qa-agent",
"idea_ticket_read",
json!({ "ref": ticket_ref, "includeCarnet": true }),
)
.await
.expect("ticket read stays best-effort");
assert_eq!(read_without_carnet_file["ref"], ticket_ref);
assert_eq!(read_without_carnet_file["carnet"], "");
let strict_err = state
.ticket_tool_binder
.handle_ticket_tool(
&project,
"qa-agent",
"idea_ticket_read_carnet",
json!({ "ref": ticket_ref }),
)
.await
.expect_err("strict carnet read must fail when carnet.md is missing");
assert_eq!(strict_err.code, "notFound");
}