50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
import pytest
|
|
import time
|
|
import sys
|
|
import os
|
|
|
|
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
|
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "src")))
|
|
|
|
from src import api_hook_client
|
|
|
|
@pytest.mark.integration
|
|
def test_auto_switch_sim(live_gui):
|
|
client = api_hook_client.ApiHookClient()
|
|
assert client.wait_for_server(timeout=15), "Hook server did not start"
|
|
|
|
# Reset layout and save a test profile for Tier 3
|
|
client.set_value('show_windows', {'Diagnostics': True})
|
|
client.push_event('custom_callback', {'callback': 'save_workspace_profile', 'args': ['Tier3Profile', 'project']})
|
|
time.sleep(1)
|
|
|
|
# Reset layout to something else
|
|
client.set_value('show_windows', {'Diagnostics': False})
|
|
|
|
# Enable auto switch and bind
|
|
client.set_value('ui_auto_switch_layout', True)
|
|
client.set_value('ui_tier_layout_bindings', {'Tier 1': '', 'Tier 2': '', 'Tier 3': 'Tier3Profile', 'Tier 4': ''})
|
|
|
|
# Send mma_state_update event to trigger Tier 2
|
|
# Since we can't send raw asyncio events easily via ApiHookClient without a dedicated endpoint,
|
|
# we can simulate it by setting the active_tier via the Hook API if it triggers the logic,
|
|
# OR we can just inject an event into the app's event queue via custom_callback.
|
|
|
|
def trigger_tier(tier):
|
|
# Inject mma_state_update task directly via hook API
|
|
client.push_event("mma_state_update", {"status": "running", "active_tier": tier})
|
|
|
|
# First Tier 2
|
|
trigger_tier('Tier 2 (Tech Lead)')
|
|
time.sleep(1)
|
|
assert client.get_value('show_windows').get('Diagnostics', False) == False
|
|
|
|
# Then Tier 3
|
|
trigger_tier('Tier 3 (Worker): task-1')
|
|
time.sleep(1)
|
|
|
|
# Verify
|
|
assert client.get_value('show_windows').get('Diagnostics', False) == True
|
|
|
|
print("Contextual auto-switch simulation PASSED.")
|