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_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_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_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_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_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_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_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_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 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_update_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) new_translator = Translator( Translation, session_cls(), 'language') new_translatable = TranslatableString( pending_value='new translation', **params) new_translator.save_translation(new_translatable) read_translatable = TranslatableString(**params) translation = translator.translate(read_translatable) assert translation == 'new translation' assert session.query(Translation).count() == 1
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_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_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_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_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_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_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_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_values(self, 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(name='name') session1.add(instance) session1.commit() pk = instance.id loaded = session2.query(Model).get(pk) assert loaded.name is not None instance.name = None session1.commit() session2.rollback() # expire isn't enough to trigger reloading assert loaded.name is None assert translator1.session.query(Translation).count() == 0
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_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_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_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_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_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'