mirror of
https://github.com/umap-project/umap.git
synced 2025-04-28 19:42:36 +02:00
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:
parent
1bf100d7a8
commit
a07ee482ce
2 changed files with 29 additions and 38 deletions
|
@ -3,6 +3,7 @@ import re
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from daphne.testing import DaphneProcess
|
from daphne.testing import DaphneProcess
|
||||||
|
from django.contrib.staticfiles.handlers import ASGIStaticFilesHandler
|
||||||
from playwright.sync_api import expect
|
from playwright.sync_api import expect
|
||||||
|
|
||||||
from umap.asgi import application
|
from umap.asgi import application
|
||||||
|
@ -68,13 +69,11 @@ def login(new_page, settings, live_server):
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="function")
|
@pytest.fixture(scope="function")
|
||||||
def asgi_live_server(request, settings):
|
def asgi_live_server(request, live_server):
|
||||||
request.getfixturevalue("transactional_db")
|
server = DaphneProcess("localhost", lambda: ASGIStaticFilesHandler(application))
|
||||||
server = DaphneProcess("localhost", lambda: application)
|
|
||||||
server.start()
|
server.start()
|
||||||
server.ready.wait()
|
server.ready.wait()
|
||||||
port = server.port.value
|
port = server.port.value
|
||||||
settings.WEBSOCKET_FRONT_URI = f"ws://localhost:{port}/ws/sync/{{id}}/"
|
|
||||||
server.url = f"http://localhost:{port}"
|
server.url = f"http://localhost:{port}"
|
||||||
|
|
||||||
yield server
|
yield server
|
||||||
|
|
|
@ -11,9 +11,7 @@ DATALAYER_UPDATE = re.compile(r".*/datalayer/update/.*")
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.xdist_group(name="websockets")
|
@pytest.mark.xdist_group(name="websockets")
|
||||||
def test_websocket_connection_can_sync_markers(
|
def test_websocket_connection_can_sync_markers(new_page, asgi_live_server, tilelayer):
|
||||||
new_page, live_server, asgi_live_server, tilelayer
|
|
||||||
):
|
|
||||||
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
|
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
|
||||||
map.settings["properties"]["syncEnabled"] = True
|
map.settings["properties"]["syncEnabled"] = True
|
||||||
map.save()
|
map.save()
|
||||||
|
@ -21,9 +19,9 @@ def test_websocket_connection_can_sync_markers(
|
||||||
|
|
||||||
# Create two tabs
|
# Create two tabs
|
||||||
peerA = new_page("Page A")
|
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 = 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")
|
a_marker_pane = peerA.locator(".leaflet-marker-pane > div")
|
||||||
b_marker_pane = peerB.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")
|
@pytest.mark.xdist_group(name="websockets")
|
||||||
def test_websocket_connection_can_sync_polygons(
|
def test_websocket_connection_can_sync_polygons(context, asgi_live_server, tilelayer):
|
||||||
context, live_server, asgi_live_server, tilelayer
|
|
||||||
):
|
|
||||||
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
|
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
|
||||||
map.settings["properties"]["syncEnabled"] = True
|
map.settings["properties"]["syncEnabled"] = True
|
||||||
map.save()
|
map.save()
|
||||||
|
@ -89,9 +85,9 @@ def test_websocket_connection_can_sync_polygons(
|
||||||
|
|
||||||
# Create two tabs
|
# Create two tabs
|
||||||
peerA = context.new_page()
|
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 = 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")
|
b_map_el = peerB.locator("#map")
|
||||||
|
|
||||||
|
@ -164,7 +160,7 @@ def test_websocket_connection_can_sync_polygons(
|
||||||
|
|
||||||
@pytest.mark.xdist_group(name="websockets")
|
@pytest.mark.xdist_group(name="websockets")
|
||||||
def test_websocket_connection_can_sync_map_properties(
|
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 = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
|
||||||
map.settings["properties"]["syncEnabled"] = True
|
map.settings["properties"]["syncEnabled"] = True
|
||||||
|
@ -173,9 +169,9 @@ def test_websocket_connection_can_sync_map_properties(
|
||||||
|
|
||||||
# Create two tabs
|
# Create two tabs
|
||||||
peerA = new_page()
|
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 = 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
|
# Name change is synced
|
||||||
peerA.get_by_role("link", name="Edit map name and caption").click()
|
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")
|
@pytest.mark.xdist_group(name="websockets")
|
||||||
def test_websocket_connection_can_sync_datalayer_properties(
|
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 = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
|
||||||
map.settings["properties"]["syncEnabled"] = True
|
map.settings["properties"]["syncEnabled"] = True
|
||||||
|
@ -207,9 +203,9 @@ def test_websocket_connection_can_sync_datalayer_properties(
|
||||||
|
|
||||||
# Create two tabs
|
# Create two tabs
|
||||||
peerA = new_page()
|
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 = 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
|
# Layer addition, name and type are synced
|
||||||
peerA.get_by_role("link", name="Manage layers").click()
|
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")
|
@pytest.mark.xdist_group(name="websockets")
|
||||||
def test_websocket_connection_can_sync_cloned_polygons(
|
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 = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
|
||||||
map.settings["properties"]["syncEnabled"] = True
|
map.settings["properties"]["syncEnabled"] = True
|
||||||
|
@ -236,9 +232,9 @@ def test_websocket_connection_can_sync_cloned_polygons(
|
||||||
|
|
||||||
# Create two tabs
|
# Create two tabs
|
||||||
peerA = context.new_page()
|
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 = 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")
|
b_map_el = peerB.locator("#map")
|
||||||
|
|
||||||
|
@ -290,7 +286,7 @@ def test_websocket_connection_can_sync_cloned_polygons(
|
||||||
|
|
||||||
@pytest.mark.xdist_group(name="websockets")
|
@pytest.mark.xdist_group(name="websockets")
|
||||||
def test_websocket_connection_can_sync_late_joining_peer(
|
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 = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
|
||||||
map.settings["properties"]["syncEnabled"] = True
|
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
|
# Create first peer (A) and have it join immediately
|
||||||
peerA = new_page("Page A")
|
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
|
# Add a marker from peer A
|
||||||
a_create_marker = peerA.get_by_title("Draw a marker")
|
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
|
# Now create peer B and have it join
|
||||||
peerB = new_page("Page B")
|
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
|
# Check if peer B has received all the updates
|
||||||
b_marker_pane = peerB.locator(".leaflet-marker-pane > div")
|
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")
|
@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 = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
|
||||||
map.settings["properties"]["syncEnabled"] = True
|
map.settings["properties"]["syncEnabled"] = True
|
||||||
map.save()
|
map.save()
|
||||||
|
@ -360,9 +356,9 @@ def test_should_sync_datalayers(new_page, live_server, asgi_live_server, tilelay
|
||||||
|
|
||||||
# Create two tabs
|
# Create two tabs
|
||||||
peerA = new_page("Page A")
|
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 = 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
|
# Create a new layer from peerA
|
||||||
peerA.get_by_role("link", name="Manage layers").click()
|
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")
|
@pytest.mark.xdist_group(name="websockets")
|
||||||
def test_should_sync_datalayers_delete(
|
def test_should_sync_datalayers_delete(new_page, asgi_live_server, tilelayer):
|
||||||
new_page, live_server, websocket_server, tilelayer
|
|
||||||
):
|
|
||||||
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
|
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
|
||||||
map.settings["properties"]["syncEnabled"] = True
|
map.settings["properties"]["syncEnabled"] = True
|
||||||
map.save()
|
map.save()
|
||||||
|
@ -464,9 +458,9 @@ def test_should_sync_datalayers_delete(
|
||||||
|
|
||||||
# Create two tabs
|
# Create two tabs
|
||||||
peerA = new_page("Page A")
|
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 = 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()
|
peerA.get_by_role("button", name="Open browser").click()
|
||||||
expect(peerA.get_by_text("datalayer 1")).to_be_visible()
|
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")
|
@pytest.mark.xdist_group(name="websockets")
|
||||||
def test_create_and_sync_map(
|
def test_create_and_sync_map(new_page, asgi_live_server, tilelayer, login, user):
|
||||||
new_page, live_server, asgi_live_server, tilelayer, login, user
|
|
||||||
):
|
|
||||||
# Create a syncable map with peerA
|
# Create a syncable map with peerA
|
||||||
peerA = login(user, prefix="Page A")
|
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/.*")):
|
with peerA.expect_response(re.compile("./map/create/.*")):
|
||||||
peerA.get_by_role("button", name="Save Draft").click()
|
peerA.get_by_role("button", name="Save Draft").click()
|
||||||
peerA.get_by_role("link", name="Map advanced properties").click()
|
peerA.get_by_role("link", name="Map advanced properties").click()
|
||||||
|
|
Loading…
Reference in a new issue