add multi browser mode to arragate data from all browsers by tabs list, tabs count, group list, group count and windows list
remove (unnamed) into the group names just leave it a empty string, remove Focused on windows how should the browser know what windows are focused
This commit is contained in:
+104
-3
@@ -5,8 +5,8 @@ These tests mock `send_command` so no live browser connection is required.
|
||||
import pytest
|
||||
from unittest.mock import MagicMock, patch, call
|
||||
|
||||
from browser_cli import BrowserCLI, Tab, Group
|
||||
from browser_cli.client import BrowserNotConnected
|
||||
from browser_cli import BrowserCLI, BrowserCounts, Tab, Group
|
||||
from browser_cli.client import BrowserNotConnected, BrowserTarget
|
||||
|
||||
|
||||
# ── Helpers ───────────────────────────────────────────────────────────────────
|
||||
@@ -36,7 +36,7 @@ def mock_send():
|
||||
BrowserCLI._cmd calls the `send_command` name that was imported into
|
||||
browser_cli/__init__.py, so we must patch it there, not in the client module.
|
||||
"""
|
||||
with patch("browser_cli.send_command") as m:
|
||||
with patch("browser_cli.send_command") as m, patch("browser_cli.active_browser_targets", return_value=[]):
|
||||
yield m
|
||||
|
||||
|
||||
@@ -268,6 +268,48 @@ class TestTabs:
|
||||
mock_send.return_value = 5
|
||||
assert b.tabs_count() == 5
|
||||
|
||||
def test_tabs_list_multi_browser_annotates_browser_and_binds_actions(self, b, mock_send):
|
||||
with patch(
|
||||
"browser_cli.active_browser_targets",
|
||||
return_value=[
|
||||
BrowserTarget("default", "uuid-1", "/tmp/uuid-1.sock"),
|
||||
BrowserTarget("work", "work", "/tmp/work.sock"),
|
||||
],
|
||||
):
|
||||
mock_send.side_effect = [
|
||||
[TAB_DATA],
|
||||
[{**TAB_DATA, "id": 11}],
|
||||
None,
|
||||
]
|
||||
|
||||
tabs = b.tabs_list()
|
||||
tabs[1].close()
|
||||
|
||||
assert [tab.browser for tab in tabs] == ["uuid-1", "work"]
|
||||
assert [tab.id for tab in tabs] == [10, 11]
|
||||
assert mock_send.call_args_list == [
|
||||
call("tabs.list", {}, profile="default"),
|
||||
call("tabs.list", {}, profile="work"),
|
||||
call("tabs.close", {"tabId": 11}, profile="work"),
|
||||
]
|
||||
|
||||
def test_tabs_count_multi_browser_returns_browser_counts(self, b, mock_send):
|
||||
with patch(
|
||||
"browser_cli.active_browser_targets",
|
||||
return_value=[
|
||||
BrowserTarget("default", "uuid-1", "/tmp/uuid-1.sock"),
|
||||
BrowserTarget("work", "work", "/tmp/work.sock"),
|
||||
],
|
||||
):
|
||||
mock_send.side_effect = [3, 4]
|
||||
result = b.tabs_count("github")
|
||||
|
||||
assert result == BrowserCounts(total=7, by_browser={"uuid-1": 3, "work": 4})
|
||||
assert mock_send.call_args_list == [
|
||||
call("tabs.count", {"pattern": "github"}, profile="default"),
|
||||
call("tabs.count", {"pattern": "github"}, profile="work"),
|
||||
]
|
||||
|
||||
def test_tabs_query(self, b, mock_send):
|
||||
mock_send.return_value = [TAB_DATA]
|
||||
result = b.tabs_query("example")
|
||||
@@ -330,6 +372,44 @@ class TestGroups:
|
||||
mock_send.return_value = 7
|
||||
assert b.group_count() == 7
|
||||
|
||||
def test_group_list_multi_browser_annotates_browser_and_binds_actions(self, b, mock_send):
|
||||
with patch(
|
||||
"browser_cli.active_browser_targets",
|
||||
return_value=[
|
||||
BrowserTarget("default", "uuid-1", "/tmp/uuid-1.sock"),
|
||||
BrowserTarget("work", "work", "/tmp/work.sock"),
|
||||
],
|
||||
):
|
||||
mock_send.side_effect = [
|
||||
[GROUP_DATA],
|
||||
[{**GROUP_DATA, "id": 99, "title": "Later"}],
|
||||
None,
|
||||
]
|
||||
|
||||
groups = b.group_list()
|
||||
groups[1].close()
|
||||
|
||||
assert [group.browser for group in groups] == ["uuid-1", "work"]
|
||||
assert [group.id for group in groups] == [42, 99]
|
||||
assert mock_send.call_args_list == [
|
||||
call("group.list", {}, profile="default"),
|
||||
call("group.list", {}, profile="work"),
|
||||
call("group.close", {"groupId": 99}, profile="work"),
|
||||
]
|
||||
|
||||
def test_group_count_multi_browser_returns_browser_counts(self, b, mock_send):
|
||||
with patch(
|
||||
"browser_cli.active_browser_targets",
|
||||
return_value=[
|
||||
BrowserTarget("default", "uuid-1", "/tmp/uuid-1.sock"),
|
||||
BrowserTarget("work", "work", "/tmp/work.sock"),
|
||||
],
|
||||
):
|
||||
mock_send.side_effect = [2, 5]
|
||||
result = b.group_count()
|
||||
|
||||
assert result == BrowserCounts(total=7, by_browser={"uuid-1": 2, "work": 5})
|
||||
|
||||
def test_group_query(self, b, mock_send):
|
||||
mock_send.return_value = [GROUP_DATA]
|
||||
groups = b.group_query("Work")
|
||||
@@ -371,6 +451,27 @@ class TestGroups:
|
||||
)
|
||||
|
||||
|
||||
class TestWindows:
|
||||
def test_windows_list_multi_browser_adds_browser(self, b, mock_send):
|
||||
with patch(
|
||||
"browser_cli.active_browser_targets",
|
||||
return_value=[
|
||||
BrowserTarget("default", "uuid-1", "/tmp/uuid-1.sock"),
|
||||
BrowserTarget("work", "work", "/tmp/work.sock"),
|
||||
],
|
||||
):
|
||||
mock_send.side_effect = [
|
||||
[{"id": 1, "tabCount": 2, "state": "normal"}],
|
||||
[{"id": 2, "tabCount": 3, "state": "maximized"}],
|
||||
]
|
||||
result = b.windows_list()
|
||||
|
||||
assert result == [
|
||||
{"id": 1, "tabCount": 2, "state": "normal", "browser": "uuid-1"},
|
||||
{"id": 2, "tabCount": 3, "state": "maximized", "browser": "work"},
|
||||
]
|
||||
|
||||
|
||||
# ── Tab model ─────────────────────────────────────────────────────────────────
|
||||
|
||||
class TestTabModel:
|
||||
|
||||
Reference in New Issue
Block a user