mod common;
use std::fs;
use tempfile::TempDir;
#[ test ]
fn test_show_with_path_project()
{
use claude_storage_core::encode_path;
let storage = TempDir::new().unwrap();
let project_path = TempDir::new().unwrap();
let encoded = encode_path( project_path.path() ).unwrap();
let project_dir = storage.path().join( "projects" ).join( &encoded );
fs::create_dir_all( &project_dir ).unwrap();
let session_id = "test-session-12345";
let session_file = project_dir.join( format!( "{session_id}.jsonl" ) );
fs::write( &session_file, r#"{"type":"user","text":"test"}"# ).unwrap();
let output = common::clg_cmd()
.env( "CLAUDE_STORAGE_ROOT", storage.path() )
.args( [
".show",
&format!( "session_id::{session_id}" ),
&format!( "project::{}", project_path.path().display() )
] )
.output()
.unwrap();
let stdout = String::from_utf8_lossy( &output.stdout );
let stderr = String::from_utf8_lossy( &output.stderr );
assert!(
!stderr.contains( "Project not found" ),
"Bug: Path project treated as UUID. stderr: {stderr}"
);
assert!(
stdout.contains( "Session:" ) || stdout.contains( session_id ),
"Expected session details in output. stdout: {stdout}"
);
}
#[ test ]
fn test_show_with_uuid_project_still_works()
{
let storage = TempDir::new().unwrap();
let project_uuid = "test-uuid-project-123";
let project_dir = storage.path().join( "projects" ).join( project_uuid );
fs::create_dir_all( &project_dir ).unwrap();
let session_id = "test-session-uuid-789";
let session_file = project_dir.join( format!( "{session_id}.jsonl" ) );
fs::write( &session_file, r#"{"type":"user","text":"test"}"# ).unwrap();
let output = common::clg_cmd()
.env( "CLAUDE_STORAGE_ROOT", storage.path() )
.args( [
".show",
&format!( "session_id::{session_id}" ),
&format!( "project::{project_uuid}" )
] )
.output()
.unwrap();
let stdout = String::from_utf8_lossy( &output.stdout );
let stderr = String::from_utf8_lossy( &output.stderr );
assert!(
!stderr.contains( "Project not found" ),
"Regression: UUID project support broken. stderr: {stderr}"
);
assert!(
stdout.contains( "Session:" ),
"Expected session details. stdout: {stdout}"
);
}
#[ test ]
fn test_parse_project_parameter_unit()
{
use claude_storage::parse_project_parameter;
use claude_storage_core::ProjectId;
let result = parse_project_parameter( "/home/user/project" ).unwrap();
assert!(
matches!( result, ProjectId::Path( _ ) ),
"Absolute path should be ProjectId::Path"
);
let result = parse_project_parameter( "-home-user-project" ).unwrap();
assert!(
matches!( result, ProjectId::Path( _ ) ),
"Path-encoded should be ProjectId::Path"
);
let result = parse_project_parameter( "abc-123-def" ).unwrap();
assert!(
matches!( result, ProjectId::Uuid( _ ) ),
"UUID format should be ProjectId::Uuid"
);
let result = parse_project_parameter( r#"Path("/home/user/project")"# ).unwrap();
assert!(
matches!( result, ProjectId::Path( _ ) ),
"Debug format should extract path"
);
}