Coverage for dibbler / queries / adjust_balance.py: 25%

12 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-01-25 14:26 +0000

1from datetime import datetime 

2 

3from sqlalchemy.orm import Session 

4 

5from dibbler.models import Transaction, User 

6 

7 

8def adjust_balance( 

9 sql_session: Session, 

10 user: User, 

11 amount: int, 

12 time: datetime | None = None, 

13 message: str | None = None, 

14) -> Transaction: 

15 if user.id is None: 

16 raise ValueError("User must be persisted in the database.") 

17 

18 if amount == 0: 

19 raise ValueError("Amount must be non-zero.") 

20 

21 # TODO: verify time is not behind last transaction's time 

22 

23 transaction = Transaction.adjust_balance( 

24 user_id=user.id, 

25 amount=amount, 

26 time=time, 

27 message=message, 

28 ) 

29 

30 sql_session.add(transaction) 

31 sql_session.commit() 

32 

33 return transaction