3
0
Fork 0

feat: add way to declare related versions for history in MasterView

This commit is contained in:
Lance Edgar 2026-02-27 12:59:20 -06:00
parent 205a1f7a65
commit cba8e4774d
3 changed files with 121 additions and 7 deletions

View file

@ -2212,6 +2212,26 @@ class TestVersionedMasterView(VersionWebTestCase):
view = self.make_view()
self.assertEqual(view.get_version_grid_columns(), ["issued_at", "user"])
def test_get_version_joins(self):
view = self.make_view()
self.assertEqual(view.get_version_joins(), [])
def test_normalize_version_joins(self):
model = self.app.model
view = self.make_view()
joins = [(model.Person, "uuid", "person_uuid")]
with patch.object(view, "get_version_joins", return_value=joins):
normal = view.normalize_version_joins()
self.assertEqual(normal, joins)
self.assertEqual(normal, [(model.Person, "uuid", "person_uuid")])
joins = [model.Person]
with patch.object(view, "get_version_joins", return_value=joins):
normal = view.normalize_version_joins()
self.assertNotEqual(normal, joins)
self.assertEqual(normal, [(model.Person, "uuid", "uuid")])
def test_get_version_grid_data(self):
model = self.app.model
@ -2300,7 +2320,9 @@ class TestVersionedMasterView(VersionWebTestCase):
txncls = continuum.transaction_class(model.User)
vercls = continuum.version_class(model.User)
user = model.User(username="fred")
person = model.Person(full_name="Fred Flintstone")
self.session.add(person)
user = model.User(username="fred", person=person)
self.session.add(user)
self.session.commit()
@ -2314,11 +2336,21 @@ class TestVersionedMasterView(VersionWebTestCase):
with patch.object(mod.MasterView, "model_class", new=model.User):
with patch.object(mod.MasterView, "Session", return_value=self.session):
view = self.make_view()
# just one version if no joins are specified
versions = view.get_relevant_versions(txn, user)
self.assertEqual(len(versions), 1)
version = versions[0]
self.assertIsInstance(version, vercls)
# but two versions if we specify join
joins = [(model.Person, "uuid", "person_uuid")]
with patch.object(view, "get_version_joins", return_value=joins):
versions = view.get_relevant_versions(txn, user)
self.assertEqual(len(versions), 2)
types = sorted([v.__class__.__name__ for v in versions])
self.assertEqual(types, ["PersonVersion", "UserVersion"])
def test_view_version(self):
import sqlalchemy_continuum as continuum