-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathconftest.py
80 lines (53 loc) · 2.21 KB
/
conftest.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import pytest
import os
from typing import Type
from disaggregators import DisaggregationModule, DisaggregationModuleLabels, DisaggregationModuleConfig
def pytest_collection_modifyitems(items):
for item in items:
if "integration" in item.nodeid:
item.add_marker(pytest.mark.slow)
item.add_marker(pytest.mark.integration)
def pytest_generate_tests(metafunc):
if metafunc.definition.name == "test_each_module":
metafunc.parametrize("module", [
x.name for x in os.scandir(
metafunc.definition.config.rootdir / "src/disaggregators/disaggregation_modules"
) if x.is_dir() and not x.name.startswith("__")
])
# Fixtures
class DummyLabels(DisaggregationModuleLabels):
DUMMY_ONE = "dummy-value-1"
DUMMY_TWO = "dummy-value-2"
@pytest.fixture
def dummy_labels():
return DummyLabels
@pytest.fixture
def dummy_module_config(dummy_labels):
class DummyModuleConfig(DisaggregationModuleConfig):
def __init__(self, labels: Type[dummy_labels]):
self.labels = labels
return DummyModuleConfig
@pytest.fixture
def dummy_module(dummy_labels, dummy_module_config):
class DummyModule(DisaggregationModule):
labels = dummy_labels
def __init__(self, module_id="dummy-module", *args, **kwargs):
super().__init__(module_id=module_id, *args, **kwargs)
def _apply_config(self, config):
self.labels = config.labels
def __call__(self, row, *args, **kwargs):
return {label: True for label in list(self.labels)}
return DummyModule
@pytest.fixture
def custom_dummy_labels():
class CustomDummyLabels(DisaggregationModuleLabels):
DUMMY_ONE = "dummy-value-1"
DUMMY_TWO = "dummy-value-2"
DUMMY_THREE = "dummy-value-3"
return CustomDummyLabels
@pytest.fixture
def configured_module(custom_dummy_labels, dummy_module_config, dummy_module):
return dummy_module(config=dummy_module_config(labels=custom_dummy_labels), column=None)
@pytest.fixture
def configured_dummy_expected_results(custom_dummy_labels, configured_module):
return {f"{configured_module.name}.{label}": True for label in custom_dummy_labels}