コード例 #1
0
ファイル: test_manager.py プロジェクト: timbu/taal
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
コード例 #2
0
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
コード例 #3
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")
コード例 #4
0
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"
コード例 #5
0
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
コード例 #6
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")
コード例 #7
0
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
コード例 #8
0
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
コード例 #9
0
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'
コード例 #10
0
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'
コード例 #11
0
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 == {}
コード例 #12
0
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
コード例 #13
0
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)
コード例 #14
0
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'