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

25 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/news endpoint.""" 

2 

3from typing import AsyncGenerator 

4 

5import pytest 

6 

7from kwai_api.v1.news.presenters import ( 

8 JsonApiNewsItemPresenter, 

9 JsonApiNewsItemsPresenter, 

10) 

11from kwai_bc_portal.domain.news_item import NewsItemEntity 

12from kwai_core.domain.presenter import IterableResult 

13 

14 

15def test_json_api_news_presenter(make_news_item, make_user): 

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

17 news_item = make_news_item() 

18 presenter = JsonApiNewsItemPresenter(make_user()) 

19 document = presenter.present(news_item).get_document() 

20 assert document is not None 

21 assert document.data.type == "news_items" 

22 

23 

24async def news_item_generator(make_news_item) -> AsyncGenerator[NewsItemEntity, None]: 

25 """A generator for news items.""" 

26 yield make_news_item() 

27 yield make_news_item() 

28 

29 

30@pytest.fixture 

31def iterable_result(make_news_item) -> IterableResult[NewsItemEntity]: 

32 """A fixture that creates a IterableResult for news item entitites.""" 

33 return IterableResult[NewsItemEntity]( 

34 count=2, iterator=news_item_generator(make_news_item) 

35 ) 

36 

37 

38async def test_json_api_news_items_presenter(iterable_result, make_user): 

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

40 presenter = JsonApiNewsItemsPresenter(make_user()) 

41 await presenter.present(iterable_result) 

42 document = presenter.get_document() 

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

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

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

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