"""Tests for session.* commands.""" import time from browser_cli.client import send_command from tests.conftest import TEST_BROWSER_PROFILE SESSION_NAME = "_pytest_session" def test_session_save_and_list(browser): browser("session.save", {"name": SESSION_NAME}) sessions = browser("session.list") assert isinstance(sessions, list) names = [s["name"] for s in sessions] assert SESSION_NAME in names def test_session_list_has_tab_count(browser): sessions = browser("session.list") for s in sessions: assert "name" in s assert "tabs" in s assert isinstance(s["tabs"], int) def test_session_diff(browser): browser("session.save", {"name": SESSION_NAME + "_a"}) browser("session.save", {"name": SESSION_NAME + "_b"}) diff = browser("session.diff", {"nameA": SESSION_NAME + "_a", "nameB": SESSION_NAME + "_b"}) assert "added" in diff assert "removed" in diff def test_session_remove(browser): browser("session.save", {"name": SESSION_NAME + "_remove"}) browser("session.remove", {"name": SESSION_NAME + "_remove"}) sessions = browser("session.list") names = [s["name"] for s in sessions] assert SESSION_NAME + "_remove" not in names def test_session_load_restores_group_metadata(browser): session_name = SESSION_NAME + "_groups" group_name = "__session_group_restore__" group_url = "https://example.com/?session-group=1" group = browser("group.open", {"name": group_name}) gid = group["id"] created_ids = set() try: added = browser("group.add_tab", {"group": str(gid), "url": group_url}) created_ids.add(added["tabId"]) for _ in range(20): original_tabs = browser("group.tabs", {"groupId": gid}) if any(tab.get("url") == group_url for tab in original_tabs): break time.sleep(0.1) browser("session.save", {"name": session_name}) original_tabs = browser("group.tabs", {"groupId": gid}) created_ids.update(t["id"] for t in original_tabs) browser("group.close", {"groupId": gid}) for tab_id in list(created_ids): try: browser("tabs.close", {"tabId": tab_id}) except Exception: pass baseline_ids = {t["id"] for t in browser("tabs.list")} browser("session.load", {"name": session_name}) tabs_after = browser("tabs.list") loaded_ids = {t["id"] for t in tabs_after} - baseline_ids restored_groups = [] for _ in range(20): restored_groups = browser("group.query", {"search": group_name}) if restored_groups: break time.sleep(0.1) assert restored_groups, "Expected saved group to be restored" restored = next((g for g in restored_groups if g.get("title") == group_name), None) assert restored is not None restored_tabs = browser("group.tabs", {"groupId": restored["id"]}) restored_urls = {t["url"] for t in restored_tabs} assert group_url in restored_urls browser("group.close", {"groupId": restored["id"]}) for tab_id in loaded_ids: try: browser("tabs.close", {"tabId": tab_id}) except Exception: pass finally: try: browser("session.remove", {"name": session_name}) except Exception: pass def teardown_module(module): """Clean up test sessions after all tests run.""" for name in [SESSION_NAME, SESSION_NAME + "_a", SESSION_NAME + "_b", SESSION_NAME + "_groups"]: try: send_command("session.remove", {"name": name}, profile=TEST_BROWSER_PROFILE) except Exception: pass