Skip to content

Commit 09b703e

Browse files
committed
add tests for batch operations schema composition and validation
1 parent 0c3eaf7 commit 09b703e

File tree

1 file changed

+38
-2
lines changed

1 file changed

+38
-2
lines changed

packages/models-library/tests/test_batch_operations.py

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import pytest
2-
from models_library.batch_operations import create_batch_ids_validator
3-
from pydantic import ValidationError
2+
from faker import Faker
3+
from models_library.batch_operations import BatchGetEnvelope, create_batch_ids_validator
4+
from models_library.generics import Envelope
5+
from pydantic import TypeAdapter, ValidationError
46

57

68
@pytest.mark.parametrize(
@@ -69,3 +71,37 @@ def test_create_batch_ids_validator(
6971
result, key=lambda x: original_first_positions[x]
7072
)
7173
assert result == sorted_by_original
74+
75+
76+
def test_composing_schemas_for_batch_operations(faker: Faker):
77+
from models_library.api_schemas_webserver._base import (
78+
OutputSchema as WebServerOutputSchema,
79+
)
80+
from models_library.api_schemas_webserver.projects import ProjectGet
81+
from models_library.projects import ProjectID
82+
83+
# inner schema model
84+
class WebServerProjectBatchGetSchema(
85+
WebServerOutputSchema, BatchGetEnvelope[ProjectGet, ProjectID]
86+
): ...
87+
88+
some_projects = ProjectGet.model_json_schema()["examples"]
89+
90+
# response model
91+
response_model = Envelope[WebServerProjectBatchGetSchema].model_validate(
92+
{
93+
# NOTE: how camelcase (from WebServerOutputSchema.model_config) applies here
94+
"data": {
95+
"foundItems": some_projects,
96+
"missingIdentifiers": [ProjectID(faker.uuid4())],
97+
}
98+
}
99+
)
100+
101+
assert response_model.data is not None
102+
103+
assert response_model.data.found_items == TypeAdapter(
104+
list[ProjectGet]
105+
).validate_python(some_projects)
106+
107+
assert len(response_model.data.missing_identifiers) == 1

0 commit comments

Comments
 (0)