diff options
Diffstat (limited to 'test/ext/test_mutable.py')
-rw-r--r-- | test/ext/test_mutable.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/test/ext/test_mutable.py b/test/ext/test_mutable.py index 81d2136e3..5b6d3e7cf 100644 --- a/test/ext/test_mutable.py +++ b/test/ext/test_mutable.py @@ -725,6 +725,49 @@ class MutableWithScalarJSONTest(_MutableDictTestBase, fixtures.MappedTest): self._test_non_mutable() +class MutableColumnCopyJSONTest(_MutableDictTestBase, fixtures.MappedTest): + + @classmethod + def define_tables(cls, metadata): + import json + from sqlalchemy.ext.declarative import declarative_base + + class JSONEncodedDict(TypeDecorator): + impl = VARCHAR(50) + + def process_bind_param(self, value, dialect): + if value is not None: + value = json.dumps(value) + + return value + + def process_result_value(self, value, dialect): + if value is not None: + value = json.loads(value) + return value + + MutableDict = cls._type_fixture() + + Base = declarative_base(metadata=metadata) + + class AbstractFoo(Base): + __abstract__ = True + + id = Column(Integer, primary_key=True, + test_needs_autoincrement=True) + data = Column(MutableDict.as_mutable(JSONEncodedDict)) + non_mutable_data = Column(JSONEncodedDict) + unrelated_data = Column(String(50)) + + class Foo(AbstractFoo): + __tablename__ = "foo" + + assert Foo.data.property.columns[0].type is not AbstractFoo.data.type + + def test_non_mutable(self): + self._test_non_mutable() + + class MutableListWithScalarPickleTest(_MutableListTestBase, fixtures.MappedTest): |