Files
deb-python-sqlalchemy-utils/tests/test_translation_hybrid.py
Konsta Vesterinen 98b7800efe Change translation hybrid expr
Change translation hybrid expression to return the current translation if it exists
and otherwise fallback to default translation.
2015-05-05 13:10:54 +03:00

68 lines
2.2 KiB
Python

import sqlalchemy as sa
from pytest import mark
from sqlalchemy.dialects.postgresql import HSTORE
from sqlalchemy_utils import TranslationHybrid
from tests import TestCase
class TestTranslationHybrid(TestCase):
dns = 'postgres://postgres@localhost/sqlalchemy_utils_test'
def create_models(self):
class City(self.Base):
__tablename__ = 'city'
id = sa.Column(sa.Integer, primary_key=True)
name_translations = sa.Column(HSTORE)
name = self.translation_hybrid(name_translations)
locale = 'en'
self.City = City
def setup_method(self, method):
self.translation_hybrid = TranslationHybrid('fi', 'en')
TestCase.setup_method(self, method)
def test_using_hybrid_as_constructor(self):
city = self.City(name='Helsinki')
assert city.name_translations['fi'] == 'Helsinki'
def test_if_no_translation_exists_returns_none(self):
city = self.City()
assert city.name is None
def test_custom_default_value(self):
self.translation_hybrid.default_value = 'Some value'
city = self.City()
assert city.name is 'Some value'
def test_fall_back_to_default_translation(self):
city = self.City(name_translations={'en': 'Helsinki'})
self.translation_hybrid.current_locale = 'sv'
assert city.name == 'Helsinki'
def test_fallback_to_dynamic_locale(self):
self.translation_hybrid.current_locale = 'en'
self.translation_hybrid.default_locale = lambda self: self.locale
city = self.City(name_translations={})
city.locale = 'fi'
city.name_translations['fi'] = 'Helsinki'
assert city.name == 'Helsinki'
@mark.parametrize(
('name_translations', 'name'),
(
({'fi': 'Helsinki', 'en': 'Helsing'}, 'Helsinki'),
({'en': 'Helsinki'}, 'Helsinki'),
({'fi': 'Helsinki'}, 'Helsinki'),
({}, None),
)
)
def test_hybrid_as_an_expression(self, name_translations, name):
city = self.City(name_translations=name_translations)
self.session.add(city)
self.session.commit()
assert self.session.query(self.City.name).scalar() == name