use super::*;
use crate::cli::AuthTarget;
fn args(client: Option<ClientKind>) -> ConfigureArgs {
ConfigureArgs {
client,
all: client.is_none(),
undo: false,
target: AuthTarget::default(),
token: None,
token_stdin: false,
ttl_hours: 8760,
}
}
#[test]
fn clients_that_cannot_be_configured_by_file_are_named() {
for client in [ClientKind::Cursor, ClientKind::GeminiCli] {
let reason = unconfigurable(client).expect("must be reported as unconfigurable");
assert!(!reason.is_empty(), "{client} must say why, not just refuse");
}
for client in ClientKind::ALL {
if matches!(client, ClientKind::Cursor | ClientKind::GeminiCli) {
continue;
}
assert!(
unconfigurable(client).is_none(),
"{client} must be configurable"
);
}
}
#[test]
fn only_the_environment_only_client_skips_the_config_file() {
assert!(environment_only(ClientKind::GrokCli));
for client in ClientKind::ALL {
if client == ClientKind::GrokCli {
continue;
}
assert!(
!environment_only(client),
"{client} is configured by a file, not only by the environment"
);
}
}
#[test]
fn a_named_client_is_the_only_one_acted_on() {
assert_eq!(
args(Some(ClientKind::ClaudeCode)).clients(),
[ClientKind::ClaudeCode]
);
assert_eq!(args(None).clients(), ClientKind::ALL.to_vec());
}
#[test]
fn an_explicit_token_is_the_admin_credential_for_undo() {
let mut with_token = args(Some(ClientKind::ClaudeCode));
with_token.token = Some("la_sk_explicit".into());
assert_eq!(
admin_token_for(&with_token, "https://router.example"),
Some("la_sk_explicit".to_string())
);
}
#[test]
fn the_default_credential_outlives_the_week() {
assert_eq!(args(Some(ClientKind::ClaudeCode)).ttl_hours, 8760);
}