Coverage for src/tests/api/v1/portal/trainings/test_presenters.py: 100%

27 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2024-01-01 00:00 +0000

1"""Module for testing the portal training presenters.""" 

2 

3import json 

4 

5from typing import Any 

6 

7import pytest 

8 

9from deepdiff import DeepDiff 

10from kwai_api.v1.portal.trainings.presenters import JsonApiTrainingPresenter 

11from kwai_bc_training.trainings.training import TrainingEntity, TrainingIdentifier 

12from kwai_core.domain.value_objects.identifier import IntIdentifier 

13from kwai_core.domain.value_objects.name import Name 

14from kwai_core.domain.value_objects.owner import Owner 

15from kwai_core.domain.value_objects.period import Period 

16from kwai_core.domain.value_objects.text import DocumentFormat, Locale, LocaleText 

17from kwai_core.domain.value_objects.timestamp import Timestamp 

18from kwai_core.domain.value_objects.unique_id import UniqueId 

19 

20 

21@pytest.fixture 

22def training() -> TrainingEntity: 

23 """A fixture for a training entity.""" 

24 return TrainingEntity( 

25 id=TrainingIdentifier(1), 

26 texts=( 

27 LocaleText( 

28 locale=Locale.NL, 

29 format=DocumentFormat.MARKDOWN, 

30 content="This is a test training", 

31 summary="Test API training", 

32 title="Test API Training", 

33 author=Owner( 

34 id=IntIdentifier(1), 

35 uuid=UniqueId.generate(), 

36 name=Name(first_name="Jigoro", last_name="Kano"), 

37 ), 

38 ), 

39 ), 

40 period=Period.create_from_delta( 

41 Timestamp.create_from_string("2023-01-02 20:00:00"), hours=2 

42 ), 

43 ) 

44 

45 

46@pytest.fixture 

47def expected_training_json(training: TrainingEntity) -> dict[str, Any]: 

48 """A fixture for a JSON:API resource of a training.""" 

49 return { 

50 "data": { 

51 "id": "1", 

52 "type": "trainings", 

53 "meta": { 

54 "created_at": str(training.traceable_time.created_at), 

55 "updated_at": str(training.traceable_time.updated_at), 

56 }, 

57 "attributes": { 

58 "texts": [ 

59 { 

60 "title": "Test API Training", 

61 "summary": "<p>Test API training</p>", 

62 "content": "<p>This is a test training</p>", 

63 } 

64 ], 

65 "event": { 

66 "start_date": "2023-01-02 20:00:00", 

67 "end_date": "2023-01-02 22:00:00", 

68 "location": "", 

69 "cancelled": False, 

70 }, 

71 "remark": "", 

72 }, 

73 "relationships": { 

74 "teams": {"data": []}, 

75 "schedule": {"data": None}, 

76 }, 

77 }, 

78 "included": [], 

79 } 

80 

81 

82def test_present_training(training, expected_training_json): 

83 """Test a presenter for one training.""" 

84 presenter = JsonApiTrainingPresenter() 

85 presenter.present(training) 

86 document = presenter.get_document() 

87 assert document is not None, "There should be a JSON:API document" 

88 json_resource = json.loads(document.model_dump_json()) 

89 

90 diff = DeepDiff(json_resource, expected_training_json, ignore_order=True) 

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