Add application read models and thin TUI command adapter

This commit is contained in:
2026-10-30 23:02:35 +02:00
parent 9a143e975e
commit 7123197ec4
12 changed files with 2669 additions and 703 deletions
+36
View File
@@ -102,6 +102,42 @@ fn saved_peer_projection_counts_legacy_peers_without_inventing_managed_state() {
assert!(!view.has_draft);
}
#[test]
fn read_model_exposes_supported_exact_host_peer_actions_individually() {
let fixture = fixture();
let legacy_key = WireGuardPrivateKey::generate()
.expect("synthetic legacy peer key")
.public_key();
let mut server_config =
fs::read_to_string(&fixture.settings.server_config_path).expect("synthetic server config");
server_config.push_str(&format!(
"\n[Peer]\nPublicKey = {legacy_key}\nAllowedIPs = 10.20.0.2/32\n"
));
fs::write(&fixture.settings.server_config_path, server_config)
.expect("write synthetic exact-host peer");
let app = wireguard_admin::app::Application::open_from_saved_store(fixture.store.clone())
.expect("application opens with an inspect-only legacy peer");
let mut view = SessionView::from_application(&app, 0);
assert_eq!(view.clients.len(), 1);
assert_eq!(view.clients[0].mutable_identity, None);
assert_eq!(view.application.as_ref().unwrap().clients.len(), 1);
let mut state = wireguard_admin::tui::state::UiState {
view: Some(view),
..Default::default()
};
assert!(state.select_peer_index(0));
assert!(state.selected_rename_available());
assert!(state.selected_delete_available());
assert!(!state.selected_first_delivery_available());
assert!(!state.selected_reissue_available());
view = SessionView::from_application(&app, 0);
assert_eq!(view.saved_peer_count, Some(1));
assert!(view.client_states.is_empty());
}
#[derive(Clone, Default)]
struct CountingStatistics(Arc<AtomicUsize>);