Skip to content

Commit 413a810

Browse files
authored
tests: added interception tests (#77)
1 parent 6ca26ec commit 413a810

File tree

4 files changed

+790
-15
lines changed

4 files changed

+790
-15
lines changed

playwright/helper.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141

4242
Cookie = List[Dict[str, Union[str, int, bool]]]
4343
URLMatch = Union[str, Pattern, Callable[[str], bool]]
44-
RouteHandler = Callable[["Route", "Request"], None]
44+
RouteHandler = Callable[["Route", "Request"], Any]
4545
FunctionWithSource = Callable[[Dict], Any]
4646

4747
ColorScheme = Literal["dark", "light", "no-preference"]

playwright/network.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,10 @@ async def fulfill(
9898
status: int = 200,
9999
headers: Dict[str, str] = dict(),
100100
body: Union[str, bytes] = None,
101+
contentType: str = None,
101102
) -> None:
103+
if contentType:
104+
headers["Content-Type"] = contentType
102105
response = dict(status=status, headers=serialize_headers(headers))
103106
if isinstance(body, str):
104107
response["body"] = body

tests/server.py

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -64,18 +64,20 @@ def start(self):
6464
class TestServerHTTPHandler(http.Request):
6565
def process(self):
6666
request = self
67-
uri_path = request.uri.decode()
68-
if request_subscribers.get(uri_path):
69-
request_subscribers[uri_path].set_result(request)
70-
request_subscribers.pop(uri_path)
71-
72-
if auth.get(uri_path):
67+
self.post_body = request.content.read().decode()
68+
request.content.seek(0, 0)
69+
uri = request.uri.decode()
70+
if request_subscribers.get(uri):
71+
request_subscribers[uri].set_result(request)
72+
request_subscribers.pop(uri)
73+
74+
if auth.get(uri):
7375
authorization_header = request.requestHeaders.getRawHeaders(
7476
"authorization"
7577
)
7678
creds_correct = False
7779
if authorization_header:
78-
creds_correct = auth.get(uri_path) == (
80+
creds_correct = auth.get(uri) == (
7981
request.getUser(),
8082
request.getPassword(),
8183
)
@@ -86,21 +88,21 @@ def process(self):
8688
request.setResponseCode(HTTPStatus.UNAUTHORIZED)
8789
request.finish()
8890
return
89-
if csp.get(uri_path):
90-
request.setHeader(b"Content-Security-Policy", csp[uri_path])
91-
if routes.get(uri_path):
92-
routes[uri_path](request)
91+
if csp.get(uri):
92+
request.setHeader(b"Content-Security-Policy", csp[uri])
93+
if routes.get(uri):
94+
routes[uri](request)
9395
return
9496
file_content = None
9597
try:
9698
file_content = open(
97-
os.path.join(static_path, uri_path[1:]), "rb"
99+
os.path.join(static_path, request.path.decode()[1:]), "rb"
98100
).read()
99101
except (FileNotFoundError, IsADirectoryError):
100102
request.setResponseCode(HTTPStatus.NOT_FOUND)
101103
if file_content:
102-
request.setHeader("Content-Type", mimetypes.guess_type(uri_path)[0])
103-
if uri_path in gzip_routes:
104+
request.setHeader("Content-Type", mimetypes.guess_type(uri)[0])
105+
if uri in gzip_routes:
104106
request.setHeader("Content-Encoding", "gzip")
105107
request.write(gzip.compress(file_content))
106108
else:
@@ -125,6 +127,8 @@ def stop(self):
125127
self.thread.join()
126128

127129
async def wait_for_request(self, path):
130+
if path in self.request_subscribers:
131+
return await self.request_subscribers[path]
128132
future = asyncio.Future()
129133
self.request_subscribers[path] = future
130134
return await future

0 commit comments

Comments
 (0)