mirror of
https://github.com/simon987/hexlib.git
synced 2025-12-14 07:09:05 +00:00
Fix tests, add pydantic row support for PersistentState
This commit is contained in:
101
test/test_PydanticTable.py
Normal file
101
test/test_PydanticTable.py
Normal file
@@ -0,0 +1,101 @@
|
||||
import os
|
||||
from datetime import datetime
|
||||
from unittest import TestCase
|
||||
|
||||
from pydantic import BaseModel
|
||||
from pydantic.types import List
|
||||
|
||||
from hexlib.db import PersistentState
|
||||
|
||||
|
||||
class Point(BaseModel):
|
||||
x: int
|
||||
y: int
|
||||
|
||||
|
||||
class Polygon(BaseModel):
|
||||
points: List[Point] = []
|
||||
created_date: datetime
|
||||
|
||||
|
||||
class TestPydanticTable(TestCase):
|
||||
def tearDown(self) -> None:
|
||||
if os.path.exists("state.db"):
|
||||
os.remove("state.db")
|
||||
|
||||
def setUp(self) -> None:
|
||||
if os.path.exists("state.db"):
|
||||
os.remove("state.db")
|
||||
|
||||
def test_get_set(self):
|
||||
s = PersistentState()
|
||||
|
||||
val = Polygon(
|
||||
created_date=datetime(year=2000, day=1, month=1),
|
||||
points=[
|
||||
Point(x=1, y=2),
|
||||
Point(x=3, y=4),
|
||||
]
|
||||
)
|
||||
|
||||
s["a"]["1"] = val
|
||||
|
||||
self.assertEqual(s["a"]["1"].points[0].x, 1)
|
||||
self.assertEqual(s["a"]["1"].points[1].x, 3)
|
||||
self.assertEqual(s["a"]["1"].created_date.year, 2000)
|
||||
|
||||
def test_update(self):
|
||||
s = PersistentState()
|
||||
|
||||
val = Polygon(
|
||||
created_date=datetime(year=2000, day=1, month=1),
|
||||
points=[
|
||||
Point(x=1, y=2),
|
||||
Point(x=3, y=4),
|
||||
]
|
||||
)
|
||||
|
||||
s["a"]["1"] = val
|
||||
|
||||
self.assertEqual(s["a"]["1"].points[0].x, 1)
|
||||
|
||||
val.points[0].x = 2
|
||||
s["a"]["1"] = val
|
||||
self.assertEqual(s["a"]["1"].points[0].x, 2)
|
||||
|
||||
def test_sql(self):
|
||||
s = PersistentState()
|
||||
|
||||
s["b"]["1"] = Polygon(
|
||||
created_date=datetime(year=2000, day=1, month=1),
|
||||
points=[]
|
||||
)
|
||||
s["b"]["2"] = Polygon(
|
||||
created_date=datetime(year=2010, day=1, month=1),
|
||||
points=[]
|
||||
)
|
||||
|
||||
result = list(s["b"].sql(
|
||||
"WHERE json->>'created_date' LIKE '2000-%'"
|
||||
))
|
||||
|
||||
self.assertEqual(len(result), 1)
|
||||
self.assertEqual(result[0].created_date.year, 2000)
|
||||
|
||||
def test_iterate(self):
|
||||
s = PersistentState()
|
||||
|
||||
s["b"]["1"] = Polygon(
|
||||
created_date=datetime(year=2000, day=1, month=1),
|
||||
points=[]
|
||||
)
|
||||
s["b"]["2"] = Polygon(
|
||||
created_date=datetime(year=2010, day=1, month=1),
|
||||
points=[]
|
||||
)
|
||||
|
||||
result = list(s["b"])
|
||||
|
||||
self.assertEqual(len(result), 2)
|
||||
self.assertEqual(result[0].created_date.year, 2000)
|
||||
self.assertEqual(result[1].created_date.year, 2010)
|
||||
Reference in New Issue
Block a user