Don't undelete when unlinking a deleted shot.
This commit is contained in:
@@ -244,6 +244,12 @@ def patch_shot(node_id, patch):
|
||||
node_setattr(node, key, value)
|
||||
else:
|
||||
# Remaining operations are for marking as 'in use' or 'not in use'.
|
||||
if node.get('_deleted', False) and op == u'unlink':
|
||||
# We won't undelete a node in response to an unlink request.
|
||||
return pillar.api.utils.jsonify({'_deleted': True,
|
||||
'_etag': node['_etag'],
|
||||
'_id': node['_id']})
|
||||
|
||||
used_in_edit = {
|
||||
u'unlink': False,
|
||||
u'relink': True,
|
||||
@@ -255,9 +261,6 @@ def patch_shot(node_id, patch):
|
||||
return pillar.api.utils.jsonify(r, status=status)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def assert_is_valid_patch(patch):
|
||||
"""Raises an exception when the patch isn't valid."""
|
||||
|
||||
|
@@ -355,6 +355,28 @@ class PatchShotTest(AbstractShotTest):
|
||||
dbnode = self.get(url, auth_token='token').json()
|
||||
self.assertFalse(dbnode['properties']['used_in_edit'])
|
||||
|
||||
@responses.activate
|
||||
def test_patch_unlink_deleted(self):
|
||||
"""Unlinking a deleted shot shouldn't undelete it.
|
||||
|
||||
We implement PATCH by changing then PUTing, which undeletes by default.
|
||||
"""
|
||||
|
||||
shot = self.create_shot()
|
||||
self.create_valid_auth_token(ctd.EXAMPLE_PROJECT_OWNER_ID, 'token')
|
||||
|
||||
url = '/api/nodes/%s' % shot._id
|
||||
|
||||
# Delete (and verify deletion)
|
||||
self.delete(url, auth_token='token',
|
||||
headers={'If-Match': shot['_etag']},
|
||||
expected_status=204)
|
||||
self.get(url, auth_token='token', expected_status=404)
|
||||
|
||||
patch = {'op': 'unlink'}
|
||||
self.patch(url, json=patch, auth_token='token')
|
||||
self.get(url, auth_token='token', expected_status=404)
|
||||
|
||||
@responses.activate
|
||||
def test_patch_relink(self):
|
||||
shot = self.create_shot()
|
||||
|
Reference in New Issue
Block a user