diff --git a/pyproject.toml b/pyproject.toml index 94c4521a..578da9c9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,6 +54,7 @@ dev = [ "isort==5.13.2", ] test = [ + "daphne==4.1.2", "factory-boy==3.3.1", "playwright>=1.39", "pytest==8.3.4", @@ -70,10 +71,7 @@ s3 = [ "django-storages[s3]==1.14.4", ] sync = [ - "channels==4.2.0", - "daphne==4.1.2", "pydantic==2.10.5", - "websockets==13.1", ] [project.scripts] diff --git a/umap/tests/integration/conftest.py b/umap/tests/integration/conftest.py index 620ab5ec..d72886f8 100644 --- a/umap/tests/integration/conftest.py +++ b/umap/tests/integration/conftest.py @@ -1,13 +1,12 @@ import os import re -import subprocess -import time -from pathlib import Path import pytest -from channels.testing import ChannelsLiveServerTestCase +from daphne.testing import DaphneProcess from playwright.sync_api import expect +from umap.asgi import application + from ..base import mock_tiles @@ -68,35 +67,17 @@ def login(new_page, settings, live_server): return do_login -@pytest.fixture -def websocket_server(): - # Find the test-settings, and put them in the current environment - settings_path = (Path(__file__).parent.parent / "settings.py").absolute().as_posix() - os.environ["UMAP_SETTINGS"] = settings_path - - ds_proc = subprocess.Popen( - [ - "umap", - "run_websocket_server", - ], - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - ) - time.sleep(2) - # Ensure it started properly before yielding - assert not ds_proc.poll(), ds_proc.stdout.read().decode("utf-8") - yield ds_proc - # Shut it down at the end of the pytest session - 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}}/" +def asgi_live_server(request, settings): + request.getfixturevalue("transactional_db") + server = DaphneProcess("localhost", lambda: 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 - server._post_teardown() + server.terminate() + server.join() diff --git a/umap/tests/integration/test_websocket_sync.py b/umap/tests/integration/test_websocket_sync.py index b5e5fc16..569bca30 100644 --- a/umap/tests/integration/test_websocket_sync.py +++ b/umap/tests/integration/test_websocket_sync.py @@ -12,7 +12,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, channels_live_server, tilelayer + new_page, live_server, asgi_live_server, tilelayer ): map = MapFactory(name="sync", edit_status=Map.ANONYMOUS) map.settings["properties"]["syncEnabled"] = True @@ -80,7 +80,7 @@ def test_websocket_connection_can_sync_markers( @pytest.mark.xdist_group(name="websockets") def test_websocket_connection_can_sync_polygons( - context, live_server, channels_live_server, tilelayer + context, live_server, asgi_live_server, tilelayer ): map = MapFactory(name="sync", edit_status=Map.ANONYMOUS) map.settings["properties"]["syncEnabled"] = True @@ -164,7 +164,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, channels_live_server, tilelayer + new_page, live_server, asgi_live_server, tilelayer ): map = MapFactory(name="sync", edit_status=Map.ANONYMOUS) map.settings["properties"]["syncEnabled"] = True @@ -198,7 +198,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, channels_live_server, tilelayer + new_page, live_server, asgi_live_server, tilelayer ): map = MapFactory(name="sync", edit_status=Map.ANONYMOUS) map.settings["properties"]["syncEnabled"] = True @@ -227,7 +227,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, channels_live_server, tilelayer + context, live_server, asgi_live_server, tilelayer ): map = MapFactory(name="sync", edit_status=Map.ANONYMOUS) map.settings["properties"]["syncEnabled"] = True @@ -290,7 +290,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, channels_live_server, tilelayer + new_page, live_server, asgi_live_server, tilelayer ): map = MapFactory(name="sync", edit_status=Map.ANONYMOUS) map.settings["properties"]["syncEnabled"] = True @@ -351,7 +351,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, channels_live_server, tilelayer): +def test_should_sync_datalayers(new_page, live_server, asgi_live_server, tilelayer): map = MapFactory(name="sync", edit_status=Map.ANONYMOUS) map.settings["properties"]["syncEnabled"] = True map.save() @@ -490,7 +490,7 @@ def test_should_sync_datalayers_delete( @pytest.mark.xdist_group(name="websockets") def test_create_and_sync_map( - new_page, live_server, channels_live_server, tilelayer, login, user + new_page, live_server, asgi_live_server, tilelayer, login, user ): # Create a syncable map with peerA peerA = login(user, prefix="Page A")