Files
cmshoppe/tests/test_cdp.py
T

153 lines
4.5 KiB
Python
Raw Normal View History

import os
import sys
import unittest
from unittest import mock
sys.path.insert(0, os.path.dirname(__file__))
from _helpers import REPO_ROOT
if str(REPO_ROOT) not in sys.path:
sys.path.insert(0, str(REPO_ROOT))
from app import cdp
class FakeBrowserCDP:
sent = []
fail_first_create = False
def __init__(self, ws_url):
self.ws_url = ws_url
self.closed = False
def send(self, method, params=None):
self.sent.append((method, params or {}))
if method == "Target.createTarget":
if self.fail_first_create:
type(self).fail_first_create = False
raise RuntimeError("Target.createTarget: Invalid parameters")
return {"targetId": "target-new"}
return {}
def close(self):
self.closed = True
class CdpTests(unittest.TestCase):
def test_create_tab_info_can_request_background_target(self):
FakeBrowserCDP.sent = []
FakeBrowserCDP.fail_first_create = False
responses = [
{"webSocketDebuggerUrl": "ws-browser"},
[
{
"id": "target-new",
"type": "page",
"url": "https://seller.shopee.tw/portal/product/1",
"webSocketDebuggerUrl": "ws-page",
}
],
]
with mock.patch("app.cdp.http_get", side_effect=responses), \
mock.patch("app.cdp.CDP", FakeBrowserCDP), \
mock.patch("app.cdp.time.sleep"):
tab = cdp.create_tab_info(
"https://seller.shopee.tw/portal/product/1",
host="127.0.0.1:9222",
background=True,
)
self.assertEqual("ws-page", tab["webSocketDebuggerUrl"])
self.assertEqual(
[
(
"Target.createTarget",
{
"url": "https://seller.shopee.tw/portal/product/1",
"background": True,
},
)
],
FakeBrowserCDP.sent,
)
def test_create_tab_info_keeps_foreground_default_params(self):
FakeBrowserCDP.sent = []
FakeBrowserCDP.fail_first_create = False
responses = [
{"webSocketDebuggerUrl": "ws-browser"},
[
{
"id": "target-new",
"type": "page",
"url": "https://seller.shopee.tw/portal/product/1",
"webSocketDebuggerUrl": "ws-page",
}
],
]
with mock.patch("app.cdp.http_get", side_effect=responses), \
mock.patch("app.cdp.CDP", FakeBrowserCDP), \
mock.patch("app.cdp.time.sleep"):
cdp.create_tab_info(
"https://seller.shopee.tw/portal/product/1",
host="127.0.0.1:9222",
)
self.assertEqual(
[
(
"Target.createTarget",
{"url": "https://seller.shopee.tw/portal/product/1"},
)
],
FakeBrowserCDP.sent,
)
def test_create_tab_info_falls_back_when_background_is_rejected(self):
FakeBrowserCDP.sent = []
FakeBrowserCDP.fail_first_create = True
responses = [
{"webSocketDebuggerUrl": "ws-browser"},
[
{
"id": "target-new",
"type": "page",
"url": "https://seller.shopee.tw/portal/product/1",
"webSocketDebuggerUrl": "ws-page",
}
],
]
with mock.patch("app.cdp.http_get", side_effect=responses), \
mock.patch("app.cdp.CDP", FakeBrowserCDP), \
mock.patch("app.cdp.time.sleep"):
cdp.create_tab_info(
"https://seller.shopee.tw/portal/product/1",
host="127.0.0.1:9222",
background=True,
)
self.assertEqual(
[
(
"Target.createTarget",
{
"url": "https://seller.shopee.tw/portal/product/1",
"background": True,
},
),
(
"Target.createTarget",
{"url": "https://seller.shopee.tw/portal/product/1"},
),
],
FakeBrowserCDP.sent,
)
if __name__ == "__main__":
unittest.main()