import { describe, expect, it } from 'vitest'; import { UI_HELP } from './uiHelp'; describe('UI_HELP', () => { const requiredKeys = [ 'dash_fleet_health', 'dash_install_funnel', 'dash_operator_audit', 'dash_signal_locked', 'dash_advanced_mode', 'dash_raw_stream', 'dash_fleet_hash', 'dash_est_daily', 'dash_accept_rate', 'dash_nodes_live', 'dash_fleet_pipeline', 'dash_pool_stratum', 'dash_ai_activity', 'dash_gpu_rvn', 'dash_xmr_section', 'crucible_node_roster', 'crucible_heat_map', 'crucible_groups', 'crucible_active_target', 'crucible_tab_ops', 'crucible_tab_recon', 'crucible_tab_files', 'crucible_tab_spread', 'crucible_tab_tunnels', 'crucible_mining_ops', 'crucible_access_depth', 'crucible_access_depth_calibrate', 'crucible_resume', 'crucible_pause', 'crucible_full_audit', 'crucible_posture_badge', 'crucible_master_terminal', 'crucible_section_agent', 'crucible_section_system', 'crucible_section_persistence', 'crucible_section_maintenance', 'crucible_section_intel', 'crucible_section_security', 'crucible_section_network', 'crucible_section_media', 'crucible_section_files_quick', 'crucible_section_files_advanced', 'crucible_section_destructive', 'crucible_section_spread', 'crucible_section_cred_graph', 'crucible_section_service_graph', 'crucible_section_seek', 'crucible_section_ssh', 'crucible_section_tunnels', 'crucible_section_protocol_tunnel', 'crucible_section_portfwd', 'bm_pin_dropper', 'bm_public_build', 'bm_dropper_oneliner', 'bm_reforge', 'bm_platform_badge', 'fm_remote_browse', 'fm_upload', 'fm_encrypt_path', 'pt_path_tracer', 'pt_agent_chain', 'fleet_runtime_policy', 'fleet_runtime_modules', 'spread_funnel_widget', 'md_overview', 'md_operation_chip', 'md_spread_profile', 'md_campaign_identity', 'md_strike_pipeline', 'md_equip_strike', 'ew_overview', 'ew_campaign_setup', 'ew_campaign_slug', 'ew_install_links', 'ew_spread_kit', 'ew_war_room', 'ew_supply_chain', 'ew_public_urls', 'ew_techniques', 'ew_shared_notes', 'ew_war_room_funnel', 'ew_war_room_views', 'crucible_btn_spread_now', 'crucible_btn_subnet_scan', 'crucible_btn_hole_punch', 'crucible_btn_cf_tunnel', 'fl_filter_chips', 'fl_bulk_actions', 'fl_groups', 'set_alerts', 'set_alert_notifications', 'set_webhook', 'crucible_section_spread_templates', ] as const; it('defines help for every documented UI key', () => { expect(Object.keys(UI_HELP).sort()).toEqual([...requiredKeys].sort()); }); it('each entry is a complete non-empty blurb', () => { for (const key of requiredKeys) { const text = UI_HELP[key]; expect(typeof text).toBe('string'); expect(text.trim().length).toBeGreaterThan(20); expect(text).not.toMatch(/coming soon|TODO|TBD/i); } }); });