diff --git a/tests/test_workspace_profiles_sim.py b/tests/test_workspace_profiles_sim.py new file mode 100644 index 0000000..13711fd --- /dev/null +++ b/tests/test_workspace_profiles_sim.py @@ -0,0 +1,81 @@ +import pytest +import time +import sys +import os +from pathlib import Path + +# Ensure project root is in path for imports +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_workspace_profiles_restoration(live_gui): + """ + Verifies that workspace profiles can save and restore UI state. + 1. Sets a field (ui_separate_tier1) to True. + 2. Saves a workspace profile. + 3. Resets the field to False. + 4. Loads the workspace profile. + 5. Verifies the field is restored to True. + """ + client = api_hook_client.ApiHookClient() + assert client.wait_for_server(timeout=20), "Hook server did not start" + + # Ensure we are in a clean state + print("Ensuring clean state (ui_separate_tier1=False)...") + client.set_value('ui_separate_tier1', False) + time.sleep(1.0) + + # 1. Set a field that is captured in workspace profiles + print("Setting ui_separate_tier1 to True...") + client.set_value('ui_separate_tier1', True) + + # Wait for settle + time.sleep(1.0) + + # Verify it is set + val_before = client.get_value('ui_separate_tier1') + print(f"Value before save: {val_before}") + assert val_before is True + + # 2. Save workspace profile + print("Saving workspace profile 'test_restore'...") + # Using push_event to trigger custom_callback + client.push_event("custom_callback", { + "callback": "save_workspace_profile", + "args": ["test_restore", "project"] + }) + + # Wait for save to complete and profiles to reload in the controller + time.sleep(2.0) + + # 3. Change the field + print("Changing ui_separate_tier1 to False...") + client.set_value('ui_separate_tier1', False) + + # Wait for settle + time.sleep(1.0) + + # Verify it is changed + val_mid = client.get_value('ui_separate_tier1') + print(f"Value after change: {val_mid}") + assert val_mid is False + + # 4. Load the profile + print("Loading workspace profile 'test_restore'...") + client.push_event("custom_callback", { + "callback": "load_workspace_profile", + "args": ["test_restore"] + }) + + # Wait for load to apply + time.sleep(2.0) + + # 5. Verify restoration + restored_value = client.get_value('ui_separate_tier1') + print(f"Restored value: {restored_value}") + assert restored_value is True + + print("Workspace profile restoration test PASSED.")