|
7 | 7 |
|
8 | 8 | import pytest |
9 | 9 | from faker import Faker |
| 10 | +from models_library.projects_nodes import Node |
10 | 11 | from pydantic import TypeAdapter, ValidationError |
11 | 12 | from pytest_simcore.helpers.faker_factories import random_phone_number |
| 13 | +from simcore_postgres_database.utils_projects_nodes import ( |
| 14 | + ProjectNode, |
| 15 | + ProjectNodeCreate, |
| 16 | +) |
12 | 17 | from simcore_service_webserver.users._controller.rest._rest_schemas import ( |
13 | 18 | MyPhoneRegister, |
14 | 19 | PhoneNumberStr, |
@@ -67,3 +72,40 @@ def test_invalid_phone_numbers(phone: str): |
67 | 72 | # This test is used to tune options of PhoneNumberValidator |
68 | 73 | with pytest.raises(ValidationError): |
69 | 74 | 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