Coverage for src/tests/fixtures/portal/news.py: 100%
36 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 defining factory fixtures for news items."""
3import pytest
5from kwai_bc_portal.domain.application import ApplicationEntity
6from kwai_bc_portal.domain.news_item import (
7 NewsItemEntity,
8 Promotion,
9)
10from kwai_bc_portal.news.news_item_db_repository import NewsItemDbRepository
11from kwai_core.db.database import Database
12from kwai_core.db.uow import UnitOfWork
13from kwai_core.domain.value_objects.owner import Owner
14from kwai_core.domain.value_objects.period import Period
15from kwai_core.domain.value_objects.text import DocumentFormat, Locale, LocaleText
18@pytest.fixture
19def make_news_item(make_application, make_user):
20 """A factory fixture for creating a news item."""
22 def _make_news_item(
23 *,
24 enabled: bool = True,
25 promotion: Promotion | None = None,
26 period: Period | None = None,
27 application: ApplicationEntity | None = None,
28 texts: tuple[LocaleText, ...] | None = None,
29 remark: str = "",
30 owner: Owner | None = None,
31 ) -> NewsItemEntity:
32 if owner is None:
33 user = make_user()
34 owner = Owner(id=user.id, uuid=user.uuid, name=user.name)
36 return NewsItemEntity(
37 enabled=enabled,
38 promotion=promotion or Promotion(),
39 period=period or Period(),
40 application=application or make_application(),
41 texts=texts
42 or (
43 LocaleText(
44 locale=Locale.EN,
45 format=DocumentFormat.MARKDOWN,
46 title="Test Text",
47 summary="This is a test.",
48 content="This is the long text of the test.",
49 author=owner,
50 ),
51 ),
52 remark=remark,
53 )
55 return _make_news_item
58@pytest.fixture
59async def make_news_item_in_db(
60 database: Database,
61 make_news_item,
62 make_user_account_in_db,
63 make_application_in_db,
64):
65 """A factory fixture for a news item in the database."""
66 created_entities = []
68 async def _make_news_item_in_db(
69 news_item: NewsItemEntity | None = None,
70 application: ApplicationEntity | None = None,
71 owner: Owner | None = None,
72 ) -> NewsItemEntity:
73 if owner is None:
74 account = await make_user_account_in_db()
75 owner = Owner(
76 id=account.user.id, uuid=account.user.uuid, name=account.user.name
77 )
78 application = application or await make_application_in_db()
80 news_item = news_item or make_news_item(application=application, owner=owner)
82 repo = NewsItemDbRepository(database)
83 async with UnitOfWork(database):
84 news_item = await repo.create(news_item)
85 created_entities.append(news_item)
87 return news_item
89 yield _make_news_item_in_db
91 repo = NewsItemDbRepository(database)
92 for entity in created_entities:
93 async with UnitOfWork(database):
94 await repo.delete(entity)