lesavka/testing/tests/client_relayctl_binary_contract.rs

50 lines
2.0 KiB
Rust
Raw Normal View History

//! Include-based coverage for relay control CLI parsing and helpers.
//!
//! Scope: include `client/src/bin/lesavka-relayctl.rs` and exercise helper
//! branches that do not require a live relay server.
//! Targets: `client/src/bin/lesavka-relayctl.rs`.
//! Why: relay power recovery controls need parser coverage without depending on
//! a live relay endpoint.
#[allow(warnings)]
mod relayctl_binary {
include!(env!("LESAVKA_CLIENT_RELAYCTL_BIN_SRC"));
#[test]
fn command_aliases_and_usage_are_stable() {
assert_eq!(CommandKind::parse("status"), Some(CommandKind::Status));
assert_eq!(CommandKind::parse("get"), Some(CommandKind::Status));
assert_eq!(CommandKind::parse("auto"), Some(CommandKind::Auto));
assert_eq!(CommandKind::parse("on"), Some(CommandKind::On));
assert_eq!(CommandKind::parse("force-on"), Some(CommandKind::On));
assert_eq!(CommandKind::parse("off"), Some(CommandKind::Off));
assert_eq!(CommandKind::parse("force-off"), Some(CommandKind::Off));
assert_eq!(CommandKind::parse("reset-usb"), Some(CommandKind::ResetUsb));
assert_eq!(
CommandKind::parse("recover-usb"),
Some(CommandKind::ResetUsb)
);
assert_eq!(CommandKind::parse("bad"), None);
assert!(usage().contains("lesavka-relayctl"));
}
#[tokio::test(flavor = "current_thread")]
async fn connect_rejects_invalid_endpoint_without_network_retry() {
let err = connect("not a uri").await.expect_err("invalid endpoint");
assert!(err.to_string().contains("invalid relay server address"));
}
#[test]
fn print_state_is_non_panicking_for_populated_payload() {
print_state(lesavka_common::lesavka::CapturePowerState {
available: true,
enabled: true,
mode: "manual".to_string(),
detected_devices: 2,
active_leases: 1,
unit: "lesavka-capture.service".to_string(),
detail: "ok".to_string(),
});
}
}