From ac54ba0f2d8df5a76b6852841b6b3321c0e6c0e2 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 8 Nov 2013 18:19:41 -0500 Subject: [PATCH] - add proof of concept for versioning, [ticket:2861] --- examples/versioning/test_versioning.py | 32 +++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/examples/versioning/test_versioning.py b/examples/versioning/test_versioning.py index c1d9c98783..ca70c9ac01 100644 --- a/examples/versioning/test_versioning.py +++ b/examples/versioning/test_versioning.py @@ -3,8 +3,9 @@ from sqlalchemy.ext.declarative import declarative_base from .history_meta import Versioned, versioned_session from sqlalchemy import create_engine, Column, Integer, String, ForeignKey from sqlalchemy.orm import clear_mappers, Session, deferred, relationship -from sqlalchemy.testing import AssertsCompiledSQL, eq_ +from sqlalchemy.testing import AssertsCompiledSQL, eq_, assert_raises from sqlalchemy.testing.entities import BasicEntity, ComparableEntity +from sqlalchemy.orm import exc as orm_exc engine = None @@ -93,6 +94,35 @@ class TestVersioning(TestCase, AssertsCompiledSQL): ] ) + def test_w_mapper_versioning(self): + class SomeClass(Versioned, self.Base, ComparableEntity): + __tablename__ = 'sometable' + + id = Column(Integer, primary_key=True) + name = Column(String(50)) + + SomeClass.__mapper__.version_id_col = SomeClass.__table__.c.version + + self.create_tables() + sess = self.session + sc = SomeClass(name='sc1') + sess.add(sc) + sess.commit() + + s2 = Session(sess.bind) + sc2 = s2.query(SomeClass).first() + sc2.name = 'sc1modified' + + sc.name = 'sc1modified_again' + sess.commit() + + eq_(sc.version, 2) + + assert_raises( + orm_exc.StaleDataError, + s2.flush + ) + def test_from_null(self): class SomeClass(Versioned, self.Base, ComparableEntity): __tablename__ = 'sometable' -- 2.47.3