Skip to content

Commit 5e496ed

Browse files
reintroduce_fs_models_test: reintroduce (#217)
1 parent 1231b1e commit 5e496ed

36 files changed

+1734
-26
lines changed

pytest.ini

Lines changed: 0 additions & 4 deletions
This file was deleted.
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import pytest
2+
from pydantic import ValidationError
3+
4+
from job_executor.adapter.fs.models.datastore_versions import (
5+
DataStructureUpdate,
6+
)
7+
from job_executor.common.exceptions import ReleaseStatusException
8+
9+
DATA_STRUCTURE_ADD_UPDATE = {
10+
"name": "KJOENN",
11+
"description": "Første publisering",
12+
"operation": "ADD",
13+
"releaseStatus": "DRAFT",
14+
}
15+
DATA_STRUCTURE_REMOVE_UPDATE = {
16+
"name": "KJOENN",
17+
"description": "Fjernet variabel",
18+
"operation": "REMOVE",
19+
"releaseStatus": "PENDING_DELETE",
20+
}
21+
DATA_STRUCTURE_UPDATE_MISSING_FIELD = {
22+
"name": "KJOENN",
23+
"description": "Første publisering",
24+
"operation": "ADD",
25+
}
26+
27+
28+
def test_data_structure_update():
29+
data_structure_update = DataStructureUpdate(**DATA_STRUCTURE_ADD_UPDATE)
30+
assert (
31+
data_structure_update.model_dump(by_alias=True, exclude_none=True)
32+
== DATA_STRUCTURE_ADD_UPDATE
33+
)
34+
35+
36+
def test_invalid_data_structure_update():
37+
with pytest.raises(ValidationError):
38+
DataStructureUpdate(**DATA_STRUCTURE_UPDATE_MISSING_FIELD)
39+
40+
41+
def test_set_release_status():
42+
data_structure_update = DataStructureUpdate(**DATA_STRUCTURE_ADD_UPDATE)
43+
data_structure_update.set_release_status("PENDING_RELEASE")
44+
assert data_structure_update.release_status == "PENDING_RELEASE"
45+
46+
data_structure_update.set_release_status("DRAFT")
47+
assert data_structure_update.release_status == "DRAFT"
48+
49+
with pytest.raises(ReleaseStatusException) as e:
50+
data_structure_update.set_release_status("PENDING_DELETE")
51+
assert "Can't set release status: PENDING_DELETE" in str(e)
52+
with pytest.raises(ReleaseStatusException) as e:
53+
data_structure_update.set_release_status("NO_SUCH_RELEASE_STATUS")
54+
assert "Invalid release status: NO_SUCH_RELEASE_STATUS" in str(e)
55+
56+
data_structure_update = DataStructureUpdate(**DATA_STRUCTURE_REMOVE_UPDATE)
57+
data_structure_update.set_release_status("PENDING_DELETE")
58+
assert data_structure_update.release_status == "PENDING_DELETE"
59+
60+
with pytest.raises(ReleaseStatusException) as e:
61+
data_structure_update.set_release_status("DRAFT")
62+
assert "Can't set release status: DRAFT" in str(e)
63+
64+
with pytest.raises(ReleaseStatusException) as e:
65+
data_structure_update.set_release_status("PENDING_RELEASE")
66+
assert "Can't set release status: PENDING_RELEASE" in str(e)
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
import json
2+
import os
3+
import shutil
4+
5+
import pytest
6+
7+
from job_executor.adapter.fs.models.datastore_versions import (
8+
DatastoreVersion,
9+
DataStructureUpdate,
10+
DraftVersion,
11+
)
12+
from job_executor.common.exceptions import (
13+
BumpException,
14+
ExistingDraftException,
15+
NoSuchDraftException,
16+
)
17+
18+
19+
def load_json(file_path):
20+
return json.load(open(file_path, encoding="utf"))
21+
22+
23+
TEST_DIR = "tests/unit/resources/adapter/fs/model/datastore_version"
24+
DRAFT_VERSION_IDENTICAL = load_json(f"{TEST_DIR}/draft_version_identical.json")
25+
DRAFT_VERSION_ONLY_PENDING = load_json(
26+
f"{TEST_DIR}/draft_version_only_pending.json"
27+
)
28+
DRAFT_VERSION_ADDED_PENDING = load_json(
29+
f"{TEST_DIR}/draft_version_added_pending.json"
30+
)
31+
DATASTORE_VERSION = {
32+
"version": "0.1.0.1635299291",
33+
"description": "Første release",
34+
"releaseTime": 1635299291,
35+
"languageCode": "no",
36+
"dataStructureUpdates": [
37+
{
38+
"name": "INNTEKT",
39+
"description": "Første publisering",
40+
"operation": "ADD",
41+
"releaseStatus": "RELEASED",
42+
},
43+
{
44+
"name": "SIVSTAND",
45+
"description": "Første publisering",
46+
"operation": "PATCH_METADATA",
47+
"releaseStatus": "RELEASED",
48+
},
49+
],
50+
"updateType": "MINOR",
51+
}
52+
53+
54+
def setup_function():
55+
if os.path.isdir("tests/resources_backup"):
56+
shutil.rmtree("tests/resources_backup")
57+
58+
shutil.copytree("tests/resources", "tests/resources_backup")
59+
60+
61+
def teardown_function():
62+
shutil.rmtree("tests/resources")
63+
shutil.move("tests/resources_backup", "tests/resources")
64+
65+
66+
def test_get_dataset_release_status():
67+
datastore_version = DatastoreVersion.model_validate(DATASTORE_VERSION)
68+
69+
release_status = datastore_version.get_dataset_release_status("INNTEKT")
70+
assert release_status == "RELEASED"
71+
72+
release_status = datastore_version.get_dataset_release_status(
73+
"DOES_NOT_EXIST"
74+
)
75+
assert release_status is None
76+
77+
78+
def test_draft_version_delete_draft():
79+
draft_version = DraftVersion.model_validate(DRAFT_VERSION_IDENTICAL)
80+
release_time = draft_version.release_time
81+
version = draft_version.version
82+
draft_version.delete_draft("UTDANNING")
83+
update_names = [
84+
update.name for update in draft_version.data_structure_updates
85+
]
86+
assert "UTDANNING" not in update_names
87+
assert len(update_names) == 1
88+
assert release_time != draft_version.release_time
89+
assert version != draft_version.version
90+
91+
with pytest.raises(NoSuchDraftException) as e:
92+
draft_version.delete_draft("NO_SUCH_DATASET")
93+
assert "Can't delete draft for NO_SUCH_DATASET" in str(e)
94+
95+
96+
def test_add_draft_version_already_existing_dataset():
97+
draft_version = DraftVersion.model_validate(DRAFT_VERSION_IDENTICAL)
98+
with pytest.raises(ExistingDraftException) as e:
99+
draft_version.add(
100+
DataStructureUpdate(
101+
name="UTDANNING",
102+
description="",
103+
operation="ADD",
104+
release_status="DRAFT",
105+
)
106+
)
107+
assert "Draft for UTDANNING already exists" in str(e)
108+
109+
110+
def test_draft_version_validate_bump_manifesto():
111+
draft_version = DraftVersion.model_validate(DRAFT_VERSION_IDENTICAL)
112+
113+
bump_manifesto = DatastoreVersion.model_validate(DRAFT_VERSION_IDENTICAL)
114+
assert draft_version.validate_bump_manifesto(bump_manifesto)
115+
116+
bump_manifesto_only_pending = DatastoreVersion.model_validate(
117+
DRAFT_VERSION_ONLY_PENDING
118+
)
119+
assert draft_version.validate_bump_manifesto(bump_manifesto_only_pending)
120+
121+
bump_manifesto_added_pending = DatastoreVersion.model_validate(
122+
DRAFT_VERSION_ADDED_PENDING
123+
)
124+
assert not draft_version.validate_bump_manifesto(
125+
bump_manifesto_added_pending
126+
)
127+
128+
129+
def test_draft_version_release_pending():
130+
draft_version = DraftVersion.model_validate(DRAFT_VERSION_IDENTICAL)
131+
release_time = draft_version.release_time
132+
version = draft_version.version
133+
updates, update_type = draft_version.release_pending()
134+
assert update_type == "MINOR"
135+
assert [
136+
update.model_dump(by_alias=True, exclude_none=True)
137+
for update in updates
138+
] == [
139+
{
140+
"description": "Første publisering",
141+
"name": "BRUTTO_INNTEKT",
142+
"operation": "ADD",
143+
"releaseStatus": "PENDING_RELEASE",
144+
}
145+
]
146+
assert release_time != draft_version.release_time
147+
assert version != draft_version.version
148+
with pytest.raises(BumpException):
149+
draft_version.release_pending()
150+
151+
152+
def test_set_draft_release_status():
153+
draft_version = DraftVersion.model_validate(DRAFT_VERSION_IDENTICAL)
154+
release_time = draft_version.release_time
155+
version = draft_version.version
156+
draft_version.set_draft_release_status("UTDANNING", "PENDING_RELEASE")
157+
for update in draft_version:
158+
if update.name == "UTDANNING":
159+
assert update.release_status == "PENDING_RELEASE"
160+
assert release_time != draft_version.release_time
161+
assert version != draft_version.version
162+
163+
draft_version.set_draft_release_status("UTDANNING", "DRAFT")
164+
for update in draft_version:
165+
if update.name == "UTDANNING":
166+
assert update.release_status == "DRAFT"
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import json
2+
import os
3+
import shutil
4+
from pathlib import Path
5+
6+
from job_executor.adapter.fs import LocalStorageAdapter
7+
from job_executor.adapter.fs.models.datastore_versions import (
8+
DatastoreVersions,
9+
DataStructureUpdate,
10+
)
11+
12+
13+
def load_json(file_path):
14+
return json.load(open(file_path, encoding="utf"))
15+
16+
17+
DATASTORE_DIR = "tests/unit/resources/adapter/fs/TEST_DATASTORE"
18+
METADATA_DIR = f"{DATASTORE_DIR}/datastore"
19+
local_storage = LocalStorageAdapter(Path(DATASTORE_DIR))
20+
DATASTORE_VERSIONS_PATH = f"{METADATA_DIR}/datastore_versions.json"
21+
22+
23+
def setup_function():
24+
if os.path.isdir("tests/resources_backup"):
25+
shutil.rmtree("tests/resources_backup")
26+
27+
shutil.copytree("tests/resources", "tests/resources_backup")
28+
29+
30+
def teardown_function():
31+
shutil.rmtree("tests/resources")
32+
shutil.move("tests/resources_backup", "tests/resources")
33+
34+
35+
def test_datastore_versions():
36+
datastore_versions = DatastoreVersions.model_validate(
37+
local_storage.datastore_dir.get_datastore_versions()
38+
)
39+
assert datastore_versions.model_dump(
40+
by_alias=True, exclude_none=True
41+
) == load_json(DATASTORE_VERSIONS_PATH)
42+
43+
44+
def test_add_new_release_version():
45+
datastore_versions = DatastoreVersions.model_validate(
46+
local_storage.datastore_dir.get_datastore_versions()
47+
)
48+
datastore_versions.add_new_release_version(
49+
[
50+
DataStructureUpdate(
51+
name="NEW_DATASET",
52+
description="Første publisering",
53+
operation="ADD",
54+
release_status="PENDING_RELEASE",
55+
)
56+
],
57+
"new datastore version",
58+
"MAJOR",
59+
)
60+
assert len(datastore_versions.versions) == 3
61+
62+
63+
def test_get_dataset_release_status():
64+
datastore_versions = DatastoreVersions.model_validate(
65+
local_storage.datastore_dir.get_datastore_versions()
66+
)
67+
assert (
68+
datastore_versions.get_dataset_release_status("SIVSTAND") == "RELEASED"
69+
)
70+
assert datastore_versions.get_dataset_release_status("INNTEKT") == "DELETED"
71+
assert (
72+
datastore_versions.get_dataset_release_status("DOES_NOT_EXIST") is None
73+
)

0 commit comments

Comments
 (0)