From 03dfeebf7aa0b6618200c0d96a001c1816410a26 Mon Sep 17 00:00:00 2001 From: ariannedee Date: Thu, 1 Oct 2020 19:22:12 -0700 Subject: [PATCH] Delete docs for form if file is missing from redis --- edivorce/apps/core/tests/test_api.py | 38 ++++++++++++++++++++++++++++ edivorce/apps/core/views/graphql.py | 4 +++ 2 files changed, 42 insertions(+) diff --git a/edivorce/apps/core/tests/test_api.py b/edivorce/apps/core/tests/test_api.py index 9eadff05..4a05e9df 100644 --- a/edivorce/apps/core/tests/test_api.py +++ b/edivorce/apps/core/tests/test_api.py @@ -276,6 +276,44 @@ class GraphQLAPITest(GraphQLTestCase): self.assertEqual(len(content['documents']), 1) self.assertEqual(content['documents'][0]['filename'], doc.filename) + def test_missing_redis_document_deletes_all_documents(self): + self._login() + + doc_1 = self._create_document() + doc_2 = self._create_document() + doc_3 = self._create_document() + another_doc = self._create_document(party_code=2) + + self.assertEqual(Document.objects.count(), 4) + + query = ''' + { + documents (docType: "MC", partyCode: 0) { + filename + } + }''' + response = self.query(query) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertResponseNoErrors(response) + + content = json.loads(response.content)['data'] + self.assertEqual(len(content['documents']), 3) + self.assertEqual(content['documents'][0]['filename'], doc_1.filename) + self.assertEqual(content['documents'][1]['filename'], doc_2.filename) + self.assertEqual(content['documents'][2]['filename'], doc_3.filename) + + # Delete file from Redis + doc_1.file.delete() + response = self.query(query) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertResponseNoErrors(response) + content = json.loads(response.content)['data'] + self.assertEqual(len(content['documents']), 0) + + # All files in for that doc_type/party_code/user were deleted + self.assertEqual(Document.objects.count(), 1) + self.assertEqual(Document.objects.first(), another_doc) + def test_update_metadata(self): doc_1 = self._create_document() doc_2 = self._create_document() diff --git a/edivorce/apps/core/views/graphql.py b/edivorce/apps/core/views/graphql.py index 318e6427..c72d1674 100644 --- a/edivorce/apps/core/views/graphql.py +++ b/edivorce/apps/core/views/graphql.py @@ -30,6 +30,10 @@ class Query(graphene.ObjectType): if info.context.user.is_anonymous: raise GraphQLError('Unauthorized') q = Document.objects.filter(bceid_user=info.context.user, **kwargs) + for doc in q: + if not doc.file_exists(): + q.delete() + return Document.objects.none() return q