Move Operation bug fix in update API

updating the value of source location in move operation
as part of artifact update.

Change-Id: Ic6912fa9c714762e38ba01793a7a8da1a70a12ba
Closes-bug: #1743971
This commit is contained in:
Kushal Agrawal 2018-04-16 13:51:28 +05:30
parent 37b31018dd
commit 57a589fccd
2 changed files with 65 additions and 0 deletions

View File

@ -208,6 +208,9 @@ class Engine(object):
old_val = getattr(af, field_name)
setattr(af, field_name, af_dict[field_name])
if operation.operation.get("op") == "move":
source_field = operation.from_path
setattr(af, source_field, af_dict[source_field])
new_val = getattr(af, field_name)
if new_val == old_val:
# No need to save value to db if it's not changed

View File

@ -2181,6 +2181,68 @@ class TestUpdate(base.TestArtifact):
url = '/sample_artifact/%s' % art1['id']
self.patch(url=url, data=data, status=400)
# data add tags and metadata to artifact
data = [{'op': 'add',
'path': '/tags/0',
'value': 'tag1'},
{'op': 'add',
'path': '/tags/1',
'value': 'tag2'},
{'op': 'add',
'path': '/metadata/meta1',
'value': 'value1'}]
url = '/sample_artifact/%s' % art1['id']
result = self.patch(url=url, data=data)
self.assertEqual(['tag1', 'tag2'], result['tags'])
self.assertEqual({'meta1': 'value1'}, result['metadata'])
# move tag to metadata
data = [{"op": "move",
"from": "/tags/0",
"path": "/metadata/meta2"}]
url = '/sample_artifact/%s' % art1['id']
result = self.patch(url=url, data=data)
self.assertEqual(['tag2'], result['tags'])
self.assertEqual({'meta1': 'value1', 'meta2': 'tag1'},
result['metadata'])
# move data from one dict to another one
data = [{"op": "move",
"from": "/dict_of_str/wrong_type",
"path": "/metadata/wrong_type"}]
url = '/sample_artifact/%s' % art1['id']
result = self.patch(url=url, data=data)
self.assertEqual({}, result['dict_of_str'])
self.assertEqual({'meta1': 'value1',
'meta2': 'tag1',
'wrong_type': '1'}, result['metadata'])
# move data from one data to another one having same key
data = [{"op": "add",
"path": "/dict_of_str/new_key",
"value": "new_value"},
{"op": "add",
"path": "/metadata/new_key",
"value": "new_value"}]
url = '/sample_artifact/%s' % art1['id']
result = self.patch(url=url, data=data)
self.assertEqual({"new_key": "new_value"}, result['dict_of_str'])
self.assertEqual({'meta1': 'value1',
'meta2': 'tag1',
'wrong_type': '1',
"new_key": "new_value"}, result['metadata'])
data = [{"op": "move",
"from": "/dict_of_str/new_key",
"path": "/metadata/new_key"}]
result = self.patch(url=url, data=data)
self.assertEqual({}, result['dict_of_str'])
self.assertEqual({'meta1': 'value1',
'meta2': 'tag1',
'wrong_type': '1',
"new_key": "new_value"}, result['metadata'])
def test_update_field_list(self):
art1 = self.create_artifact(data={"name": "art1"})