예제 #1
0
def test_get_custom_strategies_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_strategies(patches)

    assert expected_strategies == strategies
예제 #2
0
def test_get_custom_strategies():
    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_strategies(patches)

    assert expected_strategies == strategies
예제 #3
0
def test_get_custom_strategies_add_patches_in_the_root():
    patches = [
        Dictdiffer_Conflict(('add', '', [('a', '1')]),
                            ('add', '', [('a', '2')]))
    ]

    custom_ops = {'a': DictMergerOps.FALLBACK_KEEP_UPDATE}

    expected_strategies = ['s']

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

    strategies = m._get_custom_strategies(patches)

    assert expected_strategies == strategies
예제 #4
0
def test_get_custom_strategies_change_remove_patch():
    patches = [
        Dictdiffer_Conflict(('change', 'a.b', ('1', '2')),
                            ('remove', '', [('a', {
                                'b': '1'
                            })]))
    ]

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

    expected_strategies = ['s']

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

    strategies = m._get_custom_strategies(patches)

    assert expected_strategies == strategies
예제 #5
0
def test_get_custom_strategies_mixed_patches_with_nested_changes():
    patches = [
        Dictdiffer_Conflict(('change', 'a.b', ('1', '2')),
                            ('change', 'a.b', ('1', '3')))
    ]

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

    expected_strategies = ['s']

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

    strategies = m._get_custom_strategies(patches)

    assert expected_strategies == strategies
예제 #6
0
def test_get_custom_strategies_mixed_patches_with_list():
    patches = [
        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_strategies = ['f']

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

    strategies = m._get_custom_strategies(patches)

    assert expected_strategies == strategies
예제 #7
0
def test_get_custom_strategies_add_patches_very_nested():
    patches = [
        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']

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

    strategies = m._get_custom_strategies(patches)

    assert expected_strategies == strategies