#![ cfg( feature = "enabled" ) ]
mod cli_binary_test_helpers;
use cli_binary_test_helpers::{ exit_code, make_creds_file, stderr_str, stdout_str };
fn run_refresh( args : &[ &str ] ) -> std::process::Output
{
let mut full = vec![ "refresh" ];
full.extend_from_slice( args );
cli_binary_test_helpers::run_cli( &full )
}
#[ test ]
fn test_it2_creds_file_not_found()
{
let out = run_refresh( &[ "--creds", "/tmp/clr_refresh_nonexistent_it2.json" ] );
assert_eq!( exit_code( &out ), 1, "expected exit 1; stderr: {}", stderr_str( &out ) );
let err = stderr_str( &out );
assert!(
err.contains( "not found" ) || err.contains( "No such file" ) || err.contains( "cannot read" ),
"expected file-not-found message; got: {err}"
);
}
#[ cfg( unix ) ]
#[ test ]
fn test_it4_timeout_zero_unlimited()
{
use std::os::unix::fs::PermissionsExt;
let dir = tempfile::tempdir().expect( "tmpdir" );
let script = dir.path().join( "claude" );
std::fs::write( &script, "#!/bin/sh\nsleep 1\n" ).expect( "write fake claude" );
std::fs::set_permissions( &script, std::fs::Permissions::from_mode( 0o755 ) )
.expect( "chmod fake claude" );
let path_val = format!(
"{}:{}",
dir.path().display(),
std::env::var( "PATH" ).unwrap_or_default(),
);
let creds = make_creds_file( "{}" );
let creds_path = creds.path().to_str().expect( "temp path is valid UTF-8" );
let bin = env!( "CARGO_BIN_EXE_clr" );
let out = std::process::Command::new( bin )
.args( [ "refresh", "--creds", creds_path, "--timeout", "0" ] )
.env( "PATH", &path_val )
.output()
.expect( "invoke clr refresh" );
assert_eq!(
exit_code( &out ),
0,
"IT-4: --timeout 0 must let subprocess run to completion (unlimited); stderr: {}",
stderr_str( &out ),
);
}
#[ test ]
fn test_it6_invalid_timeout()
{
let creds = make_creds_file( "{}" );
let path = creds.path().to_str().expect( "temp path is valid UTF-8" );
let out = run_refresh( &[ "--creds", path, "--timeout", "abc" ] );
assert_eq!( exit_code( &out ), 1, "expected exit 1; stderr: {}", stderr_str( &out ) );
assert!(
stderr_str( &out ).contains( "invalid --timeout" ),
"expected 'invalid --timeout' message; got: {}", stderr_str( &out )
);
}
#[ test ]
fn test_it8_help_exits_zero()
{
let bin = env!( "CARGO_BIN_EXE_clr" );
let out = std::process::Command::new( bin )
.args( [ "refresh", "--help" ] )
.output()
.expect( "failed to invoke clr refresh --help" );
assert_eq!(
exit_code( &out ),
0,
"clr refresh --help must exit 0; got: {:?}\nstderr: {}",
out.status.code(),
stderr_str( &out ),
);
let stdout = stdout_str( &out );
assert!(
stdout.contains( "--creds" ),
"help text must mention --creds; got:\n{stdout}",
);
assert!(
stdout.contains( "--timeout" ),
"help text must mention --timeout; got:\n{stdout}",
);
assert!(
stdout.contains( "--trace" ),
"help text must mention --trace; got:\n{stdout}",
);
assert!(
stdout.contains( "--help" ),
"help text must mention --help; got:\n{stdout}",
);
}