jsonalchemy: add tests for using the json types in an sqlalchemy
context and make sure that the values returned are correctly returned and stored in the database
This commit is contained in:
parent
0e71efebfd
commit
f10e21cde9
1 changed files with 63 additions and 1 deletions
|
|
@ -21,7 +21,22 @@
|
|||
import pickle
|
||||
import pytest
|
||||
|
||||
from rhodecode.lib.jsonalchemy import MutationDict, MutationList
|
||||
from sqlalchemy import Column, String, create_engine
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
|
||||
from rhodecode.lib.jsonalchemy import (
|
||||
MutationDict, MutationList, MutationObj, JsonType)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def engine():
|
||||
return create_engine('sqlite://')
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def session(engine):
|
||||
return sessionmaker(bind=engine)()
|
||||
|
||||
|
||||
def test_mutation_dict_is_picklable():
|
||||
|
|
@ -30,12 +45,14 @@ def test_mutation_dict_is_picklable():
|
|||
loaded = pickle.loads(dumped)
|
||||
assert loaded == mutation_dict
|
||||
|
||||
|
||||
def test_mutation_list_is_picklable():
|
||||
mutation_list = MutationList(['a', 'b', 'c'])
|
||||
dumped = pickle.dumps(mutation_list)
|
||||
loaded = pickle.loads(dumped)
|
||||
assert loaded == mutation_list
|
||||
|
||||
|
||||
def test_mutation_dict_with_lists_is_picklable():
|
||||
mutation_dict = MutationDict({
|
||||
'key': MutationList(['values', MutationDict({'key': 'value'})])
|
||||
|
|
@ -43,3 +60,48 @@ def test_mutation_dict_with_lists_is_picklable():
|
|||
dumped = pickle.dumps(mutation_dict)
|
||||
loaded = pickle.loads(dumped)
|
||||
assert loaded == mutation_dict
|
||||
|
||||
|
||||
def test_mutation_types_with_nullable(engine, session):
|
||||
# TODO: dan: ideally want to make this parametrized python => sql tests eg:
|
||||
# (MutationObj, 5) => '5'
|
||||
# (MutationObj, {'a': 5}) => '{"a": 5}'
|
||||
# (MutationObj, None) => 'null' <- think about if None is 'null' or NULL
|
||||
|
||||
Base = declarative_base()
|
||||
|
||||
class DummyModel(Base):
|
||||
__tablename__ = 'some_table'
|
||||
name = Column(String, primary_key=True)
|
||||
json_list = Column(MutationList.as_mutable(JsonType('list')))
|
||||
json_dict = Column(MutationDict.as_mutable(JsonType('dict')))
|
||||
json_obj = Column(MutationObj.as_mutable(JsonType()))
|
||||
|
||||
Base.metadata.create_all(engine)
|
||||
|
||||
obj_nulls = DummyModel(name='nulls')
|
||||
obj_stuff = DummyModel(
|
||||
name='stuff', json_list=[1,2,3], json_dict={'a': 5}, json_obj=9)
|
||||
|
||||
session.add(obj_nulls)
|
||||
session.add(obj_stuff)
|
||||
session.commit()
|
||||
session.expire_all()
|
||||
|
||||
assert engine.execute(
|
||||
"select * from some_table where name = 'nulls';").first() == (
|
||||
(u'nulls', None, None, None)
|
||||
)
|
||||
ret_nulls = session.query(DummyModel).get('nulls')
|
||||
assert ret_nulls.json_list == []
|
||||
assert ret_nulls.json_dict == {}
|
||||
assert ret_nulls.json_obj is None
|
||||
|
||||
assert engine.execute(
|
||||
"select * from some_table where name = 'stuff';").first() == (
|
||||
(u'stuff', u'[1, 2, 3]', u'{"a": 5}', u'9')
|
||||
)
|
||||
ret_stuff = session.query(DummyModel).get('stuff')
|
||||
assert ret_stuff.json_list == [1, 2, 3]
|
||||
assert ret_stuff.json_dict == {'a': 5}
|
||||
assert ret_stuff.json_obj == 9
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue