Coverage for dibbler / queries / transfer.py: 20%

14 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-13 07:50 +0000

1from datetime import datetime 

2 

3from sqlalchemy.orm import Session 

4 

5from dibbler.models import Transaction, User 

6 

7 

8def transfer( 

9 sql_session: Session, 

10 from_user: User, 

11 to_user: User, 

12 amount: int, 

13 time: datetime | None = None, 

14 message: str | None = None, 

15) -> Transaction: 

16 if from_user.id is None: 

17 raise ValueError("From user must be persisted in the database.") 

18 

19 if to_user.id is None: 

20 raise ValueError("To user must be persisted in the database.") 

21 

22 if amount <= 0: 

23 raise ValueError("Amount must be positive.") 

24 

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

26 

27 transaction = Transaction.transfer( 

28 user_id=from_user.id, 

29 transfer_user_id=to_user.id, 

30 amount=amount, 

31 time=time, 

32 message=message, 

33 ) 

34 

35 sql_session.add(transaction) 

36 sql_session.commit() 

37 

38 return transaction