Skip to content

Commit 3e28136

Browse files
committed
test: add network-related tests for tab functionality and assertions
1 parent f1293d2 commit 3e28136

File tree

1 file changed

+168
-12
lines changed

1 file changed

+168
-12
lines changed

tests/test_browser/test_browser_tab.py

Lines changed: 168 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,8 @@
1515
NotAnIFrame,
1616
InvalidFileExtension,
1717
WaitElementTimeout,
18+
NetworkEventsNotEnabled,
1819
)
19-
from pydoll.commands import (
20-
DomCommands,
21-
RuntimeCommands,
22-
NetworkCommands,
23-
StorageCommands,
24-
PageCommands,
25-
FetchCommands,
26-
)
27-
from pydoll.protocol.page.events import PageEvent
28-
2920

3021
@pytest_asyncio.fixture
3122
async def mock_connection_handler():
@@ -945,8 +936,173 @@ async def test_network_logs_property(self, tab):
945936
@pytest.mark.asyncio
946937
async def test_dialog_property(self, tab):
947938
"""Test dialog property access."""
948-
test_dialog = {'params': {'type': 'alert', 'message': 'Test'}}
939+
test_dialog = {'type': 'alert', 'message': 'Test message'}
949940
tab._connection_handler.dialog = test_dialog
950941

951942
dialog = tab._connection_handler.dialog
952-
assert dialog == test_dialog
943+
assert dialog == test_dialog
944+
945+
946+
class TestTabNetworkMethods:
947+
"""Test Tab network-related methods."""
948+
949+
@pytest.mark.asyncio
950+
async def test_get_network_response_body_success(self, tab):
951+
"""Test get_network_response_body with network events enabled."""
952+
# Enable network events
953+
tab._network_events_enabled = True
954+
955+
# Mock the response
956+
expected_body = '<html><body>Response content</body></html>'
957+
tab._connection_handler.execute_command.return_value = {
958+
'result': {'body': expected_body}
959+
}
960+
961+
result = await tab.get_network_response_body('test_request_123')
962+
963+
assert result == expected_body
964+
tab._connection_handler.execute_command.assert_called_once()
965+
966+
@pytest.mark.asyncio
967+
async def test_get_network_response_body_events_not_enabled(self, tab):
968+
"""Test get_network_response_body when network events are not enabled."""
969+
# Ensure network events are disabled
970+
tab._network_events_enabled = False
971+
972+
with pytest.raises(NetworkEventsNotEnabled) as exc_info:
973+
await tab.get_network_response_body('test_request_123')
974+
975+
assert str(exc_info.value) == 'Network events must be enabled to get response body'
976+
tab._connection_handler.execute_command.assert_not_called()
977+
978+
@pytest.mark.asyncio
979+
async def test_get_network_logs_success_no_filter(self, tab):
980+
"""Test get_network_logs without filter."""
981+
# Enable network events
982+
tab._network_events_enabled = True
983+
984+
# Mock network logs
985+
test_logs = [
986+
{
987+
'method': 'Network.requestWillBeSent',
988+
'params': {
989+
'request': {'url': 'https://example.com/api/data'},
990+
'requestId': 'req_1'
991+
}
992+
},
993+
{
994+
'method': 'Network.responseReceived',
995+
'params': {
996+
'request': {'url': 'https://example.com/static/style.css'},
997+
'requestId': 'req_2'
998+
}
999+
}
1000+
]
1001+
tab._connection_handler.network_logs = test_logs
1002+
1003+
result = await tab.get_network_logs()
1004+
1005+
assert result == test_logs
1006+
assert len(result) == 2
1007+
1008+
@pytest.mark.asyncio
1009+
async def test_get_network_logs_success_with_filter(self, tab):
1010+
"""Test get_network_logs with URL filter."""
1011+
# Enable network events
1012+
tab._network_events_enabled = True
1013+
1014+
# Mock network logs
1015+
test_logs = [
1016+
{
1017+
'method': 'Network.requestWillBeSent',
1018+
'params': {
1019+
'request': {'url': 'https://example.com/api/data'},
1020+
'requestId': 'req_1'
1021+
}
1022+
},
1023+
{
1024+
'method': 'Network.responseReceived',
1025+
'params': {
1026+
'request': {'url': 'https://example.com/static/style.css'},
1027+
'requestId': 'req_2'
1028+
}
1029+
},
1030+
{
1031+
'method': 'Network.requestWillBeSent',
1032+
'params': {
1033+
'request': {'url': 'https://api.example.com/users'},
1034+
'requestId': 'req_3'
1035+
}
1036+
}
1037+
]
1038+
tab._connection_handler.network_logs = test_logs
1039+
1040+
result = await tab.get_network_logs(filter='api')
1041+
1042+
# Should return only logs with 'api' in the URL
1043+
assert len(result) == 2
1044+
assert result[0]['params']['request']['url'] == 'https://example.com/api/data'
1045+
assert result[1]['params']['request']['url'] == 'https://api.example.com/users'
1046+
1047+
@pytest.mark.asyncio
1048+
async def test_get_network_logs_empty_filter_result(self, tab):
1049+
"""Test get_network_logs with filter that matches no logs."""
1050+
# Enable network events
1051+
tab._network_events_enabled = True
1052+
1053+
# Mock network logs
1054+
test_logs = [
1055+
{
1056+
'method': 'Network.requestWillBeSent',
1057+
'params': {
1058+
'request': {'url': 'https://example.com/static/style.css'},
1059+
'requestId': 'req_1'
1060+
}
1061+
}
1062+
]
1063+
tab._connection_handler.network_logs = test_logs
1064+
1065+
result = await tab.get_network_logs(filter='nonexistent')
1066+
1067+
assert result == []
1068+
1069+
@pytest.mark.asyncio
1070+
async def test_get_network_logs_events_not_enabled(self, tab):
1071+
"""Test get_network_logs when network events are not enabled."""
1072+
# Ensure network events are disabled
1073+
tab._network_events_enabled = False
1074+
1075+
with pytest.raises(NetworkEventsNotEnabled) as exc_info:
1076+
await tab.get_network_logs()
1077+
1078+
assert str(exc_info.value) == 'Network events must be enabled to get network logs'
1079+
1080+
@pytest.mark.asyncio
1081+
async def test_get_network_logs_missing_request_params(self, tab):
1082+
"""Test get_network_logs with logs missing request parameters."""
1083+
# Enable network events
1084+
tab._network_events_enabled = True
1085+
1086+
# Mock network logs with missing request data
1087+
test_logs = [
1088+
{
1089+
'method': 'Network.requestWillBeSent',
1090+
'params': {
1091+
'requestId': 'req_1'
1092+
# Missing 'request' key
1093+
}
1094+
},
1095+
{
1096+
'method': 'Network.responseReceived',
1097+
'params': {
1098+
'request': {}, # Empty request object
1099+
'requestId': 'req_2'
1100+
}
1101+
}
1102+
]
1103+
tab._connection_handler.network_logs = test_logs
1104+
1105+
result = await tab.get_network_logs(filter='example')
1106+
1107+
# Should handle missing request data gracefully
1108+
assert result == []

0 commit comments

Comments
 (0)