101 lines
3.3 KiB
Python
101 lines
3.3 KiB
Python
"""Tests for session.* commands."""
|
|
import pytest
|
|
from browser_cli.client import send_command
|
|
|
|
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"])
|
|
|
|
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 = browser("group.query", {"search": group_name})
|
|
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})
|
|
except Exception:
|
|
pass
|