From 57a589fccdfa6ab3cec69dd44b35ee8917b63bd7 Mon Sep 17 00:00:00 2001 From: Kushal Agrawal Date: Mon, 16 Apr 2018 13:51:28 +0530 Subject: [PATCH] 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 --- glare/engine.py | 3 + .../tests/functional/test_sample_artifact.py | 62 +++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/glare/engine.py b/glare/engine.py index 5c4c45f..1dddd8f 100644 --- a/glare/engine.py +++ b/glare/engine.py @@ -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 diff --git a/glare/tests/functional/test_sample_artifact.py b/glare/tests/functional/test_sample_artifact.py index d496a1d..d51372d 100644 --- a/glare/tests/functional/test_sample_artifact.py +++ b/glare/tests/functional/test_sample_artifact.py @@ -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"})