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

26 statements  

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

1"""Module for testing the presenters of the api/v1/portal/pages endpoint.""" 

2 

3from typing import AsyncGenerator 

4 

5import pytest 

6 

7from kwai_api.v1.pages.presenters import ( 

8 JsonApiPagePresenter, 

9 JsonApiPagesPresenter, 

10) 

11from kwai_bc_portal.domain.page import PageEntity 

12from kwai_core.domain.presenter import IterableResult 

13 

14 

15def test_json_api_page_presenter(make_page, make_user): 

16 """Test a presenter that transforms a page into a JSON:API document.""" 

17 page = make_page() 

18 presenter = JsonApiPagePresenter(make_user()) 

19 presenter.present(page) 

20 document = presenter.get_document() 

21 assert document is not None 

22 assert document.data.type == "pages" 

23 

24 

25async def page_generator(make_page) -> AsyncGenerator[PageEntity, None]: 

26 """A generator for news items.""" 

27 yield make_page() 

28 yield make_page() 

29 

30 

31@pytest.fixture 

32def iterable_result(make_page) -> IterableResult[PageEntity]: 

33 """A fixture that creates a IterableResult for page entitites.""" 

34 return IterableResult[PageEntity](count=2, iterator=page_generator(make_page)) 

35 

36 

37async def test_json_api_pages_presenter(iterable_result, make_user): 

38 """Test a presenter with an iterable result containing news items.""" 

39 presenter = JsonApiPagesPresenter(make_user()) 

40 await presenter.present(iterable_result) 

41 document = presenter.get_document() 

42 assert document is not None, "The presenter should contain a document" 

43 assert document.meta.count == 2, "Count should be 2" 

44 assert len(document.data) == 2, "There should be 2 resources" 

45 assert len(document.included) == 2, "There should be 2 included applications"