Coverage for dibbler / queries / adjust_interest.py: 100%

12 statements  

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

1from datetime import datetime 

2 

3from sqlalchemy.orm import Session 

4 

5from dibbler.models import Transaction, User 

6 

7# TODO: this type of transaction should be password protected. 

8# the password can be set as a string literal in the config file. 

9 

10 

11def adjust_interest( 

12 sql_session: Session, 

13 user: User, 

14 new_interest: int, 

15 time: datetime | None = None, 

16 message: str | None = None, 

17) -> Transaction: 

18 if new_interest < 0: 

19 raise ValueError("Interest rate cannot be negative") 

20 

21 if user.id is None: 

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

23 

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

25 

26 transaction = Transaction.adjust_interest( 

27 user_id=user.id, 

28 interest_rate_percent=new_interest, 

29 time=time, 

30 message=message, 

31 ) 

32 

33 sql_session.add(transaction) 

34 sql_session.commit() 

35 

36 return transaction