def test_save(session_cls, bound_manager): manager = bound_manager def check_value(obj, attr_name, expected_value): context = get_context(manager, obj, attr_name) assert session_cls().query(Translation).filter_by( context=context).one().value == expected_value manager.save(CustomFieldsEntity) obj = CustomFieldsEntity(id=1, name="value", extra1="", extra2=None) manager.save(obj) assert session_cls().query(Translation).count() == 2 check_value(obj, "name", "value") check_value(obj, "extra1", "") obj.extra1 = "non-empty string" manager.save(obj) assert session_cls().query(Translation).count() == 2 check_value(obj, "extra1", "non-empty string") obj.extra2 = "not null" manager.save(obj) assert session_cls().query(Translation).count() == 3 check_value(obj, "extra2", "not null") obj.extra1 = "" manager.save(obj) assert session_cls().query(Translation).count() == 3 obj.extra2 = None manager.save(obj) assert session_cls().query(Translation).count() == 2
def test_delete(session_cls, bound_manager): manager = bound_manager manager.save(CustomFieldsEntity) obj1 = CustomFieldsEntity(id=1, name="value", extra1="", extra2=None) obj2 = CustomFieldsEntity(id=2, name="value", extra1="", extra2=None) manager.save(obj1) manager.save(obj2) assert session_cls().query(Translation).count() == 4 manager.delete(obj1) assert session_cls().query(Translation).count() == 2 manager.delete(obj2) assert session_cls().query(Translation).count() == 0
def test_cant_set_translatable_field_directly(manager): manager.save(CustomFieldsEntity) item = CustomFieldsEntity(name="foo") with pytest.raises(RuntimeError) as excinfo: manager.save(item) assert excinfo.value.message.startswith( "Cannot save directly to translated fields")
def test_field(manager): manager.save(CustomFieldsEntity) item = CustomFieldsEntity(id=0, identifier="foo") manager.save(item) retrieved = manager.get(CustomFieldsEntity, id=0) assert retrieved.identifier == "foo"
def test_delete(session_cls, bound_manager): manager = bound_manager manager.save(CustomFieldsEntity) item = CustomFieldsEntity(id=0, name="Name", extra1="", extra2=None) manager.save(item) # make a fresh session each time assert session_cls().query(Translation).count() == 2 manager.delete(item) assert session_cls().query(Translation).count() == 0
def test_load_unexpected_value(bound_manager): manager = bound_manager manager.save(CustomFieldsEntity) item = CustomFieldsEntity(id=1) manager.save(item) manager.query('MATCH (n:CustomFieldsEntity {id: 1}) SET n.name = "foo"') with pytest.raises(RuntimeError) as excinfo: manager.get(CustomFieldsEntity, id=1) assert excinfo.value.message.startswith( "Unexpected value found in placeholder column")
def test_context_message_id(session, manager): manager.save(CustomFieldsEntity) item = CustomFieldsEntity(id=0) manager.save(item) create_translation_for_entity(session, manager, 'english', item, 'name', 'English name') translation = session.query(Translation).one() expected_context = "taal:kaiso_field:CustomFieldsEntity:name" expected_message_id = json.dumps([("customfieldsentity", "id", 0)]) assert translation.context == expected_context assert translation.message_id == expected_message_id
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_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_collect_translatables(bound_manager): manager = bound_manager obj = CustomFieldsEntity(id=1, name="value", extra1="", extra2=None) manager.save(CustomFieldsEntity) manager.save(obj) translatables = collect_translatables(manager, obj) expected_values = { "name": PLACEHOLDER, "extra1": PLACEHOLDER, "extra2": None } for translatable in translatables: attr_name = translatable.context.split(":")[-1] expected_value = expected_values.pop(attr_name) assert translatable.context == get_context(manager, obj, attr_name) assert translatable.message_id == get_message_id(manager, obj) assert translatable.pending_value == expected_value assert expected_values == {}
def test_serialize(session, translating_type_heirarchy, bound_manager): manager = bound_manager translator = Translator(Translation, session, 'en') translator.bind(manager) obj = CustomFieldsEntity(id=1, name='English name', extra1="", extra2=None) manager.save(CustomFieldsEntity) manager.save(obj) retrieved = manager.get(CustomFieldsEntity, id=1) assert retrieved.name == PlaceholderValue assert retrieved.extra1 == PlaceholderValue assert retrieved.extra2 is None serialized = manager.serialize(retrieved) assert isinstance(serialized['name'], TranslatableString) assert isinstance(serialized['extra1'], TranslatableString) assert serialized['extra2'] is None translated = translator.translate(serialized) assert translated['name'] == 'English name' assert translated['extra1'] == "" assert translated['extra2'] is None
def test_missing_bind(session, translating_manager): manager = translating_manager manager.save(CustomFieldsEntity) obj = CustomFieldsEntity(id=1, name='English name') with pytest.raises(NoTranslatorRegistered): manager.save(obj)
def test_make_from_obj(manager): obj = CustomFieldsEntity(id=1) translatable = make_from_obj(manager, obj, 'name', 'English name') assert translatable.message_id == '[["customfieldsentity", "id", 1]]' assert translatable.pending_value == 'English name'