def test_diff_remove_record_without_id(): left = Grid(columns={"a": {}, "b": {}}) left.append({"a": 1, "b": 2}) left.append({"a": 3, "b": 4}) right = Grid(columns={"a": {}, "b": {}}) right.append({"a": 5, "b": 6}) diff = grid_diff(left, right) assert len(diff) == 3 assert len(diff[0].keys()) == 3 assert diff[0]['a'] == 1 assert diff[0]['b'] == 2 assert diff[0]['remove_'] == REMOVE assert len(diff[1].keys()) == 3 assert diff[1]['a'] == 3 assert diff[1]['b'] == 4 assert diff[1]['remove_'] == REMOVE assert len(diff[2].keys()) == 2 assert diff[2]['a'] == 5 assert diff[2]['b'] == 6 assert 'id' not in diff.column assert 'a' in diff.column assert 'b' in diff.column assert grid_merge(left, diff) == right
def test_diff_version(): left = Grid(version=VER_2_0) right = Grid(version=VER_3_0) diff = grid_diff(left, right) assert diff.version == VER_3_0 assert grid_merge(left, diff) == right # A + (B - A) == B
def test_diff_with_same_grid(): left = Grid(columns={"a": {}, "b": {}}) left.append({"a": 1, "b": 2}) left.append({"a": 3, "b": 4}) diff = grid_diff(left, left) assert len(diff) == 0 assert grid_merge(left.copy(), diff) == left
def test_diff_cols_move_col(): left = Grid(columns={"a": {'m': 1}, "b": {'m': 2}, "c": {'m': 3}}) right = Grid(columns={"b": {'m': 2}, "a": {'m': 1}, "c": {'m': 3}}) diff = grid_diff(left, right) assert len(diff) == 0 assert len(diff.column) == 3 assert grid_merge(left, diff) == right
def test_diff_cols_remove_first_col(): left = Grid(columns={"a": {'m': 1}, "b": {'m': 2}, "c": {'m': 3}}) right = Grid(columns={"b": {'m': 4}, "c": {'m': 3}}) diff = grid_diff(left, right) assert len(diff) == 0 assert diff.column["a"] == {'remove_': REMOVE} assert len(diff.column) == 3 assert grid_merge(left, diff) == right
def test_diff_cols_remove_value_in_map(): left = Grid(columns={"a": {'m': 1, 'n': 2}, "b": {'m': 2}}) right = Grid(columns={"a": {'n': 2}, "b": {'m': 2}}) diff = grid_diff(left, right) assert len(diff) == 0 assert diff.column["a"] == {"m": REMOVE} assert diff.column["b"] == {} assert grid_merge(left, diff) == right
def test_diff_cols_add_value_in_map(): left = Grid(columns={"a": {'m': 1}, "b": {'m': 2}}) right = Grid(columns={"a": {'m': 1, 'n': 2}, "b": {'m': 4}}) diff = grid_diff(left, right) assert len(diff) == 0 assert diff.column["a"] == {"n": 2} assert diff.column["b"] == {"m": 4} assert grid_merge(left, diff) == right
def test_diff_metadata_remove_value(): left = Grid(metadata={"a": 1, "b": 2}) right = Grid(metadata={"b": 2}) diff = grid_diff(left, right) assert len(diff) == 0 assert diff.metadata["a"] == REMOVE assert "b" not in diff.metadata assert grid_merge(left, diff) == right
def test_diff_metadata_change_value(): left = Grid(metadata={"a": 1, "b": 2}) right = Grid(metadata={"a": 3, "b": 4}) diff = grid_diff(left, right) assert len(diff) == 0 assert diff.metadata["a"] == 3 assert diff.metadata["b"] == 4 assert grid_merge(left, diff) == right
def test_diff_metadata_add_value(): left = Grid(metadata={"a": 1, "b": 2}) right = Grid(metadata={"a": 1, "b": 2, "c": 3}) diff = grid_diff(left, right) assert len(diff) == 0 assert diff.metadata["c"] == 3 assert "a" not in diff.metadata assert "b" not in diff.metadata assert grid_merge(left, diff) == right
def test_diff_with_no_column(): left = Grid(columns={"a": {}, "b": {}}) left.append({"a": 1, "b": 2}) left.append({"a": 3, "b": 4}) left.append({"a": 1, "b": 2}) left.append({"a": 1, "b": 2}) right = Grid() diff = grid_diff(left, right) assert len(diff) == 4 assert grid_merge(left.copy(), diff) == right
def _try_diff(): while True: try: orig_grid = gen_random_grid() delta_grid = gen_diff(orig_grid) _validate_grid(orig_grid) _validate_grid(delta_grid) diff = grid_diff(orig_grid, delta_grid) _validate_grid(diff) apply = grid_merge(orig_grid.copy(), diff) _validate_grid(apply) assert apply == delta_grid return except RefuseRemove: pass
def test_diff_same_record_without_id_in_source(): left = Grid(columns={"a": {}, "b": {}}) left.append({"a": 1, "b": 2}) left.append({"a": 1, "b": 2}) left.append({"a": 3, "b": 4}) right = Grid(columns={"a": {}, "b": {}}) right.append({"a": 1, "b": 2}) right.append({"a": 3, "b": 4}) right.append({"a": 3, "b": 4}) diff = grid_diff(left, right) assert len(diff) == 2 assert diff[0]['remove_'] is REMOVE assert diff[1] == {"a": 3, "b": 4} assert grid_merge(left, diff) == right
def test_diff_same_record_with_empty_map(): left = Grid(columns={"a": {}, "b": {}}) left.append({}) left.append({}) left.append({"a": 3, "b": 4}) right = Grid(columns={"a": {}, "b": {}}) right.append({}) right.append({"a": 3, "b": 4}) right.append({"a": 3, "b": 4}) assert left != right diff = grid_diff(left, right) assert len(diff) == 2 assert diff[0]['remove_'] is REMOVE assert diff[1] == {"a": 3, "b": 4} assert grid_merge(left, diff) == right
def test_diff_remove_value_with_id(): left = Grid(columns={"id": {}, "a": {}, "b": {}}) left.append({"id": Ref("my_id"), "a": 1, "b": 2}) right = Grid(columns={"id": {}, "a": {}, "b": {}}) right.append({"id": Ref("my_id"), "a": 3}) diff = grid_diff(left, right) assert len(diff) == 1 assert len(diff[0].keys()) == 3 assert diff[0]['id'] == Ref("my_id") assert diff[0]['a'] == 3 assert diff[0]['b'] == REMOVE assert 'id' in diff.column assert 'a' in diff.column assert 'b' in diff.column assert grid_merge(left, diff) == right