Skip to content

Commit f330c09

Browse files
author
SentienceDev
committed
fix tests
1 parent 4e6e450 commit f330c09

File tree

2 files changed

+65
-38
lines changed

2 files changed

+65
-38
lines changed

tests/test_proxy.py

Lines changed: 38 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
"""Tests for proxy support in SentienceBrowser"""
22

3+
import logging
34
import os
45
from unittest.mock import MagicMock, patch
56

7+
import pytest
8+
69
from sentience.browser import SentienceBrowser
710
from sentience.models import ProxyConfig
811

@@ -96,33 +99,33 @@ def test_parse_proxy_socks5(self):
9699
assert config.username == "user"
97100
assert config.password == "pass"
98101

99-
def test_parse_proxy_invalid_scheme(self, capsys):
102+
def test_parse_proxy_invalid_scheme(self, caplog):
100103
"""Test parsing proxy with invalid scheme"""
101-
browser = SentienceBrowser()
102-
config = browser._parse_proxy("ftp://proxy.example.com:8080")
104+
with caplog.at_level(logging.WARNING):
105+
browser = SentienceBrowser()
106+
config = browser._parse_proxy("ftp://proxy.example.com:8080")
103107

104-
assert config is None
105-
captured = capsys.readouterr()
106-
assert "Unsupported proxy scheme: ftp" in captured.out
107-
assert "Supported: http, https, socks5" in captured.out
108+
assert config is None
109+
assert "Unsupported proxy scheme: ftp" in caplog.text
110+
assert "Supported: http, https, socks5" in caplog.text
108111

109-
def test_parse_proxy_missing_port(self, capsys):
112+
def test_parse_proxy_missing_port(self, caplog):
110113
"""Test parsing proxy without port"""
111-
browser = SentienceBrowser()
112-
config = browser._parse_proxy("http://proxy.example.com")
114+
with caplog.at_level(logging.WARNING):
115+
browser = SentienceBrowser()
116+
config = browser._parse_proxy("http://proxy.example.com")
113117

114-
assert config is None
115-
captured = capsys.readouterr()
116-
assert "Proxy URL must include hostname and port" in captured.out
118+
assert config is None
119+
assert "Proxy URL must include hostname and port" in caplog.text
117120

118-
def test_parse_proxy_missing_host(self, capsys):
121+
def test_parse_proxy_missing_host(self, caplog):
119122
"""Test parsing proxy without hostname"""
120-
browser = SentienceBrowser()
121-
config = browser._parse_proxy("http://:8080")
123+
with caplog.at_level(logging.WARNING):
124+
browser = SentienceBrowser()
125+
config = browser._parse_proxy("http://:8080")
122126

123-
assert config is None
124-
captured = capsys.readouterr()
125-
assert "Proxy URL must include hostname and port" in captured.out
127+
assert config is None
128+
assert "Proxy URL must include hostname and port" in caplog.text
126129

127130
def test_parse_proxy_empty_string(self):
128131
"""Test parsing empty proxy string"""
@@ -202,7 +205,7 @@ def test_start_without_proxy(self, mock_playwright, mock_copytree):
202205

203206
@patch("sentience.browser.shutil.copytree")
204207
@patch("sentience.browser.sync_playwright")
205-
def test_start_with_proxy(self, mock_playwright, mock_copytree, capsys):
208+
def test_start_with_proxy(self, mock_playwright, mock_copytree, caplog):
206209
"""Test browser start with proxy"""
207210
# Mock Playwright
208211
mock_pw_instance = MagicMock()
@@ -221,21 +224,21 @@ def test_start_with_proxy(self, mock_playwright, mock_copytree, capsys):
221224
mock_path.return_value.parent.parent.parent = MagicMock()
222225
mock_path.return_value.parent.parent.parent.__truediv__.return_value = mock_ext_path
223226

224-
browser = SentienceBrowser(proxy="http://user:pass@proxy.example.com:8080")
225-
browser.start()
226-
227-
# Verify proxy was passed to launch_persistent_context
228-
call_kwargs = mock_pw_instance.chromium.launch_persistent_context.call_args[1]
229-
assert "proxy" in call_kwargs
230-
assert call_kwargs["proxy"] == {
231-
"server": "http://proxy.example.com:8080",
232-
"username": "user",
233-
"password": "pass",
234-
}
235-
236-
# Verify console message
237-
captured = capsys.readouterr()
238-
assert "Using proxy: http://proxy.example.com:8080" in captured.out
227+
with caplog.at_level(logging.INFO):
228+
browser = SentienceBrowser(proxy="http://user:pass@proxy.example.com:8080")
229+
browser.start()
230+
231+
# Verify proxy was passed to launch_persistent_context
232+
call_kwargs = mock_pw_instance.chromium.launch_persistent_context.call_args[1]
233+
assert "proxy" in call_kwargs
234+
assert call_kwargs["proxy"] == {
235+
"server": "http://proxy.example.com:8080",
236+
"username": "user",
237+
"password": "pass",
238+
}
239+
240+
# Verify log message
241+
assert "Using proxy: http://proxy.example.com:8080" in caplog.text
239242

240243
@patch("sentience.browser.shutil.copytree")
241244
@patch("sentience.browser.sync_playwright")

tests/test_video_recording.py

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ def test_video_recording_basic():
2222
try:
2323
browser.page.goto("https://example.com")
2424
browser.page.wait_for_load_state("domcontentloaded")
25+
26+
# Small delay to ensure page is fully loaded and video recording is stable
27+
import time
28+
time.sleep(0.5)
2529

2630
video_path = browser.close()
2731

@@ -33,9 +37,29 @@ def test_video_recording_basic():
3337
# Verify file has content
3438
file_size = os.path.getsize(video_path)
3539
assert file_size > 0
36-
except Exception:
37-
browser.close()
38-
raise
40+
except Exception as e:
41+
# Ensure browser is closed even on error
42+
# Catch Playwright "Event loop is closed" errors during cleanup
43+
try:
44+
if browser.page:
45+
try:
46+
browser.page.close()
47+
except Exception:
48+
pass # Page might already be closed
49+
if browser.context:
50+
try:
51+
browser.context.close()
52+
except Exception:
53+
pass # Context might already be closed
54+
if browser.playwright:
55+
try:
56+
browser.playwright.stop()
57+
except Exception:
58+
pass # Playwright might already be stopped
59+
except Exception:
60+
pass # Ignore cleanup errors
61+
# Re-raise original exception
62+
raise e
3963

4064

4165
def test_video_recording_custom_resolution():

0 commit comments

Comments
 (0)