wip: use django channels in playwright tests

This commit is contained in:
Yohan Boniface 2024-12-26 15:13:38 +01:00
parent a5db41595b
commit 4cc9540119
4 changed files with 24 additions and 11 deletions

View file

@ -4,11 +4,11 @@ from django.core.signing import TimestampSigner
from .websocket_server import ( from .websocket_server import (
JoinRequest, JoinRequest,
JoinResponse, JoinResponse,
ListPeersResponse,
OperationMessage, OperationMessage,
PeerMessage,
Request, Request,
ValidationError, ValidationError,
PeerMessage,
ListPeersResponse,
) )

View file

@ -76,7 +76,7 @@ export class SyncEngine {
start(authToken) { start(authToken) {
this.transport = new WebSocketTransport( this.transport = new WebSocketTransport(
this._umap.properties.websocketURI, Utils.template(this._umap.properties.websocketURI, { id: this._umap.id }),
authToken, authToken,
this this
) )

View file

@ -5,6 +5,7 @@ import time
from pathlib import Path from pathlib import Path
import pytest import pytest
from channels.testing import ChannelsLiveServerTestCase
from playwright.sync_api import expect from playwright.sync_api import expect
from ..base import mock_tiles from ..base import mock_tiles
@ -87,3 +88,15 @@ def websocket_server():
yield ds_proc yield ds_proc
# Shut it down at the end of the pytest session # Shut it down at the end of the pytest session
ds_proc.terminate() ds_proc.terminate()
@pytest.fixture(scope="function")
def channels_live_server(request, settings):
server = ChannelsLiveServerTestCase()
server.serve_static = False
server._pre_setup()
settings.WEBSOCKET_FRONT_URI = f"{server.live_server_ws_url}/ws/sync/{{id}}/"
yield server
server._post_teardown()

View file

@ -12,7 +12,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, live_server, websocket_server, tilelayer new_page, live_server, channels_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
@ -80,7 +80,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, live_server, websocket_server, tilelayer context, live_server, channels_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
@ -164,7 +164,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, websocket_server, tilelayer new_page, live_server, channels_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
@ -196,7 +196,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, websocket_server, tilelayer new_page, live_server, channels_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
@ -225,7 +225,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, websocket_server, tilelayer context, live_server, channels_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
@ -288,7 +288,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, websocket_server, tilelayer new_page, live_server, channels_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
@ -349,7 +349,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, websocket_server, tilelayer): def test_should_sync_datalayers(new_page, live_server, channels_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()
@ -422,7 +422,7 @@ def test_should_sync_datalayers(new_page, live_server, websocket_server, tilelay
@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, live_server, websocket_server, tilelayer, login, user new_page, live_server, channels_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")