Exclude previously deleted documents from current revision

This PS adds a filter for deleted=False to rendered documents endpoint
so that previously deleted documents are excluded from current
revision.

Change-Id: Id45786d680f2ada8c2a27d2b44a677eb6b14921d
This commit is contained in:
Felipe Monteiro 2017-11-24 18:13:55 +00:00
parent 8cc63164d2
commit 4658df815d
2 changed files with 50 additions and 3 deletions

View File

@ -53,8 +53,7 @@ class RevisionDocumentsResource(api_base.BaseResource):
filters['metadata.storagePolicy'] = ['cleartext']
if include_encrypted:
filters['metadata.storagePolicy'].append('encrypted')
# Never return deleted documents to user.
filters['deleted'] = False
filters['deleted'] = False # Never return deleted documents to user.
try:
documents = db_api.revision_get_documents(
@ -93,6 +92,7 @@ class RenderedDocumentsResource(api_base.BaseResource):
filters = sanitized_params.copy()
filters['metadata.layeringDefinition.abstract'] = False
filters['metadata.storagePolicy'] = ['cleartext']
filters['deleted'] = False # Never return deleted documents to user.
if include_encrypted:
filters['metadata.storagePolicy'].append('encrypted')

View File

@ -20,12 +20,13 @@ from deckhand.control import buckets
from deckhand.control import revision_documents
from deckhand import errors
from deckhand import factories
from deckhand.tests import test_utils
from deckhand.tests.unit.control import base as test_base
class TestRenderedDocumentsController(test_base.BaseControllerTest):
def test_list_rendered_documents_exclude_abstract(self):
def test_list_rendered_documents_exclude_abstract_documents(self):
rules = {'deckhand:list_cleartext_documents': '@',
'deckhand:list_encrypted_documents': '@',
'deckhand:create_cleartext_documents': '@'}
@ -64,6 +65,52 @@ class TestRenderedDocumentsController(test_base.BaseControllerTest):
else:
self.assertEqual(value, rendered_documents[0][key])
def test_list_rendered_documents_exclude_deleted_documents(self):
"""Verifies that documents from previous revisions that have been
deleted are excluded from the current revision.
Put x in bucket a -> revision 1. Put y in bucket a -> revision 2.
Verify that only y is returned for revision 2.
"""
rules = {'deckhand:list_cleartext_documents': '@',
'deckhand:list_encrypted_documents': '@',
'deckhand:create_cleartext_documents': '@'}
self.policy.set_rules(rules)
# Create 1st document.
documents_factory = factories.DocumentFactory(2, [1, 1])
payload = documents_factory.gen_test({}, global_abstract=False)[1:]
payload[0]['metadata']['name'] = test_utils.rand_name('document')
resp = self.app.simulate_put(
'/api/v1.0/buckets/mop/documents',
headers={'Content-Type': 'application/x-yaml'},
body=yaml.safe_dump_all(payload))
self.assertEqual(200, resp.status_code)
# Create 2nd document (exclude 1st document).
payload = documents_factory.gen_test({}, global_abstract=False)[1:]
second_name = test_utils.rand_name('document')
payload[0]['metadata']['name'] = second_name
resp = self.app.simulate_put(
'/api/v1.0/buckets/mop/documents',
headers={'Content-Type': 'application/x-yaml'},
body=yaml.safe_dump_all([payload[0]]))
self.assertEqual(200, resp.status_code)
revision_id = list(yaml.safe_load_all(resp.text))[0]['status'][
'revision']
# Verify that only the 2nd is returned for revision_id=2.
resp = self.app.simulate_get(
'/api/v1.0/revisions/%s/rendered-documents' % revision_id,
headers={'Content-Type': 'application/x-yaml'})
self.assertEqual(200, resp.status_code)
rendered_documents = list(yaml.safe_load_all(resp.text))
self.assertEqual(1, len(rendered_documents))
self.assertEqual(second_name,
rendered_documents[0]['metadata']['name'])
self.assertEqual(2, rendered_documents[0]['status']['revision'])
class TestRenderedDocumentsControllerNegative(
test_base.BaseControllerTest):