Add comprehensive tests and docs for darkMode & hideSelectors
Some checks failed
Build & Deploy to Staging / Build & Deploy to Staging (push) Has been cancelled

- Add 5 new Python tests for darkMode and hideSelectors parameters
- Update Node.js SDK README with darkMode/hideSelectors examples
- Update Python SDK README with darkMode/hideSelectors examples
- Add API reference entries for new parameters
- All tests passing: Node.js (19 tests), Python (22 tests)

Features already implemented in v0.7.0 but needed better test coverage and documentation.
This commit is contained in:
Hoid (OpenClaw) 2026-03-04 18:04:18 +01:00
parent 28f4a93dc3
commit e6c34ef760
3 changed files with 214 additions and 0 deletions

View file

@ -155,6 +155,91 @@ class TestSnapAPI(unittest.TestCase):
self.assertEqual(request_body, expected_body)
self.assertEqual(result, b'fake-image-data')
@patch('snapapi.client.urllib.request.urlopen')
def test_capture_with_dark_mode_parameter(self, mock_urlopen):
"""capture with dark_mode parameter should work correctly."""
# Mock response
mock_response = Mock()
mock_response.read.return_value = b'fake-dark-image-data'
mock_response.__enter__ = Mock(return_value=mock_response)
mock_response.__exit__ = Mock(return_value=None)
mock_urlopen.return_value = mock_response
result = self.snap.capture(
url="https://example.com",
dark_mode=True
)
# Verify request body contains darkMode
request_arg = mock_urlopen.call_args[0][0]
request_body = json.loads(request_arg.data.decode())
expected_body = {
"url": "https://example.com",
"darkMode": True
}
self.assertEqual(request_body, expected_body)
self.assertEqual(result, b'fake-dark-image-data')
@patch('snapapi.client.urllib.request.urlopen')
def test_capture_with_hide_selectors_list_parameter(self, mock_urlopen):
"""capture with hide_selectors as list should work correctly."""
# Mock response
mock_response = Mock()
mock_response.read.return_value = b'fake-clean-image-data'
mock_response.__enter__ = Mock(return_value=mock_response)
mock_response.__exit__ = Mock(return_value=None)
mock_urlopen.return_value = mock_response
result = self.snap.capture(
url="https://example.com",
hide_selectors=['.ads', '.popup', '#cookie-banner']
)
# Verify request body contains hideSelectors
request_arg = mock_urlopen.call_args[0][0]
request_body = json.loads(request_arg.data.decode())
expected_body = {
"url": "https://example.com",
"hideSelectors": ['.ads', '.popup', '#cookie-banner']
}
self.assertEqual(request_body, expected_body)
self.assertEqual(result, b'fake-clean-image-data')
@patch('snapapi.client.urllib.request.urlopen')
def test_capture_with_both_dark_mode_and_hide_selectors(self, mock_urlopen):
"""capture with both dark_mode and hide_selectors should work correctly."""
# Mock response
mock_response = Mock()
mock_response.read.return_value = b'fake-dark-clean-image-data'
mock_response.__enter__ = Mock(return_value=mock_response)
mock_response.__exit__ = Mock(return_value=None)
mock_urlopen.return_value = mock_response
result = self.snap.capture(
url="https://example.com",
dark_mode=True,
hide_selectors=['.tracking', '.ads'],
format="png"
)
# Verify request body contains both parameters
request_arg = mock_urlopen.call_args[0][0]
request_body = json.loads(request_arg.data.decode())
expected_body = {
"url": "https://example.com",
"darkMode": True,
"hideSelectors": ['.tracking', '.ads'],
"format": "png"
}
self.assertEqual(request_body, expected_body)
self.assertEqual(result, b'fake-dark-clean-image-data')
def test_capture_raises_value_error_if_no_url(self):
"""capture() should raise ValueError if no url provided."""
with self.assertRaises(ValueError) as cm:
@ -364,6 +449,40 @@ class TestScreenshotOptions(unittest.TestCase):
expected = {"url": "https://example.com"}
self.assertEqual(result, expected)
def test_to_dict_with_dark_mode_and_hide_selectors(self):
"""to_dict() should correctly handle darkMode and hideSelectors."""
options = ScreenshotOptions(
url="https://example.com",
dark_mode=True,
hide_selectors=['.ads', '.popup', '#banner']
)
result = options.to_dict()
expected = {
"url": "https://example.com",
"darkMode": True, # snake_case -> camelCase
"hideSelectors": ['.ads', '.popup', '#banner'] # snake_case -> camelCase
}
self.assertEqual(result, expected)
def test_to_dict_with_dark_mode_false(self):
"""to_dict() should include darkMode when explicitly set to False."""
options = ScreenshotOptions(
url="https://example.com",
dark_mode=False
)
result = options.to_dict()
expected = {
"url": "https://example.com",
"darkMode": False
}
self.assertEqual(result, expected)
class TestSnapAPIError(unittest.TestCase):
"""Test cases for SnapAPIError exception."""