wip(sync): use our async_live_server for websocket related PW tests

As now both http and ws are on the same domain, let's use one test server
able to serve both.

Co-authored-by: David Larlet <david@larlet.fr>
This commit is contained in:
Yohan Boniface 2025-01-20 18:55:42 +01:00
parent 1bf100d7a8
commit a07ee482ce
2 changed files with 29 additions and 38 deletions

View file

@ -3,6 +3,7 @@ import re
import pytest
from daphne.testing import DaphneProcess
from django.contrib.staticfiles.handlers import ASGIStaticFilesHandler
from playwright.sync_api import expect
from umap.asgi import application
@ -68,13 +69,11 @@ def login(new_page, settings, live_server):
@pytest.fixture(scope="function")
def asgi_live_server(request, settings):
request.getfixturevalue("transactional_db")
server = DaphneProcess("localhost", lambda: application)
def asgi_live_server(request, live_server):
server = DaphneProcess("localhost", lambda: ASGIStaticFilesHandler(application))
server.start()
server.ready.wait()
port = server.port.value
settings.WEBSOCKET_FRONT_URI = f"ws://localhost:{port}/ws/sync/{{id}}/"
server.url = f"http://localhost:{port}"
yield server

View file

@ -11,9 +11,7 @@ DATALAYER_UPDATE = re.compile(r".*/datalayer/update/.*")
@pytest.mark.xdist_group(name="websockets")
def test_websocket_connection_can_sync_markers(
new_page, live_server, asgi_live_server, tilelayer
):
def test_websocket_connection_can_sync_markers(new_page, asgi_live_server, tilelayer):
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
map.settings["properties"]["syncEnabled"] = True
map.save()
@ -21,9 +19,9 @@ def test_websocket_connection_can_sync_markers(
# Create two tabs
peerA = new_page("Page A")
peerA.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
peerA.goto(f"{asgi_live_server.url}{map.get_absolute_url()}?edit")
peerB = new_page("Page B")
peerB.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
peerB.goto(f"{asgi_live_server.url}{map.get_absolute_url()}?edit")
a_marker_pane = peerA.locator(".leaflet-marker-pane > div")
b_marker_pane = peerB.locator(".leaflet-marker-pane > div")
@ -79,9 +77,7 @@ def test_websocket_connection_can_sync_markers(
@pytest.mark.xdist_group(name="websockets")
def test_websocket_connection_can_sync_polygons(
context, live_server, asgi_live_server, tilelayer
):
def test_websocket_connection_can_sync_polygons(context, asgi_live_server, tilelayer):
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
map.settings["properties"]["syncEnabled"] = True
map.save()
@ -89,9 +85,9 @@ def test_websocket_connection_can_sync_polygons(
# Create two tabs
peerA = context.new_page()
peerA.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
peerA.goto(f"{asgi_live_server.url}{map.get_absolute_url()}?edit")
peerB = context.new_page()
peerB.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
peerB.goto(f"{asgi_live_server.url}{map.get_absolute_url()}?edit")
b_map_el = peerB.locator("#map")
@ -164,7 +160,7 @@ def test_websocket_connection_can_sync_polygons(
@pytest.mark.xdist_group(name="websockets")
def test_websocket_connection_can_sync_map_properties(
new_page, live_server, asgi_live_server, tilelayer
new_page, asgi_live_server, tilelayer
):
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
map.settings["properties"]["syncEnabled"] = True
@ -173,9 +169,9 @@ def test_websocket_connection_can_sync_map_properties(
# Create two tabs
peerA = new_page()
peerA.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
peerA.goto(f"{asgi_live_server.url}{map.get_absolute_url()}?edit")
peerB = new_page()
peerB.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
peerB.goto(f"{asgi_live_server.url}{map.get_absolute_url()}?edit")
# Name change is synced
peerA.get_by_role("link", name="Edit map name and caption").click()
@ -198,7 +194,7 @@ def test_websocket_connection_can_sync_map_properties(
@pytest.mark.xdist_group(name="websockets")
def test_websocket_connection_can_sync_datalayer_properties(
new_page, live_server, asgi_live_server, tilelayer
new_page, asgi_live_server, tilelayer
):
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
map.settings["properties"]["syncEnabled"] = True
@ -207,9 +203,9 @@ def test_websocket_connection_can_sync_datalayer_properties(
# Create two tabs
peerA = new_page()
peerA.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
peerA.goto(f"{asgi_live_server.url}{map.get_absolute_url()}?edit")
peerB = new_page()
peerB.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
peerB.goto(f"{asgi_live_server.url}{map.get_absolute_url()}?edit")
# Layer addition, name and type are synced
peerA.get_by_role("link", name="Manage layers").click()
@ -227,7 +223,7 @@ def test_websocket_connection_can_sync_datalayer_properties(
@pytest.mark.xdist_group(name="websockets")
def test_websocket_connection_can_sync_cloned_polygons(
context, live_server, asgi_live_server, tilelayer
context, asgi_live_server, tilelayer
):
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
map.settings["properties"]["syncEnabled"] = True
@ -236,9 +232,9 @@ def test_websocket_connection_can_sync_cloned_polygons(
# Create two tabs
peerA = context.new_page()
peerA.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
peerA.goto(f"{asgi_live_server.url}{map.get_absolute_url()}?edit")
peerB = context.new_page()
peerB.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
peerB.goto(f"{asgi_live_server.url}{map.get_absolute_url()}?edit")
b_map_el = peerB.locator("#map")
@ -290,7 +286,7 @@ def test_websocket_connection_can_sync_cloned_polygons(
@pytest.mark.xdist_group(name="websockets")
def test_websocket_connection_can_sync_late_joining_peer(
new_page, live_server, asgi_live_server, tilelayer
new_page, asgi_live_server, tilelayer
):
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
map.settings["properties"]["syncEnabled"] = True
@ -299,7 +295,7 @@ def test_websocket_connection_can_sync_late_joining_peer(
# Create first peer (A) and have it join immediately
peerA = new_page("Page A")
peerA.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
peerA.goto(f"{asgi_live_server.url}{map.get_absolute_url()}?edit")
# Add a marker from peer A
a_create_marker = peerA.get_by_title("Draw a marker")
@ -326,7 +322,7 @@ def test_websocket_connection_can_sync_late_joining_peer(
# Now create peer B and have it join
peerB = new_page("Page B")
peerB.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
peerB.goto(f"{asgi_live_server.url}{map.get_absolute_url()}?edit")
# Check if peer B has received all the updates
b_marker_pane = peerB.locator(".leaflet-marker-pane > div")
@ -351,7 +347,7 @@ def test_websocket_connection_can_sync_late_joining_peer(
@pytest.mark.xdist_group(name="websockets")
def test_should_sync_datalayers(new_page, live_server, asgi_live_server, tilelayer):
def test_should_sync_datalayers(new_page, asgi_live_server, tilelayer):
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
map.settings["properties"]["syncEnabled"] = True
map.save()
@ -360,9 +356,9 @@ def test_should_sync_datalayers(new_page, live_server, asgi_live_server, tilelay
# Create two tabs
peerA = new_page("Page A")
peerA.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
peerA.goto(f"{asgi_live_server.url}{map.get_absolute_url()}?edit")
peerB = new_page("Page B")
peerB.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
peerB.goto(f"{asgi_live_server.url}{map.get_absolute_url()}?edit")
# Create a new layer from peerA
peerA.get_by_role("link", name="Manage layers").click()
@ -423,9 +419,7 @@ def test_should_sync_datalayers(new_page, live_server, asgi_live_server, tilelay
@pytest.mark.xdist_group(name="websockets")
def test_should_sync_datalayers_delete(
new_page, live_server, websocket_server, tilelayer
):
def test_should_sync_datalayers_delete(new_page, asgi_live_server, tilelayer):
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
map.settings["properties"]["syncEnabled"] = True
map.save()
@ -464,9 +458,9 @@ def test_should_sync_datalayers_delete(
# Create two tabs
peerA = new_page("Page A")
peerA.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
peerA.goto(f"{asgi_live_server.url}{map.get_absolute_url()}?edit")
peerB = new_page("Page B")
peerB.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
peerB.goto(f"{asgi_live_server.url}{map.get_absolute_url()}?edit")
peerA.get_by_role("button", name="Open browser").click()
expect(peerA.get_by_text("datalayer 1")).to_be_visible()
@ -489,12 +483,10 @@ def test_should_sync_datalayers_delete(
@pytest.mark.xdist_group(name="websockets")
def test_create_and_sync_map(
new_page, live_server, asgi_live_server, tilelayer, login, user
):
def test_create_and_sync_map(new_page, asgi_live_server, tilelayer, login, user):
# Create a syncable map with peerA
peerA = login(user, prefix="Page A")
peerA.goto(f"{live_server.url}/en/map/new/")
peerA.goto(f"{asgi_live_server.url}/en/map/new/")
with peerA.expect_response(re.compile("./map/create/.*")):
peerA.get_by_role("button", name="Save Draft").click()
peerA.get_by_role("link", name="Map advanced properties").click()