Skip to content

Commit fd6c4ca

Browse files
committed
recover test_validate_entities.py
1 parent 9090951 commit fd6c4ca

1 file changed

Lines changed: 121 additions & 27 deletions

File tree

tests/test_validate_entities.py

Lines changed: 121 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,139 @@
11
"""Plugin tests."""
2-
import io
2+
3+
import json
4+
from collections.abc import Generator
5+
from dataclasses import dataclass
6+
from pathlib import Path
37

48
import pytest
59
from cmem.cmempy.workspace.projects.datasets.dataset import make_new_dataset
6-
from cmem.cmempy.workspace.projects.project import make_new_project, delete_project
7-
from cmem.cmempy.workspace.projects.resources.resource import create_resource
10+
from cmem.cmempy.workspace.projects.project import delete_project, make_new_project
11+
from cmem.cmempy.workspace.projects.resources.resource import create_resource, get_resource_response
12+
813
from cmem_plugin_validation.validate_entities.task import SOURCE, TARGET, ValidateEntity
9-
from tests.utils import needs_cmem
14+
from tests.fixtures import FIXTURE_DIR
15+
from tests.utils import TestExecutionContext, needs_cmem
1016

11-
PROJECT_NAME = "validate_entities_test_project"
12-
DATASET_NAME = "sample_dataset"
13-
RESOURCE_NAME = "sample_dataset.json"
14-
DATASET_TYPE = "json"
1517

16-
@pytest.fixture()
17-
def project() -> object:
18-
"""Provide the DI build project incl. assets."""
19-
make_new_project(PROJECT_NAME)
18+
@dataclass
19+
class TestSetup:
20+
"""Class for providing Validation Test Setup"""
21+
22+
schema_dataset_file: Path = FIXTURE_DIR / "schema.json"
23+
schema_dataset: str = "schema_dataset"
24+
valid_source_dataset_file: Path = FIXTURE_DIR / "source.valid.json"
25+
invalid_source_dataset_file: Path = FIXTURE_DIR / "source.invalid.json"
26+
valid_source_dataset: str = "valid_source_dataset"
27+
invalid_source_dataset: str = "invalid_source_dataset"
28+
target_dataset_file: str = "target.json"
29+
target_dataset: str = "target_dataset"
30+
project_name: str = "validate_entities_test_project"
31+
valid_source_object_count = 2
32+
33+
34+
def _make_dataset(project_name: str, dataset_name: str, dataset_file_name: Path) -> None:
35+
"""Create new dataset in project"""
2036
make_new_dataset(
21-
project_name=PROJECT_NAME,
22-
dataset_name=DATASET_NAME,
23-
dataset_type=DATASET_TYPE,
24-
parameters={"file": RESOURCE_NAME},
37+
project_name=project_name,
38+
dataset_name=dataset_name,
39+
dataset_type="json",
40+
parameters={"file": str(dataset_file_name)},
2541
autoconfigure=False,
2642
)
27-
with io.StringIO('{"key": "value"}') as response_file:
43+
with dataset_file_name.open("rb") as response_file:
2844
create_resource(
29-
project_name=PROJECT_NAME,
30-
resource_name=RESOURCE_NAME,
45+
project_name=project_name,
46+
resource_name=str(dataset_file_name),
3147
file_resource=response_file,
3248
replace=True,
3349
)
34-
yield {"project": PROJECT_NAME, "dataset": DATASET_NAME, "resource": RESOURCE_NAME}
35-
delete_project(PROJECT_NAME)
50+
51+
52+
@pytest.fixture
53+
def project() -> Generator[TestSetup, None, None]:
54+
"""Provide the DI build project incl. assets."""
55+
_ = TestSetup()
56+
make_new_project(_.project_name)
57+
make_new_dataset(
58+
project_name=_.project_name,
59+
dataset_name=_.target_dataset,
60+
dataset_type="json",
61+
parameters={"file": _.target_dataset_file},
62+
autoconfigure=False,
63+
)
64+
_make_dataset(_.project_name, _.valid_source_dataset, _.valid_source_dataset_file)
65+
_make_dataset(_.project_name, _.invalid_source_dataset, _.invalid_source_dataset_file)
66+
_make_dataset(_.project_name, _.schema_dataset, _.schema_dataset_file)
67+
yield _
68+
delete_project(_.project_name)
69+
70+
71+
@needs_cmem
72+
def test_configuration(project: TestSetup) -> None:
73+
"""Test configuration setup"""
74+
_ = project
75+
with pytest.raises(
76+
ValueError,
77+
match="When using the source mode 'dataset', you need to select a Source JSON Dataset.",
78+
):
79+
ValidateEntity(
80+
source_mode=SOURCE.dataset,
81+
target_mode=TARGET.entities,
82+
json_schema_dataset="",
83+
fail_on_violations=False,
84+
)
85+
with pytest.raises(
86+
ValueError,
87+
match="When using the target mode 'dataset', you need to select a Target JSON dataset.",
88+
):
89+
ValidateEntity(
90+
source_mode=SOURCE.entities,
91+
target_mode=TARGET.dataset,
92+
json_schema_dataset="",
93+
fail_on_violations=False,
94+
)
3695

3796

3897
@needs_cmem
39-
def test_configuration(project):
40-
"""Test missing source configuration"""
41-
with pytest.raises(ValueError, match="When using the source mode 'dataset', you need to select a Source JSON Dataset."):
42-
ValidateEntity(source_mode=SOURCE.dataset, target_mode=TARGET.entities, json_schema_dataset="", fail_on_violations=False)
43-
with pytest.raises(ValueError, match="When using the target mode 'dataset', you need to select a Target JSON dataset."):
44-
ValidateEntity(source_mode=SOURCE.entities, target_mode=TARGET.dataset, json_schema_dataset="", fail_on_violations=False)
98+
def test_execute_with_source_dataset(project: TestSetup) -> None:
99+
"""Test source dataset mode"""
100+
_ = project
101+
entities = ValidateEntity(
102+
source_mode=SOURCE.dataset,
103+
target_mode=TARGET.entities,
104+
json_schema_dataset=_.schema_dataset,
105+
fail_on_violations=False,
106+
source_dataset=_.valid_source_dataset,
107+
).execute([], TestExecutionContext(project_id=_.project_name))
108+
assert entities is not None
109+
if entities is not None:
110+
assert len(list(entities.entities)) == _.valid_source_object_count
111+
112+
entities = ValidateEntity(
113+
source_mode=SOURCE.dataset,
114+
target_mode=TARGET.entities,
115+
json_schema_dataset=_.schema_dataset,
116+
fail_on_violations=False,
117+
source_dataset=_.invalid_source_dataset,
118+
).execute([], TestExecutionContext(project_id=_.project_name))
119+
assert entities is not None
120+
if entities is not None:
121+
assert len(list(entities.entities)) == 1
122+
123+
124+
def validate_test_source_target_dataset(project: TestSetup) -> None:
125+
"""Test source and target dataset mode"""
126+
_ = project
127+
128+
ValidateEntity(
129+
source_mode=SOURCE.dataset,
130+
target_mode=TARGET.dataset,
131+
json_schema_dataset=_.schema_dataset,
132+
fail_on_violations=False,
133+
source_dataset=_.valid_source_dataset,
134+
target_dataset=_.target_dataset,
135+
).execute([], TestExecutionContext(project_id=_.project_name))
45136

137+
with get_resource_response(_.project_name, _.target_dataset_file) as response:
138+
data = json.loads(response.content)
139+
assert len(data) == _.valid_source_object_count

0 commit comments

Comments
 (0)