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

1"""Module for defining factory fixtures for pages.""" 

2 

3import pytest 

4 

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 

12 

13 

14@pytest.fixture 

15def make_page(make_application, make_user): 

16 """A factory fixture for creating a page.""" 

17 

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) 

30 

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 ) 

48 

49 return _make_page 

50 

51 

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 = [] 

62 

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) 

75 

76 repo = PageDbRepository(database) 

77 async with UnitOfWork(database): 

78 page = await repo.create(page) 

79 created_entities.append(page) 

80 

81 return page 

82 

83 yield _make_page_in_db 

84 

85 repo = PageDbRepository(database) 

86 for entity in created_entities: 

87 async with UnitOfWork(database): 

88 await repo.delete(entity)