fix pointers again

This commit is contained in:
evilchili
2025-09-29 23:10:33 -07:00
parent 5bddca974d
commit a9261321d2
4 changed files with 110 additions and 38 deletions
+20 -7
View File
@@ -1,3 +1,5 @@
from pprint import pprint as print
import pytest
from tinydb import Query
from tinydb.storages import MemoryStorage
@@ -44,16 +46,18 @@ def test_crud(db):
def test_pointers(db):
user = examples.User(name="john", email="john@foo")
players = examples.Group(name="players", members=[user], groups=[])
players = examples.Group(name="players", members=[user])
with pytest.raises(PointerReferenceError):
players = db.save(players)
user = db.save(user)
players = db.save(examples.Group(name="players", members=[user]))
players.members[0] = user
players = db.save(players)
assert players.members[0] == user
user = db.table('User').get(doc_id=user.doc_id)
assert user.groups.uid == players.uid
assert players.members[0].groups.uid == players.uid
def test_subgroups(db):
@@ -66,7 +70,11 @@ def test_subgroups(db):
starfleet = db.save(examples.Group(name="Starfleet", groups=[tos, snw]))
assert tos in starfleet.groups
assert snw in starfleet.groups
assert kirk in set([user for group in starfleet.groups for user in group.members])
unique_users = set([user for group in starfleet.groups for user in group.members])
kirk = db.table('User').get(doc_id=kirk.doc_id)
assert kirk in unique_users
def test_unique(db):
@@ -80,18 +88,23 @@ def test_unique(db):
def test_search(db):
# create crew members
kirk = db.save(examples.User(name="Captain James T. Kirk", email="riskybiznez@starfleet"))
bones = db.save(examples.User(name="Doctor McCoy", email="dammitjim@starfleet"))
ricky = db.save(examples.User(name="Ensign Ricky Redshirt", email="invincible@starfleet"))
# create the crew record
crew = db.save(examples.Group(name="Crew", members=[kirk, bones, ricky]))
User = Query()
captains = db.User.search(User.name.matches("Captain"))
assert len(captains) == 1
Group = Query()
crew = db.Group.search(Group.name == "Crew")[0]
# update the crew members so they have the backreference to crew
kirk = db.table('User').get(doc_id=kirk.doc_id)
bones = db.table('User').get(doc_id=bones.doc_id)
ricky = db.table('User').get(doc_id=ricky.doc_id)
assert kirk in crew.members
assert bones in crew.members
assert ricky in crew.members