Пример #1
0
def test_op_test_nonexistent_member():
    """Should return False even if path does not exist."""
    patches = [{"op": "test", "path": "/10/20/foo", "value": "bar"}]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is None
    assert tested is False
Пример #2
0
def test_op_test_string_equal():
    """Should return True that two strings are equal."""
    patches = [{"op": "test", "path": "/2/baz/0/foo", "value": "apples"}]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is None
    assert tested is True
Пример #3
0
def test_op_test_wildcard():
    """Should find an element in the 'baz' list with the matching value."""
    patches = [{"op": "test", "path": "/2/baz/*/foo", "value": "grapes"}]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is None
    assert tested is True
Пример #4
0
def test_op_move_unchanged_on_nonexistent():
    """Should not raise an exception if moving a non-existent object member."""
    patches = [{"op": "move", "from": "/0/foo/four", "path": "/1/bar/four"}]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is False
    assert tested is None
Пример #5
0
def test_op_test_wildcard_not_found():
    """Should return False on not finding an element with the given value."""
    patches = [{"op": "test", "path": "/2/baz/*/bar", "value": "rocks"}]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is None
    assert tested is False
Пример #6
0
def test_op_remove_unchanged_on_nonexistent_member():
    """Should not raise an exception if referencing a non-existent leaf to remove."""
    patches = [{"op": "remove", "path": "/0/foo/four"}]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is False
    assert tested is None
Пример #7
0
def test_op_test_number_unequal():
    """Should return False that two numbers are unequal."""
    patches = [{"op": "test", "path": "/0/foo/one", "value": "bananas"}]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is None
    assert tested is False
Пример #8
0
def test_op_add_ignore_existing_value():
    """Should ignore an existing property with the same value."""
    patches = [{"op": "add", "path": "/1/bar/one", "value": 1}]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is False
    assert tested is None
    assert jp.obj[1]['bar']['one'] == 1
Пример #9
0
def test_op_replace_foo_three():
    """Should replace the value for the 'three' member in 'foo'."""
    patches = [{"op": "replace", "path": "/0/foo/three", "value": "booyah"}]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is True
    assert tested is None
    assert jp.obj[0]['foo']['three'] == 'booyah'
Пример #10
0
def test_op_add_foo_four():
    """Should add a `four` member to the first object."""
    patches = [{"op": "add", "path": "/0/foo/four", "value": 4}]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is True
    assert tested is None
    assert jp.obj[0]['foo']['four'] == 4
Пример #11
0
def test_op_add_replace_existing_value():
    """Should find an existing property and replace its value."""
    patches = [{"op": "add", "path": "/1/bar/three", "value": 10}]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is True
    assert tested is None
    assert jp.obj[1]['bar']['three'] == 10
Пример #12
0
def test_op_remove_foo_three():
    """Should remove the 'three' member from the first object."""
    patches = [{"op": "remove", "path": "/0/foo/three"}]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is True
    assert tested is None
    assert 'three' not in jp.obj[0]['foo']
Пример #13
0
def test_op_edit_fail_on_nonexistent_path_or_member():
    """Should raise an exception if any part of the referenced path does not exist (RFC 6902)."""
    patches = [{"op": "edit", "path": "/0/foo/fourNotExists", "value": 5}]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is True
    assert tested is None
    assert jp.obj[0]['foo']['fourNotExists'] == 5
Пример #14
0
def test_op_copy_foo_three_bar_four():
    """Should copy the 'three' member in 'foo' to the 'bar' object."""
    patches = [{"op": "copy", "from": "/0/foo/three", "path": "/1/bar/four"}]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is True
    assert tested is None
    assert jp.obj[0]['foo']['three'] == 3
    assert jp.obj[1]['bar']['four'] == 3
Пример #15
0
def test_op_move_foo_object_end_of_list():
    """Should move the 'three' member in 'foo' to the end of the 'baz' list."""
    patches = [{"op": "move", "from": "/0/foo/three", "path": "/2/baz/-"}]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is True
    assert tested is None
    assert jp.obj[0]['foo'].get('three', 'DUMMY VALUE') == 'DUMMY VALUE'
    assert jp.obj[2]['baz'][-1] == 3
Пример #16
0
def test_op_move_baz_list_foo():
    """Should move the 'baz' list of fruits to 'foo' object."""
    patches = [{"op": "move", "from": "/2/baz", "path": "/0/foo/fruits"}]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is True
    assert tested is None
    assert jp.obj[2].get('baz', 'DUMMY VALUE') == 'DUMMY VALUE'
    assert len(jp.obj[0]['foo']['fruits']) == 3
Пример #17
0
def test_op_move_foo_three_bar_four():
    """Should move the 'three' property from 'foo' to 'bar'."""
    patches = [{"op": "move", "from": "/0/foo/three", "path": "/1/bar/four"}]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is True
    assert tested is None
    assert jp.obj[0]['foo'].get('three', 'DUMMY VALUE') == 'DUMMY VALUE'
    assert jp.obj[1]['bar']['four'] == 3
Пример #18
0
def test_op_copy_baz_list_bar():
    """Should copy the 'baz' list of fruits to 'foo' object."""
    patches = [{"op": "copy", "from": "/2/baz", "path": "/0/foo/fruits"}]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is True
    assert tested is None
    assert len(jp.obj[2]['baz']) == 3
    assert len(jp.obj[0]['foo']['fruits']) == 3
Пример #19
0
def test_op_remove_baz_list_member():
    """Should remove the last fruit item from the 'baz' list."""
    patches = [{"op": "remove", "path": "/2/baz/2"}]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is True
    assert tested is None
    for obj in jp.obj[2]['baz']:
        assert obj['foo'] != 'bananas'
        assert obj['bar'] != 'potatoes'
Пример #20
0
def test_op_add_object_end_of_list():
    """should add a new last object to the 'baz' list."""
    patches = [{
        "op": "add",
        "path": "/2/baz/-",
        "value": {
            "foo": "raspberries",
            "bar": "blueberries"
        }
    }]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is True
    assert tested is None
    assert jp.obj[2]['baz'][-1] == patches[0]['value']
Пример #21
0
def test_op_test_multiple_tests():
    """Should return False if at least one test returns False."""
    patches = [{
        "op": "test",
        "path": "/0/foo/one",
        "value": 2
    }, {
        "op": "test",
        "path": "/1/bar/one",
        "value": 1
    }]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is None
    assert tested is False
Пример #22
0
def test_op_add_object_list():
    """Should add a new first object to the 'baz' list."""
    patches = [{
        "op": "add",
        "path": "/2/baz/0",
        "value": {
            "foo": "kiwis",
            "bar": "strawberries"
        }
    }]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is True
    assert tested is None
    assert jp.obj[2]['baz'][0] == patches[0]['value']
Пример #23
0
def test_op_test_list_equal():
    """Should return True that two lists are equal."""
    patches = [{
        "op": "add",
        "path": "/0/foo/compare",
        "value": [1, 2, 3]
    }, {
        "op": "test",
        "path": "/0/foo/compare",
        "value": [1, 2, 3]
    }]
    jp = JSONPatcher(sample_json, *patches)
    changed, tested = jp.patch()
    assert changed is True
    assert tested is True
Пример #24
0
def test_op_replace_fail_on_nonexistent_member():
    """Should raise an exception if replacing a non-existent object member."""
    patches = [{"op": "replace", "path": "/0/foo/four", "value": 4}]
    jp = JSONPatcher(sample_json, *patches)
    with pytest.raises(PathError):
        jp.patch()
Пример #25
0
def test_op_remove_fail_on_nonexistent_path():
    """Should raise an exception if referencing a non-existent tree to remove."""
    patches = [{"op": "remove", "path": "/0/qux/one"}]
    jp = JSONPatcher(sample_json, *patches)
    with pytest.raises(PathError):
        jp.patch()
Пример #26
0
def test_op_replace_fail_on_nonexistent_path_or_member():
    """Should raise an exception if any part of the referenced path does not exist (RFC 6902)."""
    patches = [{"op": "replace", "path": "/0/foo/four", "value": 4}]
    jp = JSONPatcher(sample_json, *patches)
    with pytest.raises(PathError):
        jp.patch()
Пример #27
0
def test_op_move_fail_on_nonexistent():
    """Should raise an exception if moving a non-existent object member."""
    patches = [{"op": "move", "from": "/0/foo/four", "path": "/1/bar/four"}]
    jp = JSONPatcher(sample_json, *patches)
    with pytest.raises(PathError):
        jp.patch()
Пример #28
0
def test_op_copy_fail_on_nonexistent_member():
    """Should raise an exception when copying a non-existent member."""
    patches = [{"op": "copy", "from": "/1/bar/four", "path": "/0/foo/fruits"}]
    jp = JSONPatcher(sample_json, *patches)
    with pytest.raises(PathError):
        jp.patch()