Coverage for src/tests/fixtures/identity/tokens.py: 100%
51 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 token entities."""
3import pytest
5from kwai_bc_identity.tokens.access_token import AccessTokenEntity
6from kwai_bc_identity.tokens.access_token_db_repository import (
7 AccessTokenDbRepository,
8)
9from kwai_bc_identity.tokens.refresh_token import RefreshTokenEntity
10from kwai_bc_identity.tokens.refresh_token_db_repository import (
11 RefreshTokenDbRepository,
12)
13from kwai_bc_identity.tokens.token_identifier import TokenIdentifier
14from kwai_bc_identity.users.user_account import UserAccountEntity
15from kwai_core.db.uow import UnitOfWork
16from kwai_core.domain.value_objects.timestamp import Timestamp
19@pytest.fixture
20def make_access_token(make_user_account):
21 """A factory fixture for an access token."""
23 def _make_access_token(
24 identifier: TokenIdentifier | None = None,
25 expiration: Timestamp | None = None,
26 user_account: UserAccountEntity | None = None,
27 ) -> AccessTokenEntity:
28 return AccessTokenEntity(
29 identifier=identifier or TokenIdentifier.generate(),
30 expiration=expiration or Timestamp.create_with_delta(minutes=10),
31 user_account=user_account or make_user_account(),
32 )
34 return _make_access_token
37@pytest.fixture
38async def make_access_token_in_db(database, make_access_token, make_user_account_in_db):
39 """Factory fixture for creating an access token in database."""
40 created_entities = []
42 async def _make_access_token_in_db(
43 access_token: AccessTokenEntity | None = None,
44 user_account: UserAccountEntity | None = None,
45 ) -> AccessTokenEntity:
46 if access_token is None:
47 access_token = make_access_token(
48 user_account=user_account or await make_user_account_in_db()
49 )
50 repo = AccessTokenDbRepository(database)
52 async with UnitOfWork(database):
53 access_token = await repo.create(access_token)
55 created_entities.append(access_token)
57 return access_token
59 yield _make_access_token_in_db
61 repo = AccessTokenDbRepository(database)
62 for entity in created_entities:
63 async with UnitOfWork(database):
64 await repo.delete(entity)
67@pytest.fixture
68def make_refresh_token(make_access_token):
69 """A factory fixture for refresh token."""
71 def _make_refresh_token(
72 access_token: AccessTokenEntity | None = None,
73 identifier: TokenIdentifier | None = None,
74 expiration: Timestamp | None = None,
75 ) -> RefreshTokenEntity:
76 return RefreshTokenEntity(
77 access_token=access_token or make_access_token(),
78 identifier=identifier or TokenIdentifier.generate(),
79 expiration=expiration or Timestamp.create_with_delta(minutes=10),
80 )
82 return _make_refresh_token
85@pytest.fixture
86async def make_refresh_token_in_db(
87 database, make_access_token_in_db, make_refresh_token
88):
89 """Factory fixture for creating a refresh token in database."""
90 created_entities = []
92 async def _make_refresh_token_in_db(
93 refresh_token: RefreshTokenEntity | None = None,
94 ) -> RefreshTokenEntity:
95 if refresh_token is None:
96 refresh_token = make_refresh_token(
97 access_token=await make_access_token_in_db()
98 )
99 repo = RefreshTokenDbRepository(database)
101 async with UnitOfWork(database):
102 access_token = await repo.create(refresh_token)
104 created_entities.append(access_token)
106 return access_token
108 yield _make_refresh_token_in_db
110 repo = AccessTokenDbRepository(database)
111 for entity in created_entities:
112 async with UnitOfWork(database):
113 await repo.delete(entity)