|
1 | 1 | 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 |
4 | 6 |
|
5 | 7 |
|
6 | 8 | @pytest.mark.parametrize( |
@@ -69,3 +71,37 @@ def test_create_batch_ids_validator( |
69 | 71 | result, key=lambda x: original_first_positions[x] |
70 | 72 | ) |
71 | 73 | 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