add serialization, custom field types

This commit is contained in:
evilchili
2025-09-27 15:13:17 -07:00
parent 7e649ee6e0
commit f9ebb4a8d8
5 changed files with 116 additions and 28 deletions
+19 -16
View File
@@ -3,7 +3,7 @@ from tinydb.storages import MemoryStorage
from grung import examples
from grung.db import GrungDB
from grung.exceptions import UniqueConstraintError
from grung.exceptions import PointerReferenceError, UniqueConstraintError
@pytest.fixture
@@ -14,7 +14,7 @@ def db():
def test_crud(db):
user = examples.User(name="john", email="john@foo")
user = examples.User(name="john", number=23, email="john@foo")
assert user.uid
assert user._metadata.fields["uid"].unique
@@ -25,6 +25,7 @@ def test_crud(db):
# read back
assert db.User.get(doc_id=last_insert_id) == john_something
assert john_something.name == user.name
assert john_something.number == 23
assert john_something.email == user.email
assert john_something.uid == user.uid
@@ -35,21 +36,23 @@ def test_crud(db):
assert after_update == john_something
assert before_update != after_update
# pointers
players = examples.Group(name="players", users=[john_something])
players = db.save(players)
players.users[0]["name"] = "fnord"
db.save(players)
# modify records
players.users = []
db.save(players)
after_update = db.Group.get(doc_id=players.doc_id)
assert after_update.users == []
# delete
db.delete(players)
assert len(db.Group) == 0
db.delete(john_something)
assert len(db.User) == 0
def test_pointers(db):
user = examples.User(name="john", email="john@foo")
players = examples.Group(name="players", users=[user])
with pytest.raises(PointerReferenceError):
players = db.save(players)
user = db.save(user)
players.users[0] = user
players = db.save(players)
assert players.users[0] == user
def test_unique(db):