Coverage for src/tests/fixtures/portal/pages.py: 100%
35 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 pages."""
3import pytest
5from kwai_bc_portal.domain.application import ApplicationEntity
6from kwai_bc_portal.domain.page import PageEntity
7from kwai_bc_portal.pages.page_db_repository import PageDbRepository
8from kwai_core.db.database import Database
9from kwai_core.db.uow import UnitOfWork
10from kwai_core.domain.value_objects.owner import Owner
11from kwai_core.domain.value_objects.text import DocumentFormat, Locale, LocaleText
14@pytest.fixture
15def make_page(make_application, make_user):
16 """A factory fixture for creating a page."""
18 def _make_page(
19 *,
20 enabled: bool = True,
21 priority: int = 0,
22 application: ApplicationEntity | None = None,
23 texts: tuple[LocaleText, ...] | None = None,
24 remark: str = "",
25 owner: Owner | None = None,
26 ) -> PageEntity:
27 if owner is None:
28 user = make_user()
29 owner = Owner(id=user.id, uuid=user.uuid, name=user.name)
31 return PageEntity(
32 enabled=enabled,
33 priority=priority,
34 remark=remark,
35 application=application or make_application(),
36 texts=texts
37 or (
38 LocaleText(
39 locale=Locale.EN,
40 format=DocumentFormat.MARKDOWN,
41 title="Test",
42 summary="This is a test page",
43 content="This is the long text of the test page.",
44 author=owner,
45 ),
46 ),
47 )
49 return _make_page
52@pytest.fixture
53async def make_page_in_db(
54 request,
55 database: Database,
56 make_page,
57 make_user_account_in_db,
58 make_application_in_db,
59):
60 """A factory fixture for a page in the database."""
61 created_entities = []
63 async def _make_page_in_db(
64 page: PageEntity | None = None,
65 application: ApplicationEntity | None = None,
66 owner: Owner | None = None,
67 ) -> PageEntity:
68 if owner is None:
69 account = await make_user_account_in_db()
70 owner = Owner(
71 id=account.user.id, uuid=account.user.uuid, name=account.user.name
72 )
73 application = application or await make_application_in_db()
74 page = page or make_page(application=application, owner=owner)
76 repo = PageDbRepository(database)
77 async with UnitOfWork(database):
78 page = await repo.create(page)
79 created_entities.append(page)
81 return page
83 yield _make_page_in_db
85 repo = PageDbRepository(database)
86 for entity in created_entities:
87 async with UnitOfWork(database):
88 await repo.delete(entity)