Fix rule's values limits

They are supposed to catch also the explicit values, so the limits are
inclusive.
This commit is contained in:
Luís Murta 2024-01-21 11:23:53 +00:00
parent 95eff24418
commit a7b74237aa
Signed by: satprog
GPG Key ID: 169EF1BBD7049F94
2 changed files with 19 additions and 4 deletions

View File

@ -485,16 +485,16 @@ class Rule(Base):
valid = re.compile(self.regex, re.IGNORECASE) valid = re.compile(self.regex, re.IGNORECASE)
ops = ( ops = (
Rule.exists(self.start, lambda r: r < t.date), Rule.exists(self.start, lambda r: t.date >= r),
Rule.exists(self.end, lambda r: r > t.date), Rule.exists(self.end, lambda r: t.date <= r),
Rule.exists(self.description, lambda r: r == t.description), Rule.exists(self.description, lambda r: r == t.description),
Rule.exists( Rule.exists(
valid, valid,
lambda r: r.search(t.description) if t.description else False, lambda r: r.search(t.description) if t.description else False,
), ),
Rule.exists(self.bank, lambda r: r == t.bank), Rule.exists(self.bank, lambda r: r == t.bank),
Rule.exists(self.min, lambda r: r < t.amount), Rule.exists(self.min, lambda r: t.amount >= r),
Rule.exists(self.max, lambda r: r > t.amount), Rule.exists(self.max, lambda r: t.amount <= r),
) )
if all(ops): if all(ops):

View File

@ -5,6 +5,7 @@ import mocks.categories as mock
from pfbudget.db.model import ( from pfbudget.db.model import (
BankTransaction, BankTransaction,
Category,
CategoryRule, CategoryRule,
CategorySelector, CategorySelector,
TransactionCategory, TransactionCategory,
@ -110,3 +111,17 @@ class TestTransform:
for t in transactions: for t in transactions:
assert t.category == TransactionCategory("cat#1", CategorySelector.rules) assert t.category == TransactionCategory("cat#1", CategorySelector.rules)
def test_rule_limits(self):
transactions = [
BankTransaction(date.today(), "", Decimal("-60"), bank="Bank#1"),
BankTransaction(date.today(), "", Decimal("-120"), bank="Bank#1"),
]
cat = Category("cat")
cat.rules = [CategoryRule(min=-120, max=-60)]
for r in cat.rules:
r.name = cat.name
transactions = Categorizer(cat.rules).transform(transactions)
assert all(t.category.name == cat.name for t in transactions)