Skip to content

Commit 9d74b86

Browse files
committed
feat(test-tools): Add run_tasks fixture
1 parent abec78b commit 9d74b86

File tree

3 files changed

+53
-19
lines changed

3 files changed

+53
-19
lines changed

src/common/test_tools/plugin.py

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
1+
from functools import partial
12
from typing import Generator
23

34
import prometheus_client
45
import pytest
56
from prometheus_client.metrics import MetricWrapperBase
67
from pyfakefs.fake_filesystem import FakeFilesystem
8+
from pytest_django.fixtures import SettingsWrapper
79

8-
from common.test_tools.types import AssertMetricFixture, Snapshot, SnapshotFixture
10+
from common.prometheus.utils import reload_metrics
11+
from common.test_tools.types import (
12+
AssertMetricFixture,
13+
RunTasksFixture,
14+
Snapshot,
15+
SnapshotFixture,
16+
)
917

1018

1119
def pytest_addoption(parser: pytest.Parser) -> None:
@@ -68,6 +76,14 @@ def enterprise_mode(fs: FakeFilesystem) -> Generator[None, None, None]:
6876
is_enterprise.cache_clear()
6977

7078

79+
@pytest.fixture()
80+
def task_processor_mode(settings: SettingsWrapper) -> None:
81+
settings.TASK_PROCESSOR_MODE = True
82+
# The setting is supposed to be set before the metrics module is imported,
83+
# so reload it
84+
reload_metrics("task_processor.metrics")
85+
86+
7187
@pytest.fixture(autouse=True)
7288
def flagsmith_markers_marked(
7389
request: pytest.FixtureRequest,
@@ -77,6 +93,21 @@ def flagsmith_markers_marked(
7793
request.getfixturevalue("saas_mode")
7894
if marker.name == "enterprise_mode":
7995
request.getfixturevalue("enterprise_mode")
96+
if marker.name == "task_processor_mode":
97+
request.getfixturevalue("task_processor_mode")
98+
99+
100+
@pytest.fixture(name="run_tasks")
101+
def run_tasks_impl(
102+
settings: SettingsWrapper,
103+
db: None,
104+
task_processor_mode: None,
105+
) -> RunTasksFixture:
106+
settings.TASK_RUN_METHOD = "TASK_PROCESSOR"
107+
108+
from task_processor.processor import run_tasks
109+
110+
return partial(run_tasks, database="default")
80111

81112

82113
@pytest.fixture

tests/unit/common/test_tools/test_plugin.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import prometheus_client
22
import pytest
33

4-
from common.test_tools import AssertMetricFixture
4+
from common.test_tools import AssertMetricFixture, RunTasksFixture
55
from common.test_tools.plugin import assert_metric_impl
66
from common.test_tools.utils import edition_printer
7+
from task_processor.decorators import register_task_handler
78

89

910
def test_assert_metrics__asserts_expected(
@@ -55,3 +56,22 @@ def test_saas_mode_marker__is_saas_returns_expected() -> None:
5556
def test_enterprise_mode_marker__is_enterprise_returns_expected() -> None:
5657
# When & Then
5758
assert edition_printer() == "enterprise!"
59+
60+
61+
def test_run_tasks__runs_expected_tasks(
62+
run_tasks: RunTasksFixture,
63+
) -> None:
64+
# Given
65+
@register_task_handler()
66+
def my_task() -> None:
67+
return None
68+
69+
my_task.delay()
70+
71+
# When
72+
task_runs = run_tasks(num_tasks=1)
73+
74+
# Then
75+
assert len(task_runs) == 1
76+
assert task_runs[0].task.task_identifier == "test_plugin.my_task"
77+
assert task_runs[0].result == "SUCCESS"

tests/unit/task_processor/conftest.py

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import pytest
44
from pytest_django.fixtures import SettingsWrapper
55

6-
from common.prometheus.utils import reload_metrics
76
from task_processor.task_registry import RegisteredTask
87

98

@@ -35,22 +34,6 @@ def current_database(
3534
return database
3635

3736

38-
@pytest.fixture()
39-
def task_processor_mode(settings: SettingsWrapper) -> None:
40-
settings.TASK_PROCESSOR_MODE = True
41-
# The setting is supposed to be set before the metrics module is imported,
42-
# so reload it
43-
reload_metrics("task_processor.metrics")
44-
45-
46-
@pytest.fixture(autouse=True)
47-
def task_processor_mode_marked(request: pytest.FixtureRequest) -> None:
48-
for marker in request.node.iter_markers():
49-
if marker.name == "task_processor_mode":
50-
request.getfixturevalue("task_processor_mode")
51-
return
52-
53-
5437
@pytest.fixture(autouse=True)
5538
def task_registry() -> typing.Generator[dict[str, RegisteredTask], None, None]:
5639
from task_processor.task_registry import registered_tasks

0 commit comments

Comments
 (0)