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

1"""Module for testing presenters for /api/v1/trainings/teams.""" 

2 

3import json 

4 

5from typing import Any 

6 

7import pytest 

8 

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 

20 

21 

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 ) 

46 

47 

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 } 

67 

68 

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()) 

76 

77 diff = DeepDiff(json_resource, expected_teams_json, ignore_order=True) 

78 assert not diff, f"JSON structure is not expected:{diff}"