Source code for ewoksserver.tests.conftest

from pathlib import Path
from typing import List
from functools import lru_cache
from collections import namedtuple

import pytest
from fastapi.testclient import TestClient

from ewokscore import events
from ewoksjob.tests.conftest import celery_config  # noqa F401
from ewoksjob.tests.conftest import celery_includes  # noqa F401

from .. import app as newserver
from ..app import config as serverconfig
from ..app.backends.binary_backend import _load_url
from ..resources import DEFAULT_ROOT

from .data import resource_filenames
from .socketio_test import SocketIOTestClient


[docs]@pytest.fixture def rest_client(tmpdir): """Client to the REST server (no execution).""" app = newserver.create_app() @lru_cache() def get_ewoks_settings_for_tests(): return serverconfig.EwoksSettings( configured=True, resource_directory=str(tmpdir) ) app.dependency_overrides[serverconfig.get_ewoks_settings] = ( get_ewoks_settings_for_tests ) with TestClient(app) as client: yield client
[docs]@pytest.fixture() def ewoks_handlers(tmpdir): uri = f"file:{tmpdir / 'ewoks_events.db'}" yield [ { "class": "ewokscore.events.handlers.Sqlite3EwoksEventHandler", "arguments": [{"name": "uri", "value": uri}], } ] events.cleanup()
[docs]@pytest.fixture def local_exec_client(tmpdir, ewoks_handlers): """Client to the REST server and Socket.IO (execution with process pool).""" app = newserver.create_app() def get_settings_override(): return serverconfig.EwoksSettings( configured=True, resource_directory=str(tmpdir), ewoks={"handlers": ewoks_handlers}, ) app.dependency_overrides[serverconfig.get_ewoks_settings] = get_settings_override with TestClient(app) as client: with SocketIOTestClient() as sclient: yield client, sclient
[docs]@pytest.fixture def celery_exec_client(tmpdir, celery_session_worker, ewoks_handlers): """Client to the REST server and Socket.IO (execution with celery).""" app = newserver.create_app() def get_settings_override(): return serverconfig.EwoksSettings( configured=True, resource_directory=str(tmpdir), celery=dict(), ewoks={"handlers": ewoks_handlers}, ) app.dependency_overrides[serverconfig.get_ewoks_settings] = get_settings_override with TestClient(app) as client: with SocketIOTestClient() as sclient: yield client, sclient
[docs]@pytest.fixture def png_icons(): filenames = resource_filenames() return [_load_url(filename) for filename in filenames if filename.endswith(".png")]
[docs]@pytest.fixture def svg_icons(): filenames = resource_filenames() return [_load_url(filename) for filename in filenames if filename.endswith(".svg")]
[docs]@pytest.fixture(scope="session") def default_icon_identifiers() -> List[Path]: return [ url.name for url in (DEFAULT_ROOT / "icons").iterdir() if not url.name.startswith("__") ]
[docs]@pytest.fixture(scope="session") def default_workflow_identifiers() -> List[Path]: return [ url.stem for url in (DEFAULT_ROOT / "workflows").iterdir() if url.suffix == ".json" ]
[docs]@pytest.fixture(scope="session") def default_task_identifiers() -> List[Path]: return [ url.stem for url in (DEFAULT_ROOT / "tasks").iterdir() if url.suffix == ".json" ]
[docs]@pytest.fixture def mocked_local_submit(mocker) -> str: submit_local_mock = mocker.patch( "ewoksserver.app.routes.execution.router.submit_local" ) MockFuture = namedtuple("Future", ["task_id"]) arguments = dict() task_id = 0 def mocked_submit(*args, **kwargs): nonlocal task_id arguments["args"] = args arguments["kwargs"] = kwargs task_id += 1 return MockFuture(task_id=task_id) submit_local_mock.side_effect = mocked_submit return arguments