84 lines
2.2 KiB
Python
84 lines
2.2 KiB
Python
# mypy: disable-error-code=attr-defined
|
|
import unittest
|
|
import os
|
|
from pathlib import Path
|
|
from .model import (
|
|
Row,
|
|
Model,
|
|
Datatype
|
|
)
|
|
|
|
|
|
class TestRow(unittest.TestCase):
|
|
def setUp(self) -> None:
|
|
return super().setUp()
|
|
|
|
def tearDown(self) -> None:
|
|
return super().tearDown()
|
|
|
|
def test_init(self) -> None:
|
|
name, age = 'Mary', 14
|
|
row = Row(name=name, age=age)
|
|
result = row.values()
|
|
self.assertEqual(result, (name, age))
|
|
|
|
|
|
class TestModel(unittest.TestCase):
|
|
def setUp(self) -> None:
|
|
self.base_dir = Path(__file__).parent
|
|
self.name = 'testdb'
|
|
self.db = Model(
|
|
self.name,
|
|
self.base_dir,
|
|
name=Datatype.STR,
|
|
age=Datatype.INT,
|
|
)
|
|
self.db.init()
|
|
return super().setUp()
|
|
|
|
def tearDown(self) -> None:
|
|
os.remove(self.db.path)
|
|
return super().tearDown()
|
|
|
|
def test_init(self) -> None:
|
|
self.assertTrue(os.path.exists(self.db.path))
|
|
|
|
def test_save(self) -> None:
|
|
name, age = 'John', 14
|
|
self.db.save(Row(name=name, age=age))
|
|
self.db.get(name=name, age=age) # This must not raise an Exception
|
|
|
|
with self.assertRaises(ValueError):
|
|
self.db.save(Row(name='test'))
|
|
|
|
def test_delete(self) -> None:
|
|
name, age = 'John', 14
|
|
self.db.save(Row(name=name, age=age))
|
|
self.db.delete(name=name, age=age)
|
|
self.assertEqual(len(tuple(self.db.fetch_all())), 0)
|
|
|
|
def test_edit(self) -> None:
|
|
name, age = 'John', 14
|
|
self.db.save(Row(name=name, age=age))
|
|
r = self.db.get(name=name, age=age)
|
|
r.name = 'Mary'
|
|
self.db.edit(r)
|
|
self.assertEqual(len(tuple(self.db.fetch_all())), 1)
|
|
self.db.get(name='Mary', age=age) # This should not raise an exception
|
|
|
|
def test_filter(self) -> None:
|
|
data = (
|
|
('John', 14),
|
|
('Mary', 14),
|
|
('Mary', 15),
|
|
)
|
|
|
|
for i in data:
|
|
self.db.save(Row(name=i[0], age=i[1]))
|
|
|
|
age = 14
|
|
filtered = self.db.filter(age=age)
|
|
data = list(filtered) # type: ignore
|
|
self.assertTrue(all(i.age == age for i in data)) # type: ignore
|
|
self.assertEqual(len(data), 2)
|