Skip to content

Commit 7c2e933

Browse files
committed
refactor some tests
this should make it easier to check basic functionality in future server implementations
1 parent 84a9f98 commit 7c2e933

13 files changed

+52
-49
lines changed

idom/server/__init__.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
11
from .base import AbstractRenderServer
22
from .prefab import run, multiview_server, hotswap_server
3+
from . import default
34

4-
__all__ = ["run", "multiview_server", "hotswap_server", "AbstractRenderServer"]
5+
__all__ = [
6+
"default",
7+
"run",
8+
"multiview_server",
9+
"hotswap_server",
10+
"AbstractRenderServer",
11+
]

idom/server/base.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ def run(self, *args: Any, **kwargs: Any) -> None:
4545
if self._app is None:
4646
app = self._default_application(self._config)
4747
self.register(app)
48-
else:
48+
else: # pragma: no cover
4949
app = self._app
50-
if not self._daemonized:
50+
if not self._daemonized: # pragma: no cover
5151
return self._run_application(app, self._config, args, kwargs)
5252
else:
5353
return self._run_application_in_thread(app, self._config, args, kwargs)
@@ -70,14 +70,12 @@ def register(self: _Self, app: Optional[_App]) -> _Self:
7070
self._app = app
7171
return self
7272

73-
def server_started(self) -> bool:
74-
"""Whether the underlying application has started"""
75-
return self._server_did_start.set()
76-
7773
def wait_until_server_start(self, timeout: float = 3.0):
7874
"""Block until the underlying application has started"""
7975
if not self._server_did_start.wait(timeout=timeout):
80-
raise RuntimeError(f"Server did not start within {timeout} seconds")
76+
raise RuntimeError( # pragma: no cover
77+
f"Server did not start within {timeout} seconds"
78+
)
8179

8280
@abc.abstractmethod
8381
def _create_config(self, config: Optional[_Config]) -> _Config:

idom/server/default.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
from .sanic import Config, PerClientStateServer, SharedClientStateServer
2+
3+
4+
__all__ = ["Config", "PerClientStateServer", "SharedClientStateServer"]

idom/server/flask.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def _setup_application(self, app: Flask, config: Config) -> None:
5757
self._setup_blueprint_routes(bp, config)
5858

5959
cors_config = config["cors"]
60-
if cors_config:
60+
if cors_config: # pragma: no cover
6161
cors_params = cors_config if isinstance(cors_config, dict) else {}
6262
CORS(bp, **cors_params)
6363

@@ -124,7 +124,7 @@ def _generic_run_application(
124124
**kwargs
125125
):
126126
if debug:
127-
logging.basicConfig(level=logging.DEBUG)
127+
logging.basicConfig(level=logging.DEBUG) # pragma: no cover
128128
logging.debug("Starting server...")
129129
_StartCallbackWSGIServer(
130130
self._server_did_start.set,

idom/server/prefab.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def run(
6666

6767
server = server_type(element, server_config)
6868

69-
if app is not None:
69+
if app is not None: # pragma: no cover
7070
server.register(app)
7171

7272
run_server = server.run if not daemon else server.daemon

idom/testing.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
from selenium.webdriver.remote.webdriver import WebDriver
1616
from selenium.webdriver import Chrome
1717

18+
from idom import server
1819
from idom.server.base import AbstractRenderServer
19-
from idom.server.sanic import PerClientStateServer
2020
from idom.server.prefab import hotswap_server
2121
from idom.server.utils import find_available_port
2222
from idom.utils import Ref
@@ -58,7 +58,7 @@ class ServerMountPoint(Generic[_Mount, _Server]):
5858

5959
def __init__(
6060
self,
61-
server_type: Type[_Server] = PerClientStateServer,
61+
server_type: Type[_Server] = server.default.PerClientStateServer,
6262
host: str = "127.0.0.1",
6363
port: Optional[int] = None,
6464
server_config: Optional[Any] = None,

tests/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ def last_server_error(server_mount_point):
7070
return server_mount_point.server.last_server_error_for_idom_testing
7171

7272

73-
@pytest.fixture(scope="module")
73+
@pytest.fixture
7474
def server_mount_point():
7575
"""An IDOM layout mount function and server as a tuple
7676

tests/test_server/test_base.py

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,15 @@
11
import pytest
2-
from sanic import Sanic
32

43
import idom
5-
from idom.server.sanic import PerClientStateServer
6-
from idom.testing import ServerMountPoint
7-
8-
9-
@pytest.fixture(scope="module")
10-
def server_mount_point():
11-
return ServerMountPoint(
12-
PerClientStateServer,
13-
# test that we can use a custom app instance
14-
app=Sanic(),
15-
)
4+
from idom.server.default import PerClientStateServer
165

176

187
def test_no_application_until_running():
198
@idom.element
209
def AnyElement():
2110
pass
2211

23-
server = idom.server.sanic.PerClientStateServer(AnyElement)
12+
server = PerClientStateServer(AnyElement)
2413

2514
with pytest.raises(RuntimeError, match="No application"):
2615
server.application

tests/test_server/test_flask/test_per_client_state.py renamed to tests/test_server/test_common/test_per_client_state.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
import pytest
22

33
import idom
4-
from idom.server.flask import PerClientStateServer
54
from idom.testing import ServerMountPoint
6-
7-
8-
@pytest.fixture(scope="module")
9-
def server_mount_point():
10-
"""An IDOM layout mount function and server as a tuple
11-
12-
The ``mount`` and ``server`` fixtures use this.
13-
"""
14-
return ServerMountPoint(PerClientStateServer, server_config={"cors": True})
5+
from idom.server import flask as idom_flask, sanic as idom_sanic
6+
7+
8+
@pytest.fixture(
9+
params=[
10+
# add new PerClientStateServer implementations here to
11+
# run a suite of tests which check basic functionality
12+
idom_sanic.PerClientStateServer,
13+
idom_flask.PerClientStateServer,
14+
],
15+
)
16+
def server_mount_point(request):
17+
return ServerMountPoint(request.param)
1518

1619

1720
def test_display_simple_hello_world(driver, display):

tests/test_server/test_sanic/test_shared_state_client.py renamed to tests/test_server/test_common/test_shared_state_client.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,19 @@
55
import pytest
66

77
import idom
8-
from idom.server.sanic import SharedClientStateServer
8+
from idom.server import sanic as idom_sanic
99
from idom.testing import ServerMountPoint
1010

1111

12-
@pytest.fixture(scope="module")
13-
def server_mount_point():
14-
"""An IDOM layout mount function and server as a tuple
15-
16-
The ``mount`` and ``server`` fixtures use this.
17-
"""
18-
return ServerMountPoint(SharedClientStateServer, sync_views=True)
12+
@pytest.fixture(
13+
params=[
14+
# add new SharedClientStateServer implementations here to
15+
# run a suite of tests which check basic functionality
16+
idom_sanic.SharedClientStateServer,
17+
]
18+
)
19+
def server_mount_point(request):
20+
return ServerMountPoint(request.param, sync_views=True)
1921

2022

2123
def test_shared_client_state(create_driver, mount, server_mount_point):
@@ -76,7 +78,7 @@ def test_shared_client_state_server_does_not_support_per_client_parameters(
7678

7779
assert error is not None
7880

79-
with pytest.raises(ValueError, match="does not support per-client view parameters"):
80-
raise error
81+
assert isinstance(error, ValueError)
82+
assert "does not support per-client view parameters" in str(error)
8183

8284
last_server_error.current = None

tests/test_server/test_sanic/test_multiview_server.py renamed to tests/test_server/test_prefab.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import pytest
22

33
import idom
4-
from idom.server.sanic import PerClientStateServer
4+
from idom.server.default import PerClientStateServer
55
from idom.server.prefab import multiview_server
66
from idom.testing import ServerMountPoint
77

88
from tests.driver_utils import no_such_element
99

1010

11-
@pytest.fixture(scope="module")
11+
@pytest.fixture
1212
def server_mount_point():
1313
return ServerMountPoint(
1414
PerClientStateServer, mount_and_server_constructor=multiview_server

tests/test_server/test_sanic/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)