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

File tree

13 files changed

+52
-49
lines changed

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):

0 commit comments

Comments
 (0)