Coverage for src/tests/modules/identity/test_mail_user_recovery.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 testing mail_user_recovery."""
3from typing import AsyncGenerator
5import pytest
7from kwai_bc_identity.mail_user_recovery import (
8 MailUserRecovery,
9 MailUserRecoveryCommand,
10)
11from kwai_bc_identity.user_recoveries.user_recovery import UserRecoveryEntity
12from kwai_bc_identity.user_recoveries.user_recovery_db_repository import (
13 UserRecoveryDbRepository,
14)
15from kwai_bc_identity.user_recoveries.user_recovery_repository import (
16 UserRecoveryRepository,
17)
18from kwai_bc_identity.users.user import UserEntity
19from kwai_core.db.database import Database
20from kwai_core.domain.exceptions import UnprocessableException
21from kwai_core.domain.value_objects.timestamp import Timestamp
22from kwai_core.mail.mailer import Mailer
23from kwai_core.mail.recipient import Recipients
24from kwai_core.template.mail_template import MailTemplate
27pytestmark = [pytest.mark.db, pytest.mark.mail]
30@pytest.fixture(scope="module")
31def repo(database: Database) -> UserRecoveryRepository:
32 """Create a user recovery repository."""
33 return UserRecoveryDbRepository(database)
36@pytest.fixture(scope="module")
37async def user_recovery(
38 repo: UserRecoveryRepository, user: UserEntity
39) -> AsyncGenerator[UserRecoveryEntity, None]:
40 """Create a user recovery."""
41 user_recovery = UserRecoveryEntity(
42 expiration=Timestamp.create_with_delta(hours=2),
43 user=user,
44 )
45 entity = await repo.create(user_recovery)
46 yield entity
47 await repo.delete(entity)
50async def test_mail_user_recovery(
51 repo: UserRecoveryRepository,
52 user_recovery: UserRecoveryEntity,
53 mailer: Mailer,
54 recipients: Recipients,
55 recovery_mail_template: MailTemplate,
56):
57 """Test use case mail user recovery."""
58 command = MailUserRecoveryCommand(uuid=str(user_recovery.uuid))
59 updated_user_recovery = await MailUserRecovery(
60 repo,
61 mailer,
62 recipients,
63 recovery_mail_template,
64 ).execute(command)
66 assert updated_user_recovery.mailed is not None, "mailed should be set."
69async def test_mail_user_recovery_already_mailed(
70 repo: UserRecoveryRepository,
71 user_recovery: UserRecoveryEntity,
72 mailer: Mailer,
73 recipients: Recipients,
74 recovery_mail_template: MailTemplate,
75):
76 """Test when a user recovery is already mailed."""
77 command = MailUserRecoveryCommand(uuid=str(user_recovery.uuid))
78 with pytest.raises(UnprocessableException):
79 await MailUserRecovery(
80 repo,
81 mailer,
82 recipients,
83 recovery_mail_template,
84 ).execute(command)