def test_get_custom_strategy_change_remove_add_patches_multiple_changes():
    patches = [
        Dictdiffer_Conflict(
            ('change', 'a.c', ('2', '4')),
            ('remove', '', [('a', {'c': '2', 'b': '1'})])
        ),
        Dictdiffer_Conflict(
            ('change', 'a.b', ('1', '3')),
            ('remove', '', [('a', {'c': '2', 'b': '1'})])
        ),
        Dictdiffer_Conflict(
            ('add', 'a', [('d', '5')]),
            ('remove', '', [('a', {'c': '2', 'b': '1'})])
        ),
        Dictdiffer_Conflict(
            ('add', 'a', [('z', '7')]),
            ('remove', '', [('a', {'c': '2', 'b': '1'})])
        )
    ]

    custom_ops = {
        'a': DictMergerOps.FALLBACK_KEEP_UPDATE
    }

    expected_strategies = ['s', 's', 's', 's']

    m = SkipListsMerger(
        {}, {}, {},
        DictMergerOps.FALLBACK_KEEP_HEAD,
        custom_ops=custom_ops
    )

    strategies = [m._get_custom_strategy(patch) for patch in patches]

    assert expected_strategies == strategies
def test_get_custom_strategy_mixed_patches_with_nesting_after_list():
    patches = [
        Dictdiffer_Conflict(
            ('add', ['a', 'c', 0], [('d', '3')]),
            ('add', ['a', 'c', 0], [('d', '4')])
        ),
        Dictdiffer_Conflict(
            ('add', ['a', 'c', 0, 'b'], [('z', '5')]),
            ('add', ['a', 'c', 0, 'b'], [('z', '6')])
        )
    ]

    custom_ops = {
        'a': DictMergerOps.FALLBACK_KEEP_UPDATE,
        'a.c.b': DictMergerOps.FALLBACK_KEEP_HEAD
    }

    expected_strategies = ['s', 'f']

    m = SkipListsMerger(
        {}, {}, {},
        DictMergerOps.FALLBACK_KEEP_HEAD,
        custom_ops=custom_ops
    )

    strategies = [m._get_custom_strategy(patch) for patch in patches]

    assert expected_strategies == strategies
def test_get_custom_strategy_mixed_patches_with_nesting_after_list():
    patches = [
        Dictdiffer_Conflict(
            ('add', ['a', 'c', 0], [('d', '3')]),
            ('add', ['a', 'c', 0], [('d', '4')])
        ),
        Dictdiffer_Conflict(
            ('add', ['a', 'c', 0, 'b'], [('z', '5')]),
            ('add', ['a', 'c', 0, 'b'], [('z', '6')])
        )
    ]

    custom_ops = {
        'a': DictMergerOps.FALLBACK_KEEP_UPDATE,
        'a.c.b': DictMergerOps.FALLBACK_KEEP_HEAD
    }

    expected_strategies = ['s', 'f']

    m = SkipListsMerger(
        {}, {}, {},
        DictMergerOps.FALLBACK_KEEP_HEAD,
        custom_ops=custom_ops
    )

    strategies = [m._get_custom_strategy(patch) for patch in patches]

    assert expected_strategies == strategies
def test_get_custom_strategy_mixed_patches():
    patches = [
        Dictdiffer_Conflict(
            ('change', 'b', ('1', '2')),
            ('remove', '', [('b', '1')])
        ),
        Dictdiffer_Conflict(
            ('add', '', [('a', '1')]),
            ('add', '', [('a', 'd')])
        )
    ]

    custom_ops = {
        'b': DictMergerOps.FALLBACK_KEEP_UPDATE,
        'a': DictMergerOps.FALLBACK_KEEP_UPDATE
    }

    expected_strategies = ['s', 's']

    m = SkipListsMerger(
        {}, {}, {},
        DictMergerOps.FALLBACK_KEEP_HEAD,
        custom_ops=custom_ops
    )

    strategies = [m._get_custom_strategy(patch) for patch in patches]

    assert expected_strategies == strategies
def test_get_custom_strategy_mixed_patches():
    patches = [
        Dictdiffer_Conflict(
            ('change', 'b', ('1', '2')),
            ('remove', '', [('b', '1')])
        ),
        Dictdiffer_Conflict(
            ('add', '', [('a', '1')]),
            ('add', '', [('a', 'd')])
        )
    ]

    custom_ops = {
        'b': DictMergerOps.FALLBACK_KEEP_UPDATE,
        'a': DictMergerOps.FALLBACK_KEEP_UPDATE
    }

    expected_strategies = ['s', 's']

    m = SkipListsMerger(
        {}, {}, {},
        DictMergerOps.FALLBACK_KEEP_HEAD,
        custom_ops=custom_ops
    )

    strategies = [m._get_custom_strategy(patch) for patch in patches]

    assert expected_strategies == strategies
def test_get_custom_strategy_change_remove_add_patches_multiple_changes():
    patches = [
        Dictdiffer_Conflict(
            ('change', 'a.c', ('2', '4')),
            ('remove', '', [('a', {'c': '2', 'b': '1'})])
        ),
        Dictdiffer_Conflict(
            ('change', 'a.b', ('1', '3')),
            ('remove', '', [('a', {'c': '2', 'b': '1'})])
        ),
        Dictdiffer_Conflict(
            ('add', 'a', [('d', '5')]),
            ('remove', '', [('a', {'c': '2', 'b': '1'})])
        ),
        Dictdiffer_Conflict(
            ('add', 'a', [('z', '7')]),
            ('remove', '', [('a', {'c': '2', 'b': '1'})])
        )
    ]

    custom_ops = {
        'a': DictMergerOps.FALLBACK_KEEP_UPDATE
    }

    expected_strategies = ['s', 's', 's', 's']

    m = SkipListsMerger(
        {}, {}, {},
        DictMergerOps.FALLBACK_KEEP_HEAD,
        custom_ops=custom_ops
    )

    strategies = [m._get_custom_strategy(patch) for patch in patches]

    assert expected_strategies == strategies
def test_get_custom_strategy_add_change_patches_very_nested():
    patches = [
        Dictdiffer_Conflict(
            ('change', 'a.b.c.d', ('1', '4')),
            ('change', 'a.b.c.d', ('1', '5'))
        ),
        Dictdiffer_Conflict(
            ('add', 'a.b.c', [('e', '2')]),
            ('add', 'a.b.c', [('e', '3')])
        )
    ]

    custom_ops = {
        'b': DictMergerOps.FALLBACK_KEEP_UPDATE,
        'a': DictMergerOps.FALLBACK_KEEP_UPDATE
    }

    expected_strategies = ['s', 's']

    m = SkipListsMerger(
        {}, {}, {},
        DictMergerOps.FALLBACK_KEEP_HEAD,
        custom_ops=custom_ops
    )

    strategies = [m._get_custom_strategy(patch) for patch in patches]

    assert expected_strategies == strategies
def test_get_custom_strategy_add_change_patches_very_nested():
    patches = [
        Dictdiffer_Conflict(
            ('change', 'a.b.c.d', ('1', '4')),
            ('change', 'a.b.c.d', ('1', '5'))
        ),
        Dictdiffer_Conflict(
            ('add', 'a.b.c', [('e', '2')]),
            ('add', 'a.b.c', [('e', '3')])
        )
    ]

    custom_ops = {
        'b': DictMergerOps.FALLBACK_KEEP_UPDATE,
        'a': DictMergerOps.FALLBACK_KEEP_UPDATE
    }

    expected_strategies = ['s', 's']

    m = SkipListsMerger(
        {}, {}, {},
        DictMergerOps.FALLBACK_KEEP_HEAD,
        custom_ops=custom_ops
    )

    strategies = [m._get_custom_strategy(patch) for patch in patches]

    assert expected_strategies == strategies
示例#9
0
def test_get_custom_strategy():
    patches = [
        Dictdiffer_Conflict(('change', 'p.foo', ('baa', 'bab')),
                            ('change', 'p.foo', ('baa', 'bac'))),
        Dictdiffer_Conflict(('change', 'p.spam', ('eg', 'egg')),
                            ('change', 'p.spam', ('eg', 'eggs'))),
        Dictdiffer_Conflict(('change', 'r.foo', ('baa', 'bab')),
                            ('change', 'r.foo', ('baa', 'bac'))),
        Dictdiffer_Conflict(('change', 'r.spam', ('eg', 'egg')),
                            ('change', 'r.spam', ('eg', 'eggs')))
    ]

    custom_ops = {
        'r': DictMergerOps.FALLBACK_KEEP_UPDATE,
        'p': DictMergerOps.FALLBACK_KEEP_UPDATE
    }

    expected_strategies = ['s', 's', 's', 's']

    m = SkipListsMerger({}, {}, {},
                        DictMergerOps.FALLBACK_KEEP_HEAD,
                        custom_ops=custom_ops)

    strategies = [m._get_custom_strategy(patch) for patch in patches]

    assert expected_strategies == strategies
示例#10
0
def test_get_custom_strategy_add_patch_in_the_root():
    patch = Dictdiffer_Conflict(('add', '', [('a', '1')]),
                                ('add', '', [('a', '2')]))

    custom_ops = {'a': DictMergerOps.FALLBACK_KEEP_UPDATE}

    expected_strategy = 's'

    m = SkipListsMerger({}, {}, {},
                        DictMergerOps.FALLBACK_KEEP_HEAD,
                        custom_ops=custom_ops)

    strategy = m._get_custom_strategy(patch)

    assert expected_strategy == strategy
示例#11
0
def test_get_custom_strategy_mixed_patches_with_nested_changes():
    patch = Dictdiffer_Conflict(('change', 'a.b', ('1', '2')),
                                ('change', 'a.b', ('1', '3')))

    custom_ops = {
        'a.b': DictMergerOps.FALLBACK_KEEP_UPDATE,
    }

    expected_strategy = 's'

    m = SkipListsMerger({}, {}, {},
                        DictMergerOps.FALLBACK_KEEP_HEAD,
                        custom_ops=custom_ops)

    strategy = m._get_custom_strategy(patch)

    assert expected_strategy == strategy
示例#12
0
def test_get_custom_strategy_change_remove_patch():
    patch = Dictdiffer_Conflict(('change', 'a.b', ('1', '2')),
                                ('remove', '', [('a', {
                                    'b': '1'
                                })]))

    custom_ops = {'a.b': DictMergerOps.FALLBACK_KEEP_UPDATE}

    expected_strategy = 's'

    m = SkipListsMerger({}, {}, {},
                        DictMergerOps.FALLBACK_KEEP_HEAD,
                        custom_ops=custom_ops)

    strategy = m._get_custom_strategy(patch)

    assert expected_strategy == strategy
示例#13
0
def test_get_custom_strategy_add_patch_very_nested():
    patch = Dictdiffer_Conflict(('add', 'a.b.c', [('e', '2')]),
                                ('add', 'a.b.c', [('e', '3')]))

    custom_ops = {
        'b': DictMergerOps.FALLBACK_KEEP_UPDATE,
        'a': DictMergerOps.FALLBACK_KEEP_UPDATE
    }

    expected_strategy = 's'

    m = SkipListsMerger({}, {}, {},
                        DictMergerOps.FALLBACK_KEEP_HEAD,
                        custom_ops=custom_ops)

    strategy = m._get_custom_strategy(patch)

    assert expected_strategy == strategy
示例#14
0
def test_get_custom_strategy_mixed_patch_with_list():
    patch = Dictdiffer_Conflict(('add', ['a', 'c', 0], [('b', '1')]),
                                ('add', ['a', 'c', 0], [('b', '2')]))

    custom_ops = {
        'a': DictMergerOps.FALLBACK_KEEP_UPDATE,
        'a.c.b': DictMergerOps.FALLBACK_KEEP_HEAD
    }

    expected_strategy = 'f'

    m = SkipListsMerger({}, {}, {},
                        DictMergerOps.FALLBACK_KEEP_HEAD,
                        custom_ops=custom_ops)

    strategy = m._get_custom_strategy(patch)

    assert expected_strategy == strategy
示例#15
0
def test_get_custom_strategy_add_patch_very_nested():
    patch = Dictdiffer_Conflict(
        ('add', 'a.b.c', [('e', '2')]),
        ('add', 'a.b.c', [('e', '3')]))

    custom_ops = {
        'b': DictMergerOps.FALLBACK_KEEP_UPDATE,
        'a': DictMergerOps.FALLBACK_KEEP_UPDATE
    }

    expected_strategy = 's'

    m = SkipListsMerger(
        {}, {}, {},
        DictMergerOps.FALLBACK_KEEP_HEAD,
        custom_ops=custom_ops
    )

    strategy = m._get_custom_strategy(patch)

    assert expected_strategy == strategy
示例#16
0
def test_get_custom_strategy_mixed_patches_with_nested_changes():
    patch = Dictdiffer_Conflict(
        ('change', 'a.b', ('1', '2')),
        ('change', 'a.b', ('1', '3'))
    )

    custom_ops = {
        'a.b': DictMergerOps.FALLBACK_KEEP_UPDATE,
    }

    expected_strategy = 's'

    m = SkipListsMerger(
        {}, {}, {},
        DictMergerOps.FALLBACK_KEEP_HEAD,
        custom_ops=custom_ops
    )

    strategy = m._get_custom_strategy(patch)

    assert expected_strategy == strategy
示例#17
0
def test_get_custom_strategy_change_remove_patch():
    patch = Dictdiffer_Conflict(
        ('change', 'a.b', ('1', '2')),
        ('remove', '', [('a', {'b': '1'})])
    )

    custom_ops = {
        'a.b': DictMergerOps.FALLBACK_KEEP_UPDATE
    }

    expected_strategy = 's'

    m = SkipListsMerger(
        {}, {}, {},
        DictMergerOps.FALLBACK_KEEP_HEAD,
        custom_ops=custom_ops
    )

    strategy = m._get_custom_strategy(patch)

    assert expected_strategy == strategy
示例#18
0
def test_get_custom_strategy_add_patch_in_the_root():
    patch = Dictdiffer_Conflict(
        ('add', '', [('a', '1')]),
        ('add', '', [('a', '2')])
    )

    custom_ops = {
        'a': DictMergerOps.FALLBACK_KEEP_UPDATE
    }

    expected_strategy = 's'

    m = SkipListsMerger(
        {}, {}, {},
        DictMergerOps.FALLBACK_KEEP_HEAD,
        custom_ops=custom_ops
    )

    strategy = m._get_custom_strategy(patch)

    assert expected_strategy == strategy
示例#19
0
def test_get_custom_strategy_mixed_patch_with_list():
    patch = Dictdiffer_Conflict(
        ('add', ['a', 'c', 0], [('b', '1')]),
        ('add', ['a', 'c', 0], [('b', '2')])
    )

    custom_ops = {
        'a': DictMergerOps.FALLBACK_KEEP_UPDATE,
        'a.c.b': DictMergerOps.FALLBACK_KEEP_HEAD
    }

    expected_strategy = 'f'

    m = SkipListsMerger(
        {}, {}, {},
        DictMergerOps.FALLBACK_KEEP_HEAD,
        custom_ops=custom_ops
    )

    strategy = m._get_custom_strategy(patch)

    assert expected_strategy == strategy
示例#20
0
def test_get_custom_strategy():
    patches = [
        Dictdiffer_Conflict(
            ('change', 'p.foo', ('baa', 'bab')),
            ('change', 'p.foo', ('baa', 'bac'))
        ),
        Dictdiffer_Conflict(
            ('change', 'p.spam', ('eg', 'egg')),
            ('change', 'p.spam', ('eg', 'eggs'))
        ),
        Dictdiffer_Conflict(
            ('change', 'r.foo', ('baa', 'bab')),
            ('change', 'r.foo', ('baa', 'bac'))
        ),
        Dictdiffer_Conflict(
            ('change', 'r.spam', ('eg', 'egg')),
            ('change', 'r.spam', ('eg', 'eggs'))
        )
    ]

    custom_ops = {
        'r': DictMergerOps.FALLBACK_KEEP_UPDATE,
        'p': DictMergerOps.FALLBACK_KEEP_UPDATE
    }

    expected_strategies = ['s', 's', 's', 's']

    m = SkipListsMerger(
        {}, {}, {},
        DictMergerOps.FALLBACK_KEEP_HEAD,
        custom_ops=custom_ops
    )

    strategies = [m._get_custom_strategy(patch) for patch in patches]

    assert expected_strategies == strategies