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