f37ed700f6
The server tries to merge conflicting saves of the same layer. What it does: - use the `If-Unmodified-Since` header to check if changes happened to the stored data ; - Compare the incoming version with its reference version to get a diff. - Reapply the diff on top of the latest version. - If the merge is not possible, return a "422 Conflict" HTTP response. - If the merge worked, return the merged document, to be updated by the client.
67 lines
1.5 KiB
Python
67 lines
1.5 KiB
Python
import pytest
|
|
|
|
from umap.utils import merge_features
|
|
|
|
|
|
def test_adding_one_element():
|
|
assert merge_features(["A", "B"], ["A", "B", "C"], ["A", "B", "D"]) == [
|
|
"A",
|
|
"B",
|
|
"C",
|
|
"D",
|
|
]
|
|
|
|
|
|
def test_adding_elements():
|
|
assert merge_features(["A", "B"], ["A", "B", "C", "D"], ["A", "B", "E", "F"]) == [
|
|
"A",
|
|
"B",
|
|
"C",
|
|
"D",
|
|
"E",
|
|
"F",
|
|
]
|
|
# Order does not count
|
|
assert merge_features(["A", "B"], ["B", "C", "D", "A"], ["A", "B", "E", "F"]) == [
|
|
"B",
|
|
"C",
|
|
"D",
|
|
"A",
|
|
"E",
|
|
"F",
|
|
]
|
|
|
|
|
|
def test_adding_one_removing_one():
|
|
assert merge_features(["A", "B"], ["A", "C"], ["A", "B", "D"]) == [
|
|
"A",
|
|
"C",
|
|
"D",
|
|
]
|
|
|
|
|
|
def test_removing_same_element():
|
|
# No added element (otherwise we cannot know if "new" elements are old modified
|
|
# or old removed and new added).
|
|
assert merge_features(["A", "B", "C"], ["A", "B"], ["A", "B"]) == [
|
|
"A",
|
|
"B",
|
|
]
|
|
|
|
|
|
def test_removing_changed_element():
|
|
with pytest.raises(ValueError):
|
|
merge_features(["A", "B"], ["A", "C"], ["A"])
|
|
|
|
|
|
def test_changing_removed_element():
|
|
with pytest.raises(ValueError):
|
|
merge_features(["A", "B"], ["A"], ["A", "C"])
|
|
|
|
|
|
def test_changing_same_element():
|
|
with pytest.raises(ValueError):
|
|
merge_features(["A", "B"], ["A", "D"], ["A", "C"])
|
|
# Order does not count
|
|
with pytest.raises(ValueError):
|
|
merge_features(["A", "B", "C"], ["B", "D", "A"], ["A", "E", "B"])
|