65 lines
1.6 KiB
Python
65 lines
1.6 KiB
Python
import sys
|
|
from typing import List
|
|
|
|
import pytest
|
|
from tinydb.storages import MemoryStorage
|
|
|
|
from grung.db import GrungDB
|
|
from grung.types import Field, Record
|
|
|
|
|
|
class User(Record):
|
|
_fields = [Field("name"), Field("email", unique=True)]
|
|
|
|
|
|
class Group(Record):
|
|
_fields = [Field("name", unique=True), Field("users", List[User])]
|
|
|
|
|
|
@pytest.fixture
|
|
def db():
|
|
_db = GrungDB.with_schema(sys.modules[__name__], storage=MemoryStorage)
|
|
_db.create_table(User)
|
|
_db.create_table(Group)
|
|
yield _db
|
|
print(_db)
|
|
|
|
|
|
def test_crud(db):
|
|
user = 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 = 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
|