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
« 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."""
3from typing import AsyncGenerator
5import pytest
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
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"
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()
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 )
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"