Adds Loader, DatabaseLoader and (Db)Client

Adds unit test to test interfaces.
This commit is contained in:
Luís Murta 2023-04-23 00:21:44 +01:00
parent 14131f50f9
commit 541295ef05
Signed by: satprog
GPG Key ID: 169EF1BBD7049F94
5 changed files with 72 additions and 0 deletions

11
pfbudget/db/client.py Normal file
View File

@ -0,0 +1,11 @@
from typing import Sequence
from pfbudget.db.model import Transaction
class Client:
def __init__(self, url: str) -> None:
self.url = url
def insert(self, transactions: Sequence[Transaction]) -> None:
raise NotImplementedError

View File

14
pfbudget/load/database.py Normal file
View File

@ -0,0 +1,14 @@
from typing import Sequence
from pfbudget.db.client import Client
from pfbudget.db.model import Transaction
from .load import Loader
class DatabaseLoader(Loader):
def __init__(self, client: Client) -> None:
self.client = client
def load(self, transactions: Sequence[Transaction]) -> None:
self.client.insert(transactions)

10
pfbudget/load/load.py Normal file
View File

@ -0,0 +1,10 @@
from abc import ABC, abstractmethod
from typing import Sequence
from pfbudget.db.model import Transaction
class Loader(ABC):
@abstractmethod
def load(self, transactions: Sequence[Transaction]) -> None:
raise NotImplementedError

37
tests/test_load.py Normal file
View File

@ -0,0 +1,37 @@
from datetime import date
from decimal import Decimal
from typing import Sequence
import pytest
from pfbudget.db.client import Client
from pfbudget.db.model import BankTransaction, Transaction
from pfbudget.load.database import DatabaseLoader
from pfbudget.load.load import Loader
class FakeDatabaseClient(Client):
def __init__(self, url: str) -> None:
super().__init__(url)
def insert(self, transactions: Sequence[Transaction]) -> None:
pass
@pytest.fixture
def loader() -> Loader:
url = "postgresql://user:pass@127.0.0.1:5432/db"
client = FakeDatabaseClient(url)
return DatabaseLoader(client)
class TestDatabaseLoad:
def test_empty_url(self):
_ = FakeDatabaseClient("")
def test_insert(self, loader: Loader):
transactions = [
BankTransaction(date(2023, 1, 1), "", Decimal("-500"), "Bank#1"),
BankTransaction(date(2023, 1, 2), "", Decimal("500"), "Bank#2"),
]
loader.load(transactions)