|
9 | 9 |
|
10 | 10 | from kayman.crud.account import ( |
11 | 11 | _verify_account_ids, |
12 | | - create_account, |
| 12 | + create_accounts, |
13 | 13 | read_account, |
14 | 14 | read_account_balance, |
15 | 15 | read_accounts, |
16 | 16 | update_account_balances, |
17 | 17 | update_accounts, |
18 | 18 | ) |
19 | | -from kayman.schemas.account import Account |
| 19 | +from kayman.schemas.account import Account, AccountCreate |
20 | 20 | from kayman.tests.factories import AccountFactory, TransactionFactory |
21 | 21 |
|
22 | 22 |
|
23 | | -def test_create_account(session: Session): |
24 | | - account = AccountFactory.build(balance=0) |
25 | | - db_account = create_account(session, account) |
| 23 | +def test_create_accounts_1_account(session: Session, session_2: Session): |
| 24 | + account = AccountCreate.model_validate(AccountFactory.build()) |
| 25 | + db_account = create_accounts(session, [account])[0] |
| 26 | + db_read_account = read_account(session_2, db_account.id) |
26 | 27 |
|
27 | | - assert db_account.id is not None |
28 | | - assert db_account.name == account.name |
29 | | - assert db_account.currency_code == account.currency_code |
30 | | - assert db_account.timezone == account.timezone |
31 | | - assert db_account.balance == 0 |
| 28 | + assert db_read_account.id is not None |
| 29 | + assert db_read_account.name == account.name |
| 30 | + assert db_read_account.currency_code == account.currency_code |
| 31 | + assert db_read_account.timezone == account.timezone |
| 32 | + assert db_read_account.balance == 0 |
| 33 | + |
| 34 | + |
| 35 | +def test_create_accounts_n_accounts(session: Session): |
| 36 | + accounts = [ |
| 37 | + AccountCreate.model_validate(account) |
| 38 | + for account in AccountFactory.build_batch(10) |
| 39 | + ] |
| 40 | + db_accounts = create_accounts(session, accounts) |
| 41 | + |
| 42 | + assert len(db_accounts) == 10 |
| 43 | + for db_account, account in zip(db_accounts, accounts, strict=True): |
| 44 | + assert db_account.id is not None |
| 45 | + assert db_account.name == account.name |
| 46 | + assert db_account.currency_code == account.currency_code |
| 47 | + assert db_account.timezone == account.timezone |
| 48 | + assert db_account.balance == 0 |
| 49 | + |
| 50 | + |
| 51 | +def test_create_accounts_empty(session: Session): |
| 52 | + assert create_accounts(session, []) == [] |
| 53 | + |
| 54 | + |
| 55 | +def test_create_accounts_no_commit(session: Session, session_2: Session): |
| 56 | + account = AccountCreate.model_validate(AccountFactory.build()) |
| 57 | + |
| 58 | + # The account should be created in the session |
| 59 | + session_account = create_accounts(session, [account], commit=False)[0] |
| 60 | + assert session_account.id is not None # Auto int should be set |
| 61 | + assert session_account.name == account.name |
| 62 | + assert session_account.currency_code == account.currency_code |
| 63 | + assert session_account.timezone == account.timezone |
| 64 | + assert session_account.balance == 0 |
| 65 | + |
| 66 | + # The account should not be visible to other sessions (yet) |
| 67 | + assert read_account(session_2, session_account.id) is None |
| 68 | + |
| 69 | + # Commit the account from main session |
| 70 | + session.commit() |
| 71 | + |
| 72 | + # The account should now be visible to other sessions |
| 73 | + session_2_account = read_account(session_2, session_account.id) |
| 74 | + assert session_2_account is not None |
| 75 | + assert session_2_account.id == session_account.id |
| 76 | + assert session_2_account.name == session_account.name |
| 77 | + assert session_2_account.currency_code == session_account.currency_code |
| 78 | + assert session_2_account.timezone == session_account.timezone |
| 79 | + assert session_2_account.balance == 0 |
32 | 80 |
|
33 | 81 |
|
34 | 82 | def test_read_account(session: Session): |
|
0 commit comments