|
6 | 6 | import pytest |
7 | 7 | from faker import Faker |
8 | 8 | from pydantic import StringConstraints |
9 | | -from servicelib.celery.models import OwnerMetadata, TaskUUID |
| 9 | +from servicelib.celery.models import OwnerMetadata, TaskUUID, Wildcard |
10 | 10 |
|
11 | 11 | _faker = Faker() |
12 | 12 |
|
13 | 13 |
|
| 14 | +class _TestOwnerMetadata(OwnerMetadata): |
| 15 | + string_: str |
| 16 | + int_: int |
| 17 | + bool_: bool |
| 18 | + none_: None |
| 19 | + uuid_: str |
| 20 | + list_: list[str] |
| 21 | + |
| 22 | + |
14 | 23 | @pytest.fixture |
15 | | -def task_filter_data() -> dict[str, str | int | bool | None | list[str]]: |
16 | | - return { |
17 | | - "string": _faker.word(), |
18 | | - "int": _faker.random_int(), |
19 | | - "bool": _faker.boolean(), |
20 | | - "none": None, |
21 | | - "uuid": _faker.uuid4(), |
22 | | - "list": [_faker.word() for _ in range(3)], |
| 24 | +def owner_metadata() -> dict[str, str | int | bool | None | list[str]]: |
| 25 | + data = { |
| 26 | + "string_": _faker.word(), |
| 27 | + "int_": _faker.random_int(), |
| 28 | + "bool_": _faker.boolean(), |
| 29 | + "none_": None, |
| 30 | + "uuid_": _faker.uuid4(), |
| 31 | + "list_": [_faker.word() for _ in range(3)], |
23 | 32 | "owner": _faker.word().lower(), |
24 | 33 | } |
| 34 | + _TestOwnerMetadata.model_validate(data) # ensure it's valid |
| 35 | + return data |
25 | 36 |
|
26 | 37 |
|
27 | 38 | async def test_task_filter_serialization( |
28 | | - task_filter_data: dict[str, str | int | bool | None | list[str]], |
| 39 | + owner_metadata: dict[str, str | int | bool | None | list[str]], |
29 | 40 | ): |
30 | | - task_filter = OwnerMetadata.model_validate(task_filter_data) |
31 | | - assert task_filter.model_dump() == task_filter_data |
32 | | - assert task_filter.model_dump() == task_filter_data |
| 41 | + task_filter = _TestOwnerMetadata.model_validate(owner_metadata) |
| 42 | + assert task_filter.model_dump() == owner_metadata |
33 | 43 |
|
34 | 44 |
|
35 | 45 | async def test_task_filter_sorting_key_not_serialized(): |
36 | 46 |
|
| 47 | + class _OwnerMetadata(OwnerMetadata): |
| 48 | + a: int | Wildcard |
| 49 | + b: str | Wildcard |
| 50 | + |
37 | 51 | keys = ["a", "b", "owner"] |
38 | | - task_filter = OwnerMetadata.model_validate( |
| 52 | + task_filter = _OwnerMetadata.model_validate( |
39 | 53 | {"a": _faker.random_int(), "b": _faker.word(), "owner": _faker.word().lower()} |
40 | 54 | ) |
41 | 55 | expected_key = ":".join([f"{k}={getattr(task_filter, k)}" for k in sorted(keys)]) |
42 | 56 | assert task_filter._build_task_id_prefix() == expected_key |
43 | 57 |
|
44 | 58 |
|
45 | 59 | async def test_task_filter_task_uuid( |
46 | | - task_filter_data: dict[str, str | int | bool | None | list[str]], |
| 60 | + owner_metadata: dict[str, str | int | bool | None | list[str]], |
47 | 61 | ): |
48 | | - task_filter = OwnerMetadata.model_validate(task_filter_data) |
| 62 | + task_filter = _TestOwnerMetadata.model_validate(owner_metadata) |
49 | 63 | task_uuid = TaskUUID(_faker.uuid4()) |
50 | 64 | task_id = task_filter.create_task_id(task_uuid) |
51 | 65 | assert OwnerMetadata.get_task_uuid(task_id=task_id) == task_uuid |
|
0 commit comments