Coverage for src/tests/api/v1/trainings/teams/test_presenters.py: 100%
28 statements
« prev ^ index » next coverage.py v7.11.0, created at 2024-01-01 00:00 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2024-01-01 00:00 +0000
1"""Module for testing presenters for /api/v1/trainings/teams."""
3import json
5from typing import Any
7import pytest
9from deepdiff import DeepDiff
10from kwai_api.v1.trainings.teams.presenters import JsonApiTrainingTeamsPresenter
11from kwai_bc_training.teams.team import TeamEntity, TeamIdentifier
12from kwai_bc_training.trainings.training import TrainingEntity, TrainingIdentifier
13from kwai_core.domain.value_objects.identifier import IntIdentifier
14from kwai_core.domain.value_objects.name import Name
15from kwai_core.domain.value_objects.owner import Owner
16from kwai_core.domain.value_objects.period import Period
17from kwai_core.domain.value_objects.text import DocumentFormat, Locale, LocaleText
18from kwai_core.domain.value_objects.timestamp import Timestamp
19from kwai_core.domain.value_objects.unique_id import UniqueId
22@pytest.fixture
23def training() -> TrainingEntity:
24 """A fixture for a training entity."""
25 return TrainingEntity(
26 id=TrainingIdentifier(1),
27 texts=(
28 LocaleText(
29 locale=Locale.NL,
30 format=DocumentFormat.MARKDOWN,
31 content="This is a test training",
32 summary="Test API training",
33 title="Test API Training",
34 author=Owner(
35 id=IntIdentifier(1),
36 uuid=UniqueId.generate(),
37 name=Name(first_name="Jigoro", last_name="Kano"),
38 ),
39 ),
40 ),
41 period=Period.create_from_delta(
42 Timestamp.create_from_string("2023-01-02 20:00:00"), hours=2
43 ),
44 teams=frozenset({TeamEntity(id=TeamIdentifier(1), name="U11")}),
45 )
48@pytest.fixture
49def expected_teams_json(training: TrainingEntity) -> dict[str, Any]:
50 """A fixture for a JSON:API resource of a training."""
51 return {
52 "meta": {
53 "count": 1,
54 "offset": 0,
55 "limit": 0,
56 },
57 "data": [
58 {
59 "id": "1",
60 "type": "teams",
61 "attributes": {
62 "name": "U11",
63 },
64 }
65 ],
66 }
69def test_present_training_team(training, expected_teams_json):
70 """Test a presenter for one training."""
71 presenter = JsonApiTrainingTeamsPresenter()
72 presenter.present(training)
73 document = presenter.get_document()
74 assert document is not None, "There should be a JSON:API document"
75 json_resource = json.loads(document.model_dump_json())
77 diff = DeepDiff(json_resource, expected_teams_json, ignore_order=True)
78 assert not diff, f"JSON structure is not expected:{diff}"