Coverage for src/tests/modules/identity/test_invite_user.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 testing the use case: invite a user."""
3import pytest
5from kwai_bc_identity.invite_user import InviteUser, InviteUserCommand
6from kwai_bc_identity.user_invitations.user_invitation import UserInvitationEntity
7from kwai_bc_identity.user_invitations.user_invitation_db_repository import (
8 UserInvitationDbRepository,
9)
10from kwai_bc_identity.user_invitations.user_invitation_repository import (
11 UserInvitationRepository,
12)
13from kwai_bc_identity.users.user import UserEntity
14from kwai_bc_identity.users.user_db_repository import UserDbRepository
15from kwai_core.db.database import Database
16from kwai_core.domain.exceptions import UnprocessableException
17from kwai_core.domain.presenter import EntityPresenter
18from kwai_core.events.publisher import Publisher
21pytestmark = [pytest.mark.db, pytest.mark.bus]
24@pytest.fixture(scope="module")
25def repo(database: Database) -> UserInvitationRepository:
26 """Create a user invitation repository."""
27 return UserInvitationDbRepository(database)
30async def test_invite_user(
31 database: Database,
32 repo: UserInvitationRepository,
33 user: UserEntity,
34 publisher: Publisher,
35):
36 """Test use case: invite a user."""
37 user_repo = UserDbRepository(database)
38 command = InviteUserCommand(
39 email="ichiro.abe@kwai.com",
40 first_name="Ichiro",
41 last_name="Abe",
42 remark="Created with pytest test_invite_user",
43 )
44 presenter = EntityPresenter[UserInvitationEntity]()
45 await InviteUser(
46 user=user,
47 user_repo=user_repo,
48 user_invitation_repo=repo,
49 presenter=presenter,
50 publisher=publisher,
51 ).execute(command)
53 assert presenter.entity is not None, "There should be a user invitation"
56async def test_user_already_exists(
57 database: Database,
58 repo: UserInvitationRepository,
59 make_user_account_in_db,
60 publisher: Publisher,
61):
62 """Test if an exception is raised when a user with the email already exists."""
63 user_account = await make_user_account_in_db()
64 user_repo = UserDbRepository(database)
65 presenter = EntityPresenter[UserInvitationEntity]()
66 command = InviteUserCommand(
67 email=str(user_account.user.email),
68 first_name="Jigoro",
69 last_name="Kano",
70 remark="Created with pytest test_user_already_exists",
71 )
73 with pytest.raises(UnprocessableException):
74 await InviteUser(
75 user=user_account.user,
76 user_repo=user_repo,
77 user_invitation_repo=repo,
78 presenter=presenter,
79 publisher=publisher,
80 ).execute(command)
83async def test_already_invited_user(
84 database: Database,
85 repo: UserInvitationRepository,
86 make_user_account_in_db,
87 make_user_invitation_in_db,
88 publisher: Publisher,
89):
90 """Test if an exception is raised when there is an invitation pending."""
91 user_account = await make_user_account_in_db()
92 # Make already a user invitation
93 user_invitation = await make_user_invitation_in_db()
95 # Try to make the same user invitation
96 user_repo = UserDbRepository(database)
97 presenter = EntityPresenter[UserInvitationEntity]()
99 command = InviteUserCommand(
100 email=str(user_invitation.email),
101 first_name=user_account.user.name.first_name,
102 last_name=user_account.user.name.last_name,
103 remark="Created with pytest test_already_invited_user",
104 )
106 with pytest.raises(UnprocessableException):
107 await InviteUser(
108 user=user_account.user,
109 user_repo=user_repo,
110 user_invitation_repo=repo,
111 presenter=presenter,
112 publisher=publisher,
113 ).execute(command)