use crate::subprocess_helpers::{ assert_exit, run_clm, stderr, stdout };
#[ test ]
fn fm01_01_text_default_labeled()
{
let out = run_clm( &[ ".version.show" ] );
if out.status.code() == Some( 0 )
{
let text = stdout( &out );
assert!( text.contains( "Version:" ), "default text format must include Version: label: {text}" );
assert!( !text.starts_with( '{' ), "default text output must not be JSON: {text}" );
}
}
#[ test ]
fn fm02_01_text_v0_raw()
{
let out = run_clm( &[ ".version.show", "v::0" ] );
if out.status.code() == Some( 0 )
{
let text = stdout( &out );
assert!( !text.contains( "Version:" ), "v::0 must suppress Version: label: {text}" );
assert!( text.chars().any( |c| c.is_ascii_digit() ), "v::0 output must contain version digits: {text}" );
}
}
#[ test ]
fn fm03_01_text_v1_labeled()
{
let out = run_clm( &[ ".version.show", "v::1" ] );
if out.status.code() == Some( 0 )
{
let text = stdout( &out );
assert!( text.contains( "Version:" ), "v::1 must include Version: label: {text}" );
}
}
#[ test ]
fn fm04_01_text_not_json()
{
let out = run_clm( &[ ".status" ] );
assert_exit( &out, 0 );
let text = stdout( &out );
assert!(
!text.trim_start().starts_with( '{' ) && !text.trim_start().starts_with( '[' ),
"default text output must not be a JSON object or array: {text}"
);
}
#[ test ]
fn fm01_02_json_object_output()
{
let out = run_clm( &[ ".status", "format::json" ] );
assert_exit( &out, 0 );
let text = stdout( &out );
assert!( text.trim_start().starts_with( '{' ), "format::json must produce JSON object: {text}" );
assert!( text.contains( "\"version\"" ), "JSON object must contain version key: {text}" );
}
#[ test ]
fn fm02_02_json_array_output()
{
let out = run_clm( &[ ".version.list", "format::json" ] );
assert_exit( &out, 0 );
let text = stdout( &out );
assert!( text.trim_start().starts_with( '[' ), "format::json on list command must produce JSON array: {text}" );
}
#[ test ]
fn fm03_02_json_case_sensitive()
{
let out = run_clm( &[ ".status", "format::JSON" ] );
assert_exit( &out, 1 );
let err = stderr( &out );
assert!( !err.is_empty(), "format::JSON rejection must produce error message: {err}" );
}
#[ test ]
fn fm04_02_json_v0_primary_key()
{
let out = run_clm( &[ ".status", "format::json", "v::0" ] );
assert_exit( &out, 0 );
let text = stdout( &out );
assert!( text.trim_start().starts_with( '{' ), "format::json must produce JSON object: {text}" );
assert!( text.contains( "\"version\"" ), "JSON at v::0 must still include version key: {text}" );
}