Coverage for src/tests/fixtures/identity/user_invitations.py: 100%
31 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 user invitations."""
3import pytest
5from kwai_bc_identity.user_invitations.user_invitation import UserInvitationEntity
6from kwai_bc_identity.user_invitations.user_invitation_db_repository import (
7 UserInvitationDbRepository,
8)
9from kwai_bc_identity.users.user import UserEntity
10from kwai_bc_identity.users.user_account import UserAccountEntity
11from kwai_core.db.uow import UnitOfWork
12from kwai_core.domain.value_objects.email_address import EmailAddress
13from kwai_core.domain.value_objects.name import Name
14from kwai_core.domain.value_objects.timestamp import Timestamp
17@pytest.fixture
18def make_user_invitation(make_user):
19 """Factory fixture for creating a user invitation."""
21 def _make_user_invitation(
22 email: EmailAddress | None = None,
23 name: Name | None = None,
24 user: UserEntity | None = None,
25 revoked: bool = False,
26 expired_at: Timestamp | None = None,
27 confirmed_at: Timestamp | None = None,
28 ) -> UserInvitationEntity:
29 return UserInvitationEntity(
30 email=email or EmailAddress("ichiro.abe@kwai.com"),
31 name=name or Name(first_name="Ichiro", last_name="Abe"),
32 user=user or make_user(),
33 revoked=revoked,
34 expired_at=expired_at or Timestamp.create_with_delta(days=7),
35 confirmed_at=confirmed_at or Timestamp(),
36 )
38 return _make_user_invitation
41@pytest.fixture
42async def make_user_invitation_in_db(
43 database, make_user_invitation, make_user_account_in_db
44):
45 """Factory fixture for creating a user invitation in the database."""
46 created_entities = []
48 async def _make_user_invitation_in_db(
49 user_invitation: UserInvitationEntity | None = None,
50 user_account: UserAccountEntity | None = None,
51 ) -> UserInvitationEntity:
52 if user_account is None:
53 user_account = await make_user_account_in_db()
54 user_invitation = user_invitation or make_user_invitation(
55 user=user_account.user
56 )
57 repo = UserInvitationDbRepository(database=database)
59 async with UnitOfWork(database):
60 user_invitation = await repo.create(user_invitation)
62 created_entities.append(user_invitation)
64 return user_invitation
66 yield _make_user_invitation_in_db
68 repo = UserInvitationDbRepository(database=database)
69 for entity in created_entities:
70 async with UnitOfWork(database):
71 await repo.delete(entity)