def test_translate_missing(self, session): translator = Translator(Translation, session, 'language') translatable = TranslatableString( context='context', message_id='message_id') translation = translator.translate(translatable) translation is None
def test_none_value(self, session): translator = Translator(Translation, session, SAMPLE_LANGUAGE) translatable = TranslatableString(context=SAMPLE_CONTEXT, message_id=SAMPLE_MESSAGE_ID) translation = translator.translate(translatable) translation is None
def test_translate_structure(self, session): translation = Translation( context='context', message_id='message_id', language='language', value='translation') session.add(translation) session.commit() translator = Translator(Translation, session, 'language') translatable = TranslatableString( context='context', message_id='message_id') structure = { 'int': 1, 'str': 'str', 'list': [1, 'str', translatable], 'translatable': translatable, } translation = translator.translate(structure) assert translation == { 'int': 1, 'str': 'str', 'list': [1, 'str', 'translation'], 'translatable': 'translation', }
def test_use_most_frequent(session_cls): session_en = session_cls() translator_en = Translator(Translation, session_cls(), 'en') translator_en.bind(session_en) session_fr = session_cls() translator_fr = Translator(Translation, session_cls(), 'fr') translator_fr.bind(session_fr) def add_with_translation(en, fr): model = Model(name=en) session_en.add(model) session_en.commit() # translate into fr translatable = model.name translatable.pending_value = fr translator_fr.save_translation(translatable) model = Model(name='a') session_en.add(model) session_en.commit() add_with_translation('a', '1') translator_fr.suggest_translation(model.name, 'en', 'fr') == '1' add_with_translation('a', '2') add_with_translation('a', '2') translator_fr.suggest_translation(model.name, 'en', 'fr') == '2'
def test_none_value(self, session): translator = Translator(Translation, session, SAMPLE_LANGUAGE) translatable = TranslatableString( context=SAMPLE_CONTEXT, message_id=SAMPLE_MESSAGE_ID) translation = translator.translate(translatable) translation is None
def bound_session(request, session, session_cls): # importing at the module level messes up coverage from taal import Translator from tests.models import Translation translator = Translator(Translation, session_cls(), 'language') translator.bind(session) return session
def test_translate_missing_debug(self, session): translator = Translator( Translation, session, 'language', debug_output=True) translatable = TranslatableString( context='context', message_id='message_id') translation = translator.translate(translatable) assert "[Translation missing" in translation
def test_list_none(self, session): translator = Translator(Translation, session, '') translations = translator.list_translations([]) assert set(translations) == set([ ('animal', '1'), ('animal', '2'), ('animal', '3'), ])
def test_list_single(self, session): translator = Translator(Translation, session, '') translations = translator.list_translations(['en']) assert set(translations) == set([ ('animal', '1', 'Moose'), ('animal', '2', 'Monkey'), ('animal', '3', None), ])
def test_invalid_override(self): translator = Translator( Translation, session=None, language=None, ) with pytest.raises(ValueError) as exc: translator.translate(None, strategy='invalid ಠ_ಠ') assert 'Invalid strategy `invalid ಠ_ಠ`' in unicode(exc)
def test_list_missing_translations(self, session): translator = Translator(Translation, session, '') missing_translations = translator.list_missing_translations( ['en', 'sv']) assert set(missing_translations) == set([ ('animal', '2', 'Monkey', None), ('animal', '3', None, 'Flodhäst'), ])
def test_labeled_hierarchy(session, translating_type_heirarchy, bound_manager): manager = bound_manager translator = Translator(Translation, session, 'en') translator.bind(manager) hierarchy = manager.get_labeled_type_hierarchy() entity = next(hierarchy) assert isinstance(entity[1], TranslatableString)
def test_sentinel_value(self, session): translator = Translator(Translation, session, SAMPLE_LANGUAGE, strategy=Translator.strategies.SENTINEL_VALUE) translatable = TranslatableString(context=SAMPLE_CONTEXT, message_id=SAMPLE_MESSAGE_ID) translation = translator.translate(translatable) assert translation is TRANSLATION_MISSING
def test_list_translations(self, session): self.setup_(session) translator = Translator(Translation, session, '') translations = translator.list_translations(['en', 'sv']) assert set(translations) == set([ ('animal', '1', 'Moose', 'Älg'), ('animal', '2', 'Monkey', None), ('animal', '3', None, 'Flodhäst'), ])
def bound_manager(request, session_cls, translating_manager): # importing at the module level messes up coverage from taal import Translator from tests.models import Translation manager = translating_manager translator = Translator(Translation, session_cls(), 'language') translator.bind(manager) return manager
def test_debug_value(self, session): translator = Translator(Translation, session, SAMPLE_LANGUAGE, strategy=Translator.strategies.DEBUG_VALUE) translatable = TranslatableString(context=SAMPLE_CONTEXT, message_id=SAMPLE_MESSAGE_ID) translation = translator.translate(translatable) assert "[Translation missing" in translation
def test_basic(session_cls): session_en = session_cls() translator_en = Translator(Translation, session_cls(), 'en') translator_en.bind(session_en) session_fr = session_cls() translator_fr = Translator(Translation, session_cls(), 'fr') translator_fr.bind(session_fr) model = Model(name='name') session_en.add(model) session_en.commit() # translate into fr translatable = model.name translatable.pending_value = 'namë_fr' translator_fr.save_translation(translatable) new_model = Model(name='name') session_en.add(new_model) session_en.commit() suggestion = translator_fr.suggest_translation( new_model.name, from_language='en', to_language='fr') assert suggestion == 'namë_fr'
def test_set_from_other_model(session, session_cls): model1 = Model(name='name') model2 = RequiredModel(name=model1.name) translator = Translator(Translation, session_cls(), 'language') translator.bind(session) session.add(model1) session.add(model2) session.commit() assert translator.session.query( Translation.context).distinct().count() == 2
def test_unknown_language(session_cls): session = session_cls() translator = Translator(Translation, session_cls(), 'en') translator.bind(session) model = Model(name='name') session.add(model) session.commit() assert translator.suggest_translation(model.name, 'en', 'foo') is None assert translator.suggest_translation(model.name, 'foo', 'en') is None
def test_debug_value(self, session): translator = Translator( Translation, session, SAMPLE_LANGUAGE, strategy=Translator.strategies.DEBUG_VALUE ) translatable = TranslatableString( context=SAMPLE_CONTEXT, message_id=SAMPLE_MESSAGE_ID) translation = translator.translate(translatable) assert "[Translation missing" in translation
def test_sentinel_value(self, session): translator = Translator( Translation, session, SAMPLE_LANGUAGE, strategy=Translator.strategies.SENTINEL_VALUE ) translatable = TranslatableString( context=SAMPLE_CONTEXT, message_id=SAMPLE_MESSAGE_ID) translation = translator.translate(translatable) assert translation is TRANSLATION_MISSING
def test_custom_base_query(self, session): translator = Translator(Translation, session, '') default_query, _, _ = translator._normalised_translations(['en']) assert default_query.count() == 3 base_query = (session.query( Translation.context, Translation.message_id).filter( Translation.message_id < 3)).distinct() filtered_query, _, _ = translator._normalised_translations( ['en'], base_query=base_query) assert filtered_query.count() == 2
def test_dont_save_debug_translation(self, session): translator = Translator( Translation, session, 'language', debug_output=True) translatable = TranslatableString( context='context', message_id='message_id') debug_value = translator._get_debug_translation(translatable) translatable.pending_value = debug_value translator.save_translation(translatable) assert session.query(Translation).count() == 0
def test_save_translation(self, session, session_cls): translator = Translator(Translation, session, 'language') params = { 'context': 'context', 'message_id': 'message_id', } translatable = TranslatableString( pending_value='translation', **params) translator.save_translation(translatable) read_translatable = TranslatableString(**params) translation = translator.translate(read_translatable) assert translation == 'translation'
def test_query_values(session_cls): session1 = session_cls() session2 = session_cls() translator = Translator(Translation, session_cls(), 'language') translator.bind(session1) translator.bind(session2) model = Model(name='name') session1.add(model) session1.commit() (value, ) = session2.query(Model.name).one() assert value == PlaceholderValue
def test_query_values(session_cls): session1 = session_cls() session2 = session_cls() translator = Translator(Translation, session_cls(), 'language') translator.bind(session1) translator.bind(session2) model = Model(name='name') session1.add(model) session1.commit() (value,) = session2.query(Model.name).one() assert value == PlaceholderValue
def test_translate(self, session): translation = Translation( context='context', message_id='message_id', language='language', value='translation') session.add(translation) session.commit() translator = Translator(Translation, session, 'language') translatable = TranslatableString( context='context', message_id='message_id') translation = translator.translate(translatable) assert translation == 'translation'
def test_update_removed_values( session, bound_manager, change_instance_hierarchy): manager = bound_manager obj = change_instance_hierarchy retrieved = manager.deserialize(manager.serialize(obj)) new = manager.change_instance_type(retrieved, 'New', {'old': 'new'}) data = manager.serialize(new) translator = Translator(Translation, session, 'language') translated = translator.translate(data) assert translated['common'] == 'common' assert session.query(Translation).count() == 1
def test_dont_save_debug_translation(self, session): translator = Translator(Translation, session, SAMPLE_LANGUAGE, strategy=Translator.strategies.DEBUG_VALUE) translatable = TranslatableString(context=SAMPLE_CONTEXT, message_id=SAMPLE_MESSAGE_ID) debug_value = translator._get_debug_translation(translatable) translatable.pending_value = debug_value translator.save_translation(translatable) assert session.query(Translation).count() == 0
def test_delete_on_delete(self, session, session_cls): session1 = session_cls() translator1 = Translator(Translation, session_cls(), 'language1') translator1.bind(session1) session2 = session_cls() translator2 = Translator(Translation, session_cls(), 'language2') translator2.bind(session2) instance = Model(id=1) session.add(instance) session.commit() instance = session1.query(Model).get(1) instance.name = 'name' session1.commit() instance = session2.query(Model).get(1) instance.name = 'name' session2.commit() assert translator1.session.query(Translation).count() == 2 session2.delete(instance) assert translator1.session.query(Translation).count() == 2 session2.commit() translator1.session.rollback() # expire caches assert translator1.session.query(Translation).count() == 0
def test_update_unsetting_existing_values( session, bound_manager, change_instance_hierarchy): manager = bound_manager obj = change_instance_hierarchy retrieved = manager.deserialize(manager.serialize(obj)) new = manager.change_instance_type(retrieved, 'New', {'common': None}) data = manager.serialize(new) translator = Translator(Translation, session, 'language') translated = translator.translate(data) assert translated['common'] is None assert session.query(Translation).count() == 0
def test_custom_base_query(self, session): translator = Translator(Translation, session, '') default_query, _, _ = translator._normalised_translations(['en']) assert default_query.count() == 3 base_query = ( session .query(Translation.context, Translation.message_id) .filter(Translation.message_id < 3) ).distinct() filtered_query, _, _ = translator._normalised_translations( ['en'], base_query=base_query) assert filtered_query.count() == 2
def test_removing_translations(session, session_cls, first, second): translator = Translator(Translation, session_cls(), 'language') translator.bind(session) instance = Model(name=first) session.add(instance) session.commit() expected_count = 1 if is_translatable_value(first) else 0 assert translator.session.query(Translation).count() == expected_count instance.name = second session.commit() expected_count = 1 if is_translatable_value(second) else 0 assert translator.session.query(Translation).count() == expected_count
def test_merge_from_other_session(session_cls): """ regression test """ session1 = session_cls() session2 = session_cls() translator = Translator(Translation, session_cls(), 'language') translator.bind(session1) translator.bind(session2) instance = Model(name='name') session1.add(instance) session1.commit() session2.merge(instance) session2.commit()
def test_corrupt_db(session, session_cls): class CorruptModel(Base): __tablename__ = "models" id = Column(Integer, primary_key=True) name = Column(Text) identifier = Column(Text) corrupt = CorruptModel(id=1, name='name') session.add(corrupt) session.commit() translator = Translator(Translation, session_cls(), 'language') translator.bind(session) with pytest.raises(RuntimeError): session.query(Model).get(1)
def test_dont_save_debug_translation(self, session): translator = Translator( Translation, session, SAMPLE_LANGUAGE, strategy=Translator.strategies.DEBUG_VALUE ) translatable = TranslatableString( context=SAMPLE_CONTEXT, message_id=SAMPLE_MESSAGE_ID) debug_value = translator._get_debug_translation(translatable) translatable.pending_value = debug_value translator.save_translation(translatable) assert session.query(Translation).count() == 0
def test_load(session, session_cls, value): instance = Model(name=value) translator = Translator(Translation, session_cls(), 'language') translator.bind(session) session.add(instance) session.commit() pk = instance.id # make a new session session = session_cls() translator.bind(session) instance = session.query(Model).get(pk) if value is None: assert instance.name is None else: assert isinstance(instance.name, TranslatableString)
def test_get_translation(session, manager): manager.save(CustomFieldsEntity) item = CustomFieldsEntity() manager.save(item) create_translation_for_entity(session, manager, 'english', item, 'name', 'English name') context = get_context(manager, item, 'name') message_id = get_message_id(manager, item) translatable = TranslatableString(context=context, message_id=message_id) translator = Translator(Translation, session, 'english') translated_data = translator.translate(translatable) assert translated_data == 'English name'
def test_get_translation(session, manager): manager.save(CustomFieldsEntity) item = CustomFieldsEntity() manager.save(item) create_translation_for_entity( session, manager, 'english', item, 'name', 'English name') context = get_context(manager, item, 'name') message_id = get_message_id(manager, item) translatable = TranslatableString( context=context, message_id=message_id) translator = Translator(Translation, session, 'english') translated_data = translator.translate(translatable) assert translated_data == 'English name'
def test_case_sensitivity(self, session): translation_lower = Translation( context='context', message_id='message_id', language='language', value='translation') translation_upper = Translation( context='CONTEXT', message_id='message_id', language='language', value='translation') session.add(translation_upper) session.add(translation_lower) session.commit() translator = Translator(Translation, session, 'language') translatable = TranslatableString( context='context', message_id='message_id') # this shuold just not raise translator.translate(translatable)
def test_change_instance_type( bound_manager, session, change_instance_hierarchy): manager = bound_manager obj = change_instance_hierarchy assert session.query(Translation).count() == 2 retrieved = manager.deserialize(manager.serialize(obj)) new = manager.change_instance_type(retrieved, 'New') # make sure we reset our session session.rollback() data = manager.serialize(new) translator = Translator(Translation, session, 'language') translated = translator.translate(data) assert translated['common'] == 'common' assert session.query(Translation).count() == 1
def test_dynamic_language(): language = 'foo' def get_language(): return language translator = Translator(None, None, language=get_language) assert translator.language == 'foo' language = 'bar' assert translator.language == 'bar'
def test_savepoints(self, session, session_cls): translator = Translator(Translation, session_cls(), 'language') translator.bind(session) instance1 = Model(name='instance 1') session.add(instance1) session.begin_nested() instance2 = Model(name='instance 2') session.add(instance2) session.flush() assert session in flush_log assert len(flush_log[session]) == 2 session.rollback() session.commit() assert session.query(Model).count() == 1 assert translator.session.query(Translation).count() == 1
def test_load_and_save(translating_manager, session): translator = Translator(Translation, session, 'language') manager = translating_manager translator.bind(manager) manager.save(CustomFieldsEntity) obj = CustomFieldsEntity(id=1, identifier='foo', name='name') manager.save(obj) loaded = manager.serialize( manager.get(CustomFieldsEntity, id=1) ) loaded['identifier'] = 'bar' manager.save( manager.deserialize(loaded) ) reloaded = manager.get(CustomFieldsEntity, id=1) assert translator.translate( manager.serialize(reloaded)['name'] ) == 'name'
def test_deleting(session, session_cls): translator = Translator(Translation, session_cls(), 'language') translator.bind(session) instance = Model(name='name') assert translator.session.query(Translation).count() == 0 session.add(instance) assert translator.session.query(Translation).count() == 0 session.commit() assert translator.session.query(Translation).count() == 1 session.delete(instance) assert translator.session.query(Translation).count() == 1 session.rollback() assert translator.session.query(Translation).count() == 1 session.commit() assert translator.session.query(Translation).count() == 1 session.delete(instance) assert translator.session.query(Translation).count() == 1 session.commit() assert translator.session.query(Translation).count() == 0