Skip to content

Commit d9e0bb0

Browse files
committed
test nodes
1 parent 2c3c4d1 commit d9e0bb0

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

packages/postgres-database/src/simcore_postgres_database/utils_projects_nodes.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ def model_dump_as_node(self) -> dict[str, Any]:
7676
7777
Handles field mapping and excludes database-specific fields that are not
7878
part of the Node model.
79+
80+
NOTE: tested in services/web/server/tests/unit/isolated/test_models.py
7981
"""
8082
# Get all ProjectNode fields except those that don't belong in Node
8183
exclude_fields = {"node_id", "required_resources"}
@@ -101,6 +103,8 @@ def model_dump_as_node(self) -> dict[str, Any]:
101103
102104
Handles field mapping and excludes database-specific fields that are not
103105
part of the Node model.
106+
107+
NOTE: tested in services/web/server/tests/unit/isolated/test_models.py
104108
"""
105109
# Get all ProjectNode fields except those that don't belong in Node
106110
exclude_fields = {"node_id", "required_resources", "created", "modified"}

services/web/server/tests/unit/isolated/test_models.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,13 @@
77

88
import pytest
99
from faker import Faker
10+
from models_library.projects_nodes import Node
1011
from pydantic import TypeAdapter, ValidationError
1112
from pytest_simcore.helpers.faker_factories import random_phone_number
13+
from simcore_postgres_database.utils_projects_nodes import (
14+
ProjectNode,
15+
ProjectNodeCreate,
16+
)
1217
from simcore_service_webserver.users._controller.rest._rest_schemas import (
1318
MyPhoneRegister,
1419
PhoneNumberStr,
@@ -67,3 +72,40 @@ def test_invalid_phone_numbers(phone: str):
6772
# This test is used to tune options of PhoneNumberValidator
6873
with pytest.raises(ValidationError):
6974
MyPhoneRegister.model_validate({"phone": phone})
75+
76+
77+
_node_domain_model_dict_examples = Node.model_json_schema()["examples"]
78+
79+
80+
@pytest.mark.parametrize(
81+
"node_data",
82+
_node_domain_model_dict_examples,
83+
ids=[f"example-{i}" for i in range(len(_node_domain_model_dict_examples))],
84+
)
85+
def test_adapters_between_different_node_models(node_data: dict, faker: Faker):
86+
"""
87+
NOTE: This test is here because it checks models from models_library and simcore_postgres_database
88+
which are in different packages and should not depend on each other.
89+
"""
90+
# dict -> to Node (from models_library)
91+
node_id = faker.uuid4()
92+
node = Node.model_validate(node_data)
93+
94+
# -> to ProjectNodeCreate and ProjectNode (from simcore_postgres_database)
95+
project_node_create = ProjectNodeCreate(
96+
node_id=node_id,
97+
**node.model_dump(by_alias=False, mode="json"),
98+
)
99+
project_node = ProjectNode(
100+
node_id=node_id,
101+
created=faker.date_time(),
102+
modified=faker.date_time(),
103+
**node.model_dump(by_alias=False, mode="json"),
104+
)
105+
106+
# -> to Node (from models_library)
107+
assert (
108+
Node.model_validate(project_node_create.model_dump_as_node(), by_name=True)
109+
== node
110+
)
111+
assert Node.model_validate(project_node.model_dump_as_node(), by_name=True) == node

0 commit comments

Comments
 (0)