Coverage for src/tests/fixtures/identity/users.py: 100%

34 statements  

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

1"""Module for defining factory fixtures for the user entities.""" 

2 

3import pytest 

4 

5from kwai_bc_identity.users.user import UserEntity 

6from kwai_bc_identity.users.user_account import UserAccountEntity 

7from kwai_bc_identity.users.user_account_db_repository import ( 

8 UserAccountDbRepository, 

9) 

10from kwai_core.db.uow import UnitOfWork 

11from kwai_core.domain.value_objects.email_address import EmailAddress 

12from kwai_core.domain.value_objects.name import Name 

13from kwai_core.domain.value_objects.password import Password 

14from kwai_core.domain.value_objects.unique_id import UniqueId 

15 

16 

17@pytest.fixture 

18def make_user(): 

19 """Factory fixture for creating a user entity.""" 

20 

21 def _make_user( 

22 uuid: UniqueId | None = None, 

23 name: Name | None = None, 

24 email: EmailAddress | None = None, 

25 ) -> UserEntity: 

26 return UserEntity( 

27 uuid=uuid or UniqueId.generate(), 

28 name=name or Name(first_name="Jigoro", last_name="Kano"), 

29 email=email or EmailAddress("jigoro.kano@kwai.com"), 

30 ) 

31 

32 return _make_user 

33 

34 

35@pytest.fixture 

36def make_user_account(make_user): 

37 """Factory fixture for creating a user account for testing.""" 

38 

39 def _make_user_account( 

40 password: Password | None = None, 

41 user: UserEntity | None = None, 

42 revoked: bool = False, 

43 ) -> UserAccountEntity: 

44 return UserAccountEntity( 

45 password=password or Password.create_from_string("Test1234"), 

46 user=user or make_user(), 

47 revoked=revoked, 

48 ) 

49 

50 return _make_user_account 

51 

52 

53@pytest.fixture 

54async def make_user_account_in_db(database, make_user_account): 

55 """Factory fixture for creating a user account in a database for testing.""" 

56 created_entities = [] 

57 

58 async def _make_user_account_in_db( 

59 user_account: UserAccountEntity | None = None, 

60 ) -> UserAccountEntity: 

61 user_account = user_account or make_user_account() 

62 

63 repo = UserAccountDbRepository(database) 

64 async with UnitOfWork(database): 

65 user_account = await repo.create(user_account) 

66 

67 created_entities.append(user_account) 

68 

69 return user_account 

70 

71 yield _make_user_account_in_db 

72 

73 repo = UserAccountDbRepository(database) 

74 for entity in created_entities: 

75 async with UnitOfWork(database): 

76 await repo.delete(entity)