X-Git-Url: http://git.veekun.com/zzz-pokedex.git/blobdiff_plain/8ef0bb09928c7103794416e5d10896fce355ed2d..a7c3a96a07c76ede868bdcdf27c60ac527f0f556:/pokedex/tests/test_schema.py diff --git a/pokedex/tests/test_schema.py b/pokedex/tests/test_schema.py index 63f48ce..88ee1e5 100644 --- a/pokedex/tests/test_schema.py +++ b/pokedex/tests/test_schema.py @@ -7,6 +7,7 @@ from sqlalchemy.orm.session import Session from sqlalchemy.ext.declarative import declarative_base from pokedex.db import tables, markdown +from pokedex.db.multilang import create_translation_table def test_variable_names(): """We want pokedex.db.tables to export tables using the class name""" @@ -46,22 +47,21 @@ def test_i18n_table_creation(): __singlename__ = 'foo' id = Column(Integer, primary_key=True, nullable=False) - FooText = tables.create_translation_table('foo_text', Foo, - _language_class=Language, + FooText = create_translation_table('foo_text', Foo, + language_class=Language, name = Column(String(100)), ) - # TODO move this to the real code - class DurpSession(Session): + class FauxSession(Session): def execute(self, clause, params=None, *args, **kwargs): if not params: params = {} params.setdefault('_default_language', 'en') - return super(DurpSession, self).execute(clause, params, *args, **kwargs) + return super(FauxSession, self).execute(clause, params, *args, **kwargs) # OK, create all the tables and gimme a session Base.metadata.create_all() - sess = sessionmaker(engine, class_=DurpSession)() + sess = sessionmaker(engine, class_=FauxSession)() # Create some languages and foos to bind together lang_en = Language(identifier='en') @@ -97,15 +97,22 @@ def test_i18n_table_creation(): foo = sess.query(Foo).params(_default_language='en').one() # Dictionary of language identifiers => names - assert foo.name_map['en'] == 'english' - assert foo.name_map['jp'] == 'nihongo' + assert foo.name_map[lang_en] == 'english' + assert foo.name_map[lang_jp] == 'nihongo' # Default language, currently English assert foo.name == 'english' sess.expire_all() - ### Test 2: joinedload on the default name should appear to work + ### Test 2: querying by default language name should work + foo = sess.query(Foo).filter_by(name='english').one() + + assert foo.name == 'english' + + sess.expire_all() + + ### Test 3: joinedload on the default name should appear to work # THIS SHOULD WORK SOMEDAY # .options(joinedload(Foo.name)) \ foo = sess.query(Foo) \ @@ -116,28 +123,28 @@ def test_i18n_table_creation(): sess.expire_all() - ### Test 3: joinedload on all the names should appear to work + ### Test 4: joinedload on all the names should appear to work # THIS SHOULD ALSO WORK SOMEDAY # .options(joinedload(Foo.name_map)) \ foo = sess.query(Foo) \ .options(joinedload(Foo.foo_text)) \ .one() - assert foo.name_map['en'] == 'english' - assert foo.name_map['jp'] == 'nihongo' + assert foo.name_map[lang_en] == 'english' + assert foo.name_map[lang_jp] == 'nihongo' sess.expire_all() - ### Test 4: Mutating the dict collection should work + ### Test 5: Mutating the dict collection should work foo = sess.query(Foo).one() - foo.name_map['en'] = 'different english' - foo.name_map['ru'] = 'new russian' + foo.name_map[lang_en] = 'different english' + foo.name_map[lang_ru] = 'new russian' sess.commit() - assert foo.name_map['en'] == 'different english' - assert foo.name_map['ru'] == 'new russian' + assert foo.name_map[lang_en] == 'different english' + assert foo.name_map[lang_ru] == 'new russian' def test_texts(): """Check DB schema for integrity of text columns & translations.