Coverage for src/tests/modules/identity/test_mail_user_invitation.py: 100%

25 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2024-01-01 00:00 +0000

1"""Module for testing the use case mail a user invitation.""" 

2 

3import pytest 

4 

5from kwai_bc_identity.mail_user_invitation import ( 

6 MailUserInvitation, 

7 MailUserInvitationCommand, 

8) 

9from kwai_bc_identity.user_invitations.user_invitation_db_repository import ( 

10 UserInvitationDbRepository, 

11) 

12from kwai_bc_identity.user_invitations.user_invitation_repository import ( 

13 UserInvitationRepository, 

14) 

15from kwai_core.db.database import Database 

16from kwai_core.domain.exceptions import UnprocessableException 

17from kwai_core.mail.mailer import Mailer 

18from kwai_core.mail.recipient import Recipients 

19from kwai_core.template.mail_template import MailTemplate 

20 

21 

22pytestmark = [pytest.mark.db, pytest.mark.mail] 

23 

24 

25@pytest.fixture(scope="module") 

26def repo(database: Database) -> UserInvitationRepository: 

27 """Create a user invitation repository.""" 

28 return UserInvitationDbRepository(database) 

29 

30 

31async def test_mail_user_invitation( 

32 repo: UserInvitationRepository, 

33 make_user_invitation_in_db, 

34 mailer: Mailer, 

35 recipients: Recipients, 

36 user_invitation_mail_template: MailTemplate, 

37): 

38 """Test use case mail user invitation.""" 

39 user_invitation = await make_user_invitation_in_db() 

40 command = MailUserInvitationCommand(uuid=str(user_invitation.uuid)) 

41 updated_user_invitation = await MailUserInvitation( 

42 repo, mailer, recipients, user_invitation_mail_template 

43 ).execute(command) 

44 

45 assert updated_user_invitation.mailed is not None, "mailed should be set." 

46 

47 

48async def test_mail_user_invitation_already_mailed( 

49 repo: UserInvitationRepository, 

50 make_user_invitation_in_db, 

51 mailer: Mailer, 

52 recipients: Recipients, 

53 user_invitation_mail_template: MailTemplate, 

54): 

55 """Test when a user invitation is already sent.""" 

56 user_invitation = await make_user_invitation_in_db() 

57 user_invitation = user_invitation.mail_sent() 

58 await repo.update(user_invitation) 

59 

60 command = MailUserInvitationCommand(uuid=str(user_invitation.uuid)) 

61 with pytest.raises(UnprocessableException): 

62 await MailUserInvitation( 

63 repo, mailer, recipients, user_invitation_mail_template 

64 ).execute(command)