mod common;
#[ test ]
fn test_show_project_dot_resolves_to_cwd()
{
let manifest_dir = env!( "CARGO_MANIFEST_DIR" );
let output = common::clg_cmd()
.args( [ ".show", "project::." ] )
.current_dir( manifest_dir )
.output()
.expect( "Failed to execute command" );
let stdout = String::from_utf8_lossy( &output.stdout );
let stderr = String::from_utf8_lossy( &output.stderr );
let combined = format!( "{stdout}{stderr}" );
let has_dot_uuid = combined.contains( r#"Uuid(".")"# ) ||
combined.contains( r#"Uuid("projects")"# ) ||
combined.contains( "/projects/." );
assert!(
!has_dot_uuid,
"Bug: '.' treated as literal UUID instead of resolved to CWD.\n\
Expected: Path resolved to current directory\n\
Got stdout: {stdout}\nstderr: {stderr}"
);
let is_resolved = combined.contains( "Path(" ) ||
combined.contains( manifest_dir ) ||
combined.contains( "claude_storage" );
assert!(
is_resolved,
"Expected project path to be resolved from '.'\n\
stdout: {stdout}\nstderr: {stderr}"
);
}
#[ test ]
fn test_show_project_dotdot_resolves_to_parent()
{
let manifest_dir = env!( "CARGO_MANIFEST_DIR" );
let output = common::clg_cmd()
.args( [ ".show", "project::.." ] )
.current_dir( manifest_dir )
.output()
.expect( "Failed to execute command" );
let stdout = String::from_utf8_lossy( &output.stdout );
let stderr = String::from_utf8_lossy( &output.stderr );
let has_dotdot_uuid = stdout.contains( r#"Uuid("..")"# ) ||
stdout.contains( "/projects/.." );
assert!(
!has_dotdot_uuid,
"Bug: '..' treated as literal UUID instead of resolved to parent dir.\n\
Got stdout: {stdout}\nstderr: {stderr}"
);
}
#[ test ]
fn test_show_project_tilde_resolves_to_home()
{
let manifest_dir = env!( "CARGO_MANIFEST_DIR" );
let output = common::clg_cmd()
.args( [ ".show", "project::~" ] )
.current_dir( manifest_dir )
.output()
.expect( "Failed to execute command" );
let stdout = String::from_utf8_lossy( &output.stdout );
let stderr = String::from_utf8_lossy( &output.stderr );
let has_tilde_uuid = stdout.contains( r#"Uuid("~")"# ) ||
stdout.contains( r#"Uuid("projects")"# );
assert!(
!has_tilde_uuid,
"Bug: '~' treated as literal UUID instead of resolved to home dir.\n\
Got stdout: {stdout}\nstderr: {stderr}"
);
}
#[ test ]
fn test_parse_project_parameter_relative_paths()
{
use claude_storage::parse_project_parameter;
use claude_storage_core::ProjectId;
let result = parse_project_parameter( "." ).unwrap();
assert!(
matches!( result, ProjectId::Path( _ ) ),
"'.' should resolve to ProjectId::Path, got: {result:?}"
);
let result = parse_project_parameter( ".." ).unwrap();
assert!(
matches!( result, ProjectId::Path( _ ) ),
"'..' should resolve to ProjectId::Path, got: {result:?}"
);
let result = parse_project_parameter( "~" ).unwrap();
assert!(
matches!( result, ProjectId::Path( _ ) ),
"'~' should resolve to ProjectId::Path, got: {result:?}"
);
let result = parse_project_parameter( "~/projects" ).unwrap();
assert!(
matches!( result, ProjectId::Path( _ ) ),
"'~/projects' should resolve to ProjectId::Path, got: {result:?}"
);
let result = parse_project_parameter( "./subdir" ).unwrap();
assert!(
matches!( result, ProjectId::Path( _ ) ),
"'./subdir' should resolve to ProjectId::Path, got: {result:?}"
);
let result = parse_project_parameter( "../parent" ).unwrap();
assert!(
matches!( result, ProjectId::Path( _ ) ),
"'../parent' should resolve to ProjectId::Path, got: {result:?}"
);
}