grung-db/test/test_db.py

52 lines
1.3 KiB
Python

import pytest
from tinydb.storages import MemoryStorage
from grung import examples
from grung.db import GrungDB
@pytest.fixture
def db():
_db = GrungDB.with_schema(examples, storage=MemoryStorage)
yield _db
print(_db)
def test_crud(db):
user = examples.User(name="john", email="john@foo")
assert user.uid
assert user._metadata.fields["uid"].unique
# insert
john_something = db.save(user)
last_insert_id = john_something.doc_id
# read back
assert db.User.get(doc_id=last_insert_id) == john_something
assert john_something.name == user.name
assert john_something.email == user.email
assert john_something.uid == user.uid
# update
john_something.name = "james?"
before_update = db.User.get(doc_id=john_something.doc_id)
after_update = db.save(john_something)
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