[Refactor] Creates Transform interface
Moves categorizer into transform module. Puts the categorizer under unit tests.
This commit is contained in:
parent
9582d570b4
commit
b9b38db99a
@ -4,7 +4,6 @@ import pickle
|
||||
import webbrowser
|
||||
|
||||
from pfbudget.common.types import Operation
|
||||
from pfbudget.core.categorizer import Categorizer
|
||||
from pfbudget.db.client import DbClient
|
||||
from pfbudget.db.model import (
|
||||
Bank,
|
||||
@ -28,6 +27,7 @@ from pfbudget.db.model import (
|
||||
from pfbudget.extract.nordigen import NordigenClient, NordigenCredentialsManager
|
||||
from pfbudget.extract.parsers import parse_data
|
||||
from pfbudget.extract.psd2 import PSD2Extractor
|
||||
from pfbudget.transform.categorizer import Categorizer
|
||||
|
||||
|
||||
class Manager:
|
||||
|
||||
10
pfbudget/transform/transform.py
Normal file
10
pfbudget/transform/transform.py
Normal file
@ -0,0 +1,10 @@
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import Sequence
|
||||
|
||||
from pfbudget.db.model import Transaction
|
||||
|
||||
|
||||
class Transformer(ABC):
|
||||
@abstractmethod
|
||||
def transform(self, _: Sequence[Transaction]) -> Sequence[Transaction]:
|
||||
raise NotImplementedError
|
||||
11
tests/mocks/categories.py
Normal file
11
tests/mocks/categories.py
Normal file
@ -0,0 +1,11 @@
|
||||
from decimal import Decimal
|
||||
|
||||
from pfbudget.db.model import Category, CategoryRule
|
||||
|
||||
category_null = Category("null", None, set())
|
||||
|
||||
category_cat1 = Category(
|
||||
"cat#1",
|
||||
None,
|
||||
{CategoryRule(None, None, "desc#1", None, None, None, Decimal(0), "cat#1")},
|
||||
)
|
||||
52
tests/test_transform.py
Normal file
52
tests/test_transform.py
Normal file
@ -0,0 +1,52 @@
|
||||
from datetime import date
|
||||
from decimal import Decimal
|
||||
|
||||
import mocks.categories as mock
|
||||
|
||||
from pfbudget.db.model import (
|
||||
Bank,
|
||||
BankTransaction,
|
||||
CategorySelector,
|
||||
Selector_T,
|
||||
TransactionCategory,
|
||||
)
|
||||
from pfbudget.transform.categorizer import Categorizer
|
||||
|
||||
|
||||
class TestTransform:
|
||||
def test_nullify(self):
|
||||
transactions = [
|
||||
BankTransaction(
|
||||
date(2023, 1, 1), "", Decimal("-500"), Bank("Bank#1", "", "")
|
||||
),
|
||||
BankTransaction(
|
||||
date(2023, 1, 2), "", Decimal("500"), Bank("Bank#2", "", "")
|
||||
),
|
||||
]
|
||||
|
||||
for t in transactions:
|
||||
assert not t.category
|
||||
|
||||
categorizer = Categorizer()
|
||||
categorizer.rules(transactions, [mock.category_null], [])
|
||||
|
||||
for t in transactions:
|
||||
assert t.category == TransactionCategory(
|
||||
"null", CategorySelector(Selector_T.nullifier)
|
||||
)
|
||||
|
||||
def test_categorize(self):
|
||||
transactions = [
|
||||
BankTransaction(date(2023, 1, 1), "desc#1", Decimal("-10"), "Bank#1")
|
||||
]
|
||||
|
||||
for t in transactions:
|
||||
assert not t.category
|
||||
|
||||
categorizer = Categorizer()
|
||||
categorizer.rules(transactions, [mock.category_cat1], [])
|
||||
|
||||
for t in transactions:
|
||||
assert t.category == TransactionCategory(
|
||||
"cat#1", CategorySelector(Selector_T.rules)
|
||||
)
|
||||
Loading…
x
Reference in New Issue
Block a user