Skip to content

Commit d0aa720

Browse files
chkp-ronizclaude
andcommitted
refactor(test): extract shared mock setup into mock_login_browser fixture
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 7d2863f commit d0aa720

File tree

1 file changed

+24
-58
lines changed

1 file changed

+24
-58
lines changed

tests/unit/cli/test_session.py

Lines changed: 24 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -98,62 +98,13 @@ def test_login_rejects_invalid_browser(self, runner):
9898

9999
assert result.exit_code != 0
100100

101-
def test_login_msedge_skips_chromium_install(self, runner, tmp_path):
102-
"""Test --browser msedge skips _ensure_chromium_installed."""
103-
with (
104-
patch("notebooklm.cli.session._ensure_chromium_installed") as mock_ensure,
105-
patch("playwright.sync_api.sync_playwright") as mock_pw,
106-
patch(
107-
"notebooklm.cli.session.get_storage_path", return_value=tmp_path / "storage.json"
108-
),
109-
patch(
110-
"notebooklm.cli.session.get_browser_profile_dir",
111-
return_value=tmp_path / "profile",
112-
),
113-
patch("notebooklm.cli.session._sync_server_language_to_config"),
114-
patch("builtins.input", return_value=""),
115-
):
116-
mock_context = MagicMock()
117-
mock_page = MagicMock()
118-
mock_page.url = "https://notebooklm.google.com/"
119-
mock_context.pages = [mock_page]
120-
mock_pw.return_value.__enter__.return_value.chromium.launch_persistent_context.return_value = mock_context
121-
122-
runner.invoke(cli, ["login", "--browser", "msedge"])
123-
124-
mock_ensure.assert_not_called()
125-
126-
def test_login_msedge_passes_channel_param(self, runner, tmp_path):
127-
"""Test --browser msedge passes channel='msedge' to launch_persistent_context."""
128-
with (
129-
patch("notebooklm.cli.session._ensure_chromium_installed"),
130-
patch("playwright.sync_api.sync_playwright") as mock_pw,
131-
patch(
132-
"notebooklm.cli.session.get_storage_path", return_value=tmp_path / "storage.json"
133-
),
134-
patch(
135-
"notebooklm.cli.session.get_browser_profile_dir",
136-
return_value=tmp_path / "profile",
137-
),
138-
patch("notebooklm.cli.session._sync_server_language_to_config"),
139-
patch("builtins.input", return_value=""),
140-
):
141-
mock_context = MagicMock()
142-
mock_page = MagicMock()
143-
mock_page.url = "https://notebooklm.google.com/"
144-
mock_context.pages = [mock_page]
145-
mock_launch = (
146-
mock_pw.return_value.__enter__.return_value.chromium.launch_persistent_context
147-
)
148-
mock_launch.return_value = mock_context
149-
150-
runner.invoke(cli, ["login", "--browser", "msedge"])
151-
152-
call_kwargs = mock_launch.call_args[1]
153-
assert call_kwargs.get("channel") == "msedge"
101+
@pytest.fixture
102+
def mock_login_browser(self, tmp_path):
103+
"""Mock Playwright browser launch for login --browser tests.
154104
155-
def test_login_chromium_default_no_channel(self, runner, tmp_path):
156-
"""Test default chromium does not pass channel and calls _ensure_chromium_installed."""
105+
Yields (mock_ensure, mock_launch) for assertions on chromium install
106+
check and launch_persistent_context kwargs.
107+
"""
157108
with (
158109
patch("notebooklm.cli.session._ensure_chromium_installed") as mock_ensure,
159110
patch("playwright.sync_api.sync_playwright") as mock_pw,
@@ -176,11 +127,26 @@ def test_login_chromium_default_no_channel(self, runner, tmp_path):
176127
)
177128
mock_launch.return_value = mock_context
178129

179-
runner.invoke(cli, ["login", "--browser", "chromium"])
130+
yield mock_ensure, mock_launch
131+
132+
def test_login_msedge_skips_chromium_install(self, runner, mock_login_browser):
133+
"""Test --browser msedge skips _ensure_chromium_installed."""
134+
mock_ensure, _ = mock_login_browser
135+
runner.invoke(cli, ["login", "--browser", "msedge"])
136+
mock_ensure.assert_not_called()
180137

138+
def test_login_msedge_passes_channel_param(self, runner, mock_login_browser):
139+
"""Test --browser msedge passes channel='msedge' to launch_persistent_context."""
140+
_, mock_launch = mock_login_browser
141+
runner.invoke(cli, ["login", "--browser", "msedge"])
142+
assert mock_launch.call_args[1].get("channel") == "msedge"
143+
144+
def test_login_chromium_default_no_channel(self, runner, mock_login_browser):
145+
"""Test default chromium calls _ensure_chromium_installed and has no channel."""
146+
mock_ensure, mock_launch = mock_login_browser
147+
runner.invoke(cli, ["login", "--browser", "chromium"])
181148
mock_ensure.assert_called_once()
182-
call_kwargs = mock_launch.call_args[1]
183-
assert "channel" not in call_kwargs
149+
assert "channel" not in mock_launch.call_args[1]
184150

185151

186152
# =============================================================================

0 commit comments

Comments
 (0)