class DocumentCreateTest(TestCase): def setUp(self): self.category = CategoryFactory() self.user = UserFactory( email='*****@*****.**', password='******', is_superuser=True, category=self.category, ) self.create_url = reverse('document_create', args=[ self.category.organisation.slug, self.category.slug, ]) self.client.login(email=self.user.email, password='******') self.sample_path = join(settings.DJANGO_ROOT, 'documents', 'tests') def tearDown(self): """Wipe the media root directory after each test.""" media_root = settings.MEDIA_ROOT if os.path.exists(media_root): for f in os.listdir(media_root): file_path = os.path.join(media_root, f) if os.path.isfile(file_path) and file_path.startswith('/tmp/'): os.unlink(file_path) def test_creation_errors(self): """ Tests that a document can't be created without required fields. """ required_error = 'This field is required.' c = self.client r = c.get(self.create_url) self.assertEqual(r.status_code, 200) r = c.post(self.create_url, {}) self.assertEqual(r.status_code, 200) self.assertEqual(r.context['form'].errors, { 'title': [required_error], }) def test_creation_errors_with_files(self): """ Tests that a document can't be created with wrong files. """ extension_error = 'A PDF file is not allowed in this field.' c = self.client with open(join(self.sample_path, 'sample_doc_native.docx'), mode='rb') as native_file: with open(join(self.sample_path, 'sample_doc_pdf.pdf'), mode='rb') as pdf_file: r = c.post(self.create_url, { 'title': 'a title', 'native_file': pdf_file, 'pdf_file': native_file, 'docclass': 1, 'created_on': '2015-10-10', 'received_date': '2015-10-10', }) self.assertEqual(r.status_code, 200) self.assertEqual(r.context['revision_form'].errors, { 'native_file': [extension_error], }) def test_creation_success(self): """ Tests that a document can be created with required fields. """ original_number_of_document = Document.objects.all().count() c = self.client r = c.post(self.create_url, { 'title': 'a title', }) if r.status_code == 302: self.assertEqual( original_number_of_document + 1, Document.objects.all().count() ) else: # Debug purpose self.assertEqual(r.context['form'].errors, {}) def test_creation_with_empty_document_key(self): """ Tests that a document can be created with required fields. """ c = self.client doc_title = 'a glorious title' c.post(self.create_url, { 'title': doc_title, 'docclass': 1, 'created_on': '2015-10-10', 'received_date': '2015-10-10', }, follow=True) doc = Document.objects.all().order_by('-id')[0] self.assertEqual(doc.document_number, 'a-glorious-title') self.assertEqual(doc.document_key, 'a-glorious-title') self.assertIsNotNone(doc.created_by) # Check that creation was logged in audit trail activity = Activity.objects.latest('created_on') self.assertEqual(activity.verb, Activity.VERB_CREATED) self.assertEqual(activity.action_object.title, doc_title) self.assertEqual(activity.actor, self.user) def test_create_with_document_key(self): c = self.client doc_title = 'another title' c.post(self.create_url, { 'title': doc_title, 'document_number': 'Gloubi Boulga', 'docclass': 1, 'created_on': '2015-10-10', 'received_date': '2015-10-10', }, follow=True) doc = Document.objects.all().order_by('-id')[0] self.assertEqual(doc.document_number, 'Gloubi Boulga') self.assertEqual(doc.document_key, 'GLOUBI-BOULGA') # Check audit trail activity = Activity.objects.latest('created_on') self.assertEqual(activity.verb, Activity.VERB_CREATED) self.assertEqual(activity.action_object.title, doc_title) self.assertEqual(activity.actor, self.user) def test_creation_success_with_files(self): """ Tests that a document can be created with files. """ original_number_of_document = Document.objects.all().count() c = self.client with open(join(self.sample_path, 'sample_doc_native.docx'), mode='rb') as native_file: with open(join(self.sample_path, 'sample_doc_pdf.pdf'), mode='rb') as pdf_file: r = c.post(self.create_url, { 'title': 'a title', 'native_file': native_file, 'pdf_file': pdf_file, }) if r.status_code == 302: self.assertEqual( original_number_of_document + 1, Document.objects.all().count() ) else: # Debug purpose self.assertEqual(r.context['form'].errors, {}) def test_creation_redirect(self): """ Tests that a document creation is redirected to the item or another creation form (django-admin like). """ c = self.client r = c.post(self.create_url, { 'title': 'a title', 'docclass': 1, 'created_on': '2015-10-10', 'received_date': '2015-10-10', 'save-create': None, }, follow=True) self.assertEqual(r.redirect_chain, [(self.create_url, 302)]) r = c.post(self.create_url, { 'title': 'another title', 'docclass': 1, 'created_on': '2015-10-10', 'received_date': '2015-10-10', }, follow=True) self.assertEqual(r.redirect_chain, [ (self.category.get_absolute_url(), 302)] ) def test_document_related_documents(self): c = self.client related = [ DocumentFactory( category=self.category, document_key='FAC09001-FWF-000-HSE-REP-0004', metadata={ 'title': 'HAZOP related 1', }, revision={ 'status': 'STD', } ), DocumentFactory( category=self.category, document_key='FAC09001-FWF-000-HSE-REP-0005', metadata={ 'title': 'HAZOP related 2', }, revision={ 'status': 'STD', } ) ] c.post(self.create_url, { 'document_number': 'FAC09001-FWF-000-HSE-REP-0006', 'title': 'HAZOP report', 'docclass': 1, 'created_on': '2015-10-10', 'received_date': '2015-10-10', 'related_documents': [doc.pk for doc in related] }) document = Document.objects.get( document_key='FAC09001-FWF-000-HSE-REP-0006') metadata = document.metadata related = list(metadata.related_documents.all()) self.assertEqual(len(related), 2) related_titles = (related[0].metadata.title, related[1].metadata.title) self.assertTrue("HAZOP related 1" in related_titles) self.assertTrue("HAZOP related 2" in related_titles)
class DocumentEditTest(TestCase): def setUp(self): self.category = CategoryFactory() self.user = UserFactory( email='*****@*****.**', password='******', is_superuser=True, category=self.category, ) self.create_url = reverse('document_create', args=[ self.category.organisation.slug, self.category.slug, ]) self.client.login(email=self.user.email, password='******') self.sample_path = join(settings.DJANGO_ROOT, 'documents', 'tests') def test_edition_errors(self): """ Tests that a document can't be edited without required fields. """ required_error = 'This field is required.' doc = DocumentFactory( category=self.category, document_key='FAC09001-FWF-000-HSE-REP-0004', metadata={ 'title': 'HAZOP related 1', }, revision={ 'status': 'STD', } ) c = self.client edit_url = doc.get_edit_url() r = c.get(edit_url) self.assertEqual(r.status_code, 200) r = c.post(edit_url, {'document_number': doc.document_key}) self.assertEqual(r.status_code, 200) self.assertEqual(r.context['form'].errors, { 'title': [required_error], }) def test_edition_success(self): """ Tests that a document can be created with required fields. """ original_number_of_document = Document.objects.all().count() doc = DocumentFactory( category=self.category, document_key='FAC09001-FWF-000-HSE-REP-0004', metadata={ 'title': 'HAZOP related 1', }, revision={ 'status': 'STD', } ) c = self.client r = c.post(doc.get_edit_url(), { 'document_number': doc.document_key, 'title': 'a new title', }) if r.status_code == 302: self.assertEqual( original_number_of_document + 1, Document.objects.all().count() ) else: # Debug purpose self.assertEqual(r.context['form'].errors, {}) def test_edition_redirect(self): """ Tests that a document edition is redirected to the item or the list. """ doc = DocumentFactory( category=self.category, document_key='FAC09001-FWF-000-HSE-REP-0004', metadata={ 'title': 'HAZOP related 1', }, revision={ 'status': 'STD', } ) c = self.client r = c.post(doc.get_edit_url(), { 'document_number': doc.document_key, 'title': 'a new title', 'docclass': 1, 'created_on': '2015-10-10', 'received_date': '2015-10-10', 'save-view': 'View', }, follow=True) self.assertEqual(r.redirect_chain, [(doc.get_absolute_url(), 302)]) r = c.post(doc.get_edit_url(), { 'document_number': doc.document_key, 'title': 'a new new title', 'docclass': 1, 'created_on': '2015-10-10', 'received_date': '2015-10-10', }, follow=True) self.assertEqual(r.redirect_chain, [ (self.category.get_absolute_url(), 302)]) # Check that update was logged in audit trail activity = Activity.objects.latest('created_on') self.assertEqual(activity.verb, Activity.VERB_EDITED) self.assertEqual(activity.target.title, 'a new new title') self.assertEqual(activity.actor, self.user) def test_edition_updates_document_key(self): doc = DocumentFactory( category=self.category, document_key='FAC09001-FWF-000-HSE-REP-0004', metadata={ 'title': 'HAZOP related 1', }, revision={ 'status': 'STD', } ) c = self.client c.post(doc.get_edit_url(), { 'document_number': 'New Document Number', 'title': 'a new title', 'docclass': 1, 'created_on': '2015-10-10', 'received_date': '2015-10-10', 'save-view': 'View', }, follow=True) doc.refresh_from_db() self.assertEqual(doc.document_number, 'New Document Number') self.assertEqual(doc.document_key, 'NEW-DOCUMENT-NUMBER') metadata = doc.get_metadata() self.assertEqual(metadata.document_number, 'New Document Number') self.assertEqual(metadata.document_key, 'NEW-DOCUMENT-NUMBER')
class DocumentDeleteTests(TestCase): def setUp(self): self.category = CategoryFactory() self.user = UserFactory( email='*****@*****.**', password='******', is_superuser=True, category=self.category, ) self.client.login(email=self.user.email, password='******') self.doc_list_url = self.category.get_absolute_url() def test_delete_page_only_post(self): document = DocumentFactory(category=self.category) delete_url = reverse('document_delete', args=[ self.category.organisation.slug, self.category.slug, document.document_key ]) res = self.client.get(delete_url) self.assertEqual(res.status_code, 405) def test_delete_document(self): document = DocumentFactory(category=self.category) document_str = str(document) delete_url = reverse('document_delete', args=[ self.category.organisation.slug, self.category.slug, document.document_key ]) res = self.client.post(delete_url) self.assertRedirects(res, self.category.get_absolute_url()) # Check that deletion was logged in audit trail activity = Activity.objects.latest('created_on') self.assertEqual(activity.verb, Activity.VERB_DELETED) self.assertEqual(activity.action_object_str, document_str) self.assertEqual(activity.actor, self.user) res = self.client.post(delete_url) self.assertEqual(res.status_code, 404) metadata = DemoMetadata.objects.filter(document=document) self.assertEqual(metadata.count(), 0) revisions = DemoMetadataRevision.objects.filter(metadata=metadata) self.assertEqual(revisions.count(), 0) def test_cannot_revise_document_in_review(self): document = DocumentFactory( category=self.category, document_key='FAC09001-FWF-000-HSE-REP-0004', revision={ 'status': 'STD', 'review_start_date': '2014-04-04' }) delete_url = reverse('document_delete', args=[ self.category.organisation.slug, self.category.slug, document.document_key ]) revision = document.latest_revision self.assertTrue(revision.is_under_review) res = self.client.post(delete_url) self.assertEqual(res.status_code, 403) try: document = Document.objects.get(document_key=document.document_key) except: self.fail('Document was deleted') def test_simple_user_cannot_delete_document(self): user = UserFactory( email='*****@*****.**', password='******', is_superuser=False, category=self.category, ) self.client.login(email=user.email, password='******') document = DocumentFactory(category=self.category) delete_url = reverse('document_delete', args=[ self.category.organisation.slug, self.category.slug, document.document_key ]) res = self.client.post(delete_url) self.assertEqual(res.status_code, 403)
class DocumentRevisionDeleteTests(TestCase): def create_doc(self, nb_revisions=1): doc = DocumentFactory(category=self.category) meta = doc.get_metadata() for rev in range(2, nb_revisions + 1): MetadataRevisionFactory(metadata=meta, revision=rev) url = reverse('document_revision_delete', args=[ self.category.organisation.slug, self.category.slug, doc.document_key ]) return doc, url def setUp(self): self.category = CategoryFactory() self.user = UserFactory( email='*****@*****.**', password='******', is_superuser=True, category=self.category, ) self.client.login(email=self.user.email, password='******') self.doc_list_url = self.category.get_absolute_url() def test_delete_page_only_accepts_post_requests(self): doc, url = self.create_doc() res = self.client.get(url) self.assertEqual(res.status_code, 405) def test_delete_single_revision_is_not_allowed(self): """Latest revision cannot be delete if this is the only revision.""" doc, url = self.create_doc() res = self.client.post(url) self.assertEqual(res.status_code, 403) def test_cannot_delete_revision_in_review(self): doc, url = self.create_doc(nb_revisions=5) rev = doc.get_latest_revision() rev.leader = self.user rev.start_review() self.assertTrue(rev.is_under_review) res = self.client.post(url) self.assertEqual(res.status_code, 403) def test_delete_latest_revision(self): doc, url = self.create_doc(nb_revisions=5) doc.refresh_from_db() self.assertEqual(doc.get_all_revisions().count(), 5) self.assertEqual(doc.current_revision, 5) self.client.post(url) doc.refresh_from_db() self.assertEqual(doc.get_all_revisions().count(), 4) self.assertEqual(doc.current_revision, 4) self.client.post(url) doc.refresh_from_db() self.assertEqual(doc.get_all_revisions().count(), 3) self.assertEqual(doc.current_revision, 3)
class DocumentEditTest(TestCase): def setUp(self): self.category = CategoryFactory() self.user = UserFactory( email='*****@*****.**', password='******', is_superuser=True, category=self.category, ) self.create_url = reverse('document_create', args=[ self.category.organisation.slug, self.category.slug, ]) self.client.login(email=self.user.email, password='******') self.sample_path = join(settings.DJANGO_ROOT, 'documents', 'tests') def test_edition_errors(self): """ Tests that a document can't be edited without required fields. """ required_error = u'This field is required.' doc = DocumentFactory(category=self.category, document_key='FAC09001-FWF-000-HSE-REP-0004', metadata={ 'title': u'HAZOP related 1', }, revision={ 'status': 'STD', }) c = self.client edit_url = doc.get_edit_url() r = c.get(edit_url) self.assertEqual(r.status_code, 200) r = c.post(edit_url, {'document_number': doc.document_key}) self.assertEqual(r.status_code, 200) self.assertEqual(r.context['form'].errors, { 'title': [required_error], }) def test_edition_success(self): """ Tests that a document can be created with required fields. """ original_number_of_document = Document.objects.all().count() doc = DocumentFactory(category=self.category, document_key='FAC09001-FWF-000-HSE-REP-0004', metadata={ 'title': u'HAZOP related 1', }, revision={ 'status': 'STD', }) c = self.client r = c.post(doc.get_edit_url(), { 'document_number': doc.document_key, 'title': u'a new title', }) if r.status_code == 302: self.assertEqual(original_number_of_document + 1, Document.objects.all().count()) else: # Debug purpose self.assertEqual(r.context['form'].errors, {}) def test_edition_redirect(self): """ Tests that a document edition is redirected to the item or the list. """ doc = DocumentFactory(category=self.category, document_key='FAC09001-FWF-000-HSE-REP-0004', metadata={ 'title': u'HAZOP related 1', }, revision={ 'status': 'STD', }) c = self.client r = c.post(doc.get_edit_url(), { 'document_number': doc.document_key, 'title': u'a new title', 'docclass': 1, 'created_on': '2015-10-10', 'received_date': '2015-10-10', 'save-view': 'View', }, follow=True) self.assertEqual(r.redirect_chain, [('http://testserver{url}'.format( url=doc.get_absolute_url(), ), 302)]) r = c.post(doc.get_edit_url(), { 'document_number': doc.document_key, 'title': u'a new new title', 'docclass': 1, 'created_on': '2015-10-10', 'received_date': '2015-10-10', }, follow=True) self.assertEqual(r.redirect_chain, [('http://testserver{url}'.format( url=self.category.get_absolute_url(), ), 302)]) # Check that update was logged in audit trail activity = Activity.objects.latest('created_on') self.assertEqual(activity.verb, Activity.VERB_EDITED) self.assertEqual(activity.target.title, u'a new new title') self.assertEqual(activity.actor, self.user) def test_edition_updates_document_key(self): doc = DocumentFactory(category=self.category, document_key='FAC09001-FWF-000-HSE-REP-0004', metadata={ 'title': u'HAZOP related 1', }, revision={ 'status': 'STD', }) c = self.client c.post(doc.get_edit_url(), { 'document_number': 'New Document Number', 'title': u'a new title', 'docclass': 1, 'created_on': '2015-10-10', 'received_date': '2015-10-10', 'save-view': 'View', }, follow=True) doc.refresh_from_db() self.assertEqual(doc.document_number, 'New Document Number') self.assertEqual(doc.document_key, 'NEW-DOCUMENT-NUMBER') metadata = doc.get_metadata() self.assertEqual(metadata.document_number, 'New Document Number') self.assertEqual(metadata.document_key, 'NEW-DOCUMENT-NUMBER')
class DocumentCreateTest(TestCase): def setUp(self): self.category = CategoryFactory() self.user = UserFactory( email='*****@*****.**', password='******', is_superuser=True, category=self.category, ) self.create_url = reverse('document_create', args=[ self.category.organisation.slug, self.category.slug, ]) self.client.login(email=self.user.email, password='******') self.sample_path = join(settings.DJANGO_ROOT, 'documents', 'tests') def tearDown(self): """Wipe the media root directory after each test.""" media_root = settings.MEDIA_ROOT if os.path.exists(media_root): for f in os.listdir(media_root): file_path = os.path.join(media_root, f) if os.path.isfile(file_path) and file_path.startswith('/tmp/'): os.unlink(file_path) def test_creation_errors(self): """ Tests that a document can't be created without required fields. """ required_error = u'This field is required.' c = self.client r = c.get(self.create_url) self.assertEqual(r.status_code, 200) r = c.post(self.create_url, {}) self.assertEqual(r.status_code, 200) self.assertEqual(r.context['form'].errors, { 'title': [required_error], }) def test_creation_errors_with_files(self): """ Tests that a document can't be created with wrong files. """ extension_error = u'A PDF file is not allowed in this field.' c = self.client with open(join(self.sample_path, 'sample_doc_native.docx')) as native_file: with open(join(self.sample_path, 'sample_doc_pdf.pdf')) as pdf_file: r = c.post( self.create_url, { 'title': u'a title', 'native_file': pdf_file, 'pdf_file': native_file, 'docclass': 1, 'created_on': '2015-10-10', 'received_date': '2015-10-10', }) self.assertEqual(r.status_code, 200) self.assertEqual(r.context['revision_form'].errors, { 'native_file': [extension_error], }) def test_creation_success(self): """ Tests that a document can be created with required fields. """ original_number_of_document = Document.objects.all().count() c = self.client r = c.post(self.create_url, { 'title': u'a title', }) if r.status_code == 302: self.assertEqual(original_number_of_document + 1, Document.objects.all().count()) else: # Debug purpose self.assertEqual(r.context['form'].errors, {}) def test_creation_with_empty_document_key(self): """ Tests that a document can be created with required fields. """ c = self.client doc_title = u'a glorious title' c.post(self.create_url, { 'title': doc_title, 'docclass': 1, 'created_on': '2015-10-10', 'received_date': '2015-10-10', }, follow=True) doc = Document.objects.all().order_by('-id')[0] self.assertEqual(doc.document_number, 'a-glorious-title') self.assertEqual(doc.document_key, 'a-glorious-title') # Check that creation was logged in audit trail activity = Activity.objects.latest('created_on') self.assertEqual(activity.verb, Activity.VERB_CREATED) self.assertEqual(activity.action_object.title, doc_title) self.assertEqual(activity.actor, self.user) def test_create_with_document_key(self): c = self.client doc_title = u'another title' c.post(self.create_url, { 'title': doc_title, 'document_number': u'Gloubi Boulga', 'docclass': 1, 'created_on': '2015-10-10', 'received_date': '2015-10-10', }, follow=True) doc = Document.objects.all().order_by('-id')[0] self.assertEqual(doc.document_number, 'Gloubi Boulga') self.assertEqual(doc.document_key, 'GLOUBI-BOULGA') # Check audit trail activity = Activity.objects.latest('created_on') self.assertEqual(activity.verb, Activity.VERB_CREATED) self.assertEqual(activity.action_object.title, doc_title) self.assertEqual(activity.actor, self.user) def test_creation_success_with_files(self): """ Tests that a document can be created with files. """ original_number_of_document = Document.objects.all().count() c = self.client with open(join(self.sample_path, 'sample_doc_native.docx')) as native_file: with open(join(self.sample_path, 'sample_doc_pdf.pdf')) as pdf_file: r = c.post( self.create_url, { 'title': u'a title', 'native_file': native_file, 'pdf_file': pdf_file, }) if r.status_code == 302: self.assertEqual(original_number_of_document + 1, Document.objects.all().count()) else: # Debug purpose self.assertEqual(r.context['form'].errors, {}) def test_creation_redirect(self): """ Tests that a document creation is redirected to the item or another creation form (django-admin like). """ c = self.client r = c.post(self.create_url, { 'title': u'a title', 'docclass': 1, 'created_on': '2015-10-10', 'received_date': '2015-10-10', 'save-create': None, }, follow=True) self.assertEqual( r.redirect_chain, [('http://testserver{url}'.format(url=self.create_url, ), 302)]) r = c.post(self.create_url, { 'title': u'another title', 'docclass': 1, 'created_on': '2015-10-10', 'received_date': '2015-10-10', }, follow=True) self.assertEqual(r.redirect_chain, [('http://testserver{url}'.format( url=self.category.get_absolute_url(), ), 302)]) def test_document_related_documents(self): c = self.client related = [ DocumentFactory(category=self.category, document_key='FAC09001-FWF-000-HSE-REP-0004', metadata={ 'title': u'HAZOP related 1', }, revision={ 'status': 'STD', }), DocumentFactory(category=self.category, document_key='FAC09001-FWF-000-HSE-REP-0005', metadata={ 'title': u'HAZOP related 2', }, revision={ 'status': 'STD', }) ] c.post( self.create_url, { 'document_number': 'FAC09001-FWF-000-HSE-REP-0006', 'title': u'HAZOP report', 'docclass': 1, 'created_on': '2015-10-10', 'received_date': '2015-10-10', 'related_documents': [doc.pk for doc in related] }) document = Document.objects.get( document_key='FAC09001-FWF-000-HSE-REP-0006') metadata = document.metadata related = list(metadata.related_documents.all()) self.assertEqual(len(related), 2) related_titles = (related[0].metadata.title, related[1].metadata.title) self.assertTrue("HAZOP related 1" in related_titles) self.assertTrue("HAZOP related 2" in related_titles)
class DocumentRevisionDeleteTests(TestCase): def create_doc(self, nb_revisions=1): doc = DocumentFactory(category=self.category) meta = doc.get_metadata() for rev in range(2, nb_revisions + 1): MetadataRevisionFactory( metadata=meta, revision=rev ) url = reverse('document_revision_delete', args=[ self.category.organisation.slug, self.category.slug, doc.document_key ]) return doc, url def setUp(self): self.category = CategoryFactory() self.user = UserFactory( email='*****@*****.**', password='******', is_superuser=True, category=self.category, ) self.client.login(email=self.user.email, password='******') self.doc_list_url = self.category.get_absolute_url() def test_delete_page_only_accepts_post_requests(self): doc, url = self.create_doc() res = self.client.get(url) self.assertEqual(res.status_code, 405) def test_delete_single_revision_is_not_allowed(self): """Latest revision cannot be delete if this is the only revision.""" doc, url = self.create_doc() res = self.client.post(url) self.assertEqual(res.status_code, 403) def test_cannot_delete_revision_in_review(self): doc, url = self.create_doc(nb_revisions=5) rev = doc.get_latest_revision() rev.leader = self.user rev.start_review() self.assertTrue(rev.is_under_review) res = self.client.post(url) self.assertEqual(res.status_code, 403) def test_delete_latest_revision(self): doc, url = self.create_doc(nb_revisions=5) doc.refresh_from_db() self.assertEqual(doc.get_all_revisions().count(), 5) self.assertEqual(doc.current_revision, 5) self.client.post(url) doc.refresh_from_db() self.assertEqual(doc.get_all_revisions().count(), 4) self.assertEqual(doc.current_revision, 4) self.client.post(url) doc.refresh_from_db() self.assertEqual(doc.get_all_revisions().count(), 3) self.assertEqual(doc.current_revision, 3) def test_simple_user_cannot_delete_revision(self): doc, delete_url = self.create_doc(nb_revisions=2) self.assertEqual(doc.get_all_revisions().count(), 2) # User has not delete perms user = UserFactory( email='*****@*****.**', password='******', is_superuser=False, category=self.category, ) self.client.logout() self.client.login(email=user.email, password='******') res = self.client.post(delete_url) self.assertEqual(res.status_code, 403) doc.refresh_from_db() self.assertEqual(doc.get_all_revisions().count(), 2) def test_user_with_delete_perms_can_delete_revision(self): doc, delete_url = self.create_doc(nb_revisions=2) self.assertEqual(doc.get_all_revisions().count(), 2) user = UserFactory( email='*****@*****.**', password='******', is_superuser=False, category=self.category, ) delete_doc_perm = Permission.objects.get( codename='delete_document') user.user_permissions.add(delete_doc_perm) self.client.logout() self.client.login(email=user.email, password='******') self.client.post(delete_url) doc.refresh_from_db() self.assertEqual(doc.get_all_revisions().count(), 1)
class DocumentDeleteTests(TestCase): def setUp(self): self.category = CategoryFactory() self.user = UserFactory( email='*****@*****.**', password='******', is_superuser=True, category=self.category, ) self.client.login(email=self.user.email, password='******') self.doc_list_url = self.category.get_absolute_url() def test_delete_page_only_post(self): document = DocumentFactory(category=self.category) delete_url = reverse('document_delete', args=[ self.category.organisation.slug, self.category.slug, document.document_key ]) res = self.client.get(delete_url) self.assertEqual(res.status_code, 405) def test_delete_document(self): document = DocumentFactory(category=self.category) document_str = str(document) delete_url = reverse('document_delete', args=[ self.category.organisation.slug, self.category.slug, document.document_key ]) res = self.client.post(delete_url) self.assertRedirects(res, self.category.get_absolute_url()) # Check that deletion was logged in audit trail activity = Activity.objects.latest('created_on') self.assertEqual(activity.verb, Activity.VERB_DELETED) self.assertEqual(activity.action_object_str, document_str) self.assertEqual(activity.actor, self.user) res = self.client.post(delete_url) self.assertEqual(res.status_code, 404) metadata = DemoMetadata.objects.filter(document=document) self.assertEqual(metadata.count(), 0) revisions = DemoMetadataRevision.objects.filter(metadata=metadata) self.assertEqual(revisions.count(), 0) def test_cannot_revise_document_in_review(self): document = DocumentFactory( category=self.category, document_key='FAC09001-FWF-000-HSE-REP-0004', revision={ 'status': 'STD', 'review_start_date': '2014-04-04' } ) delete_url = reverse('document_delete', args=[ self.category.organisation.slug, self.category.slug, document.document_key ]) revision = document.latest_revision self.assertTrue(revision.is_under_review) res = self.client.post(delete_url) self.assertEqual(res.status_code, 403) try: document = Document.objects.get(document_key=document.document_key) except: self.fail('Document was deleted') def test_simple_user_cannot_delete_document(self): user = UserFactory( email='*****@*****.**', password='******', is_superuser=False, category=self.category, ) self.client.login(email=user.email, password='******') document = DocumentFactory(category=self.category) delete_url = reverse('document_delete', args=[ self.category.organisation.slug, self.category.slug, document.document_key ]) res = self.client.post(delete_url) self.assertEqual(res.status_code, 403) def test_user_with_delete_perms_can_delete_document(self): user = UserFactory( email='*****@*****.**', password='******', is_superuser=False, category=self.category, ) delete_doc_perm = Permission.objects.get( codename='delete_document') user.user_permissions.add(delete_doc_perm) self.client.login(email=user.email, password='******') document = DocumentFactory(category=self.category) delete_url = reverse('document_delete', args=[ self.category.organisation.slug, self.category.slug, document.document_key ]) res = self.client.post(delete_url) self.assertRedirects(res, self.category.get_absolute_url()) self.assertFalse(Document.objects.filter(pk=document.pk).exists())
class DocumentDeleteTests(TestCase): def setUp(self): self.category = CategoryFactory() user = UserFactory( email='*****@*****.**', password='******', is_superuser=True, category=self.category, ) self.client.login(email=user.email, password='******') self.doc_list_url = self.category.get_absolute_url() def test_delete_page_only_post(self): document = DocumentFactory(category=self.category) delete_url = reverse('document_delete', args=[ self.category.organisation.slug, self.category.slug, document.document_key ]) res = self.client.get(delete_url) self.assertEqual(res.status_code, 405) def test_delete_document(self): document = DocumentFactory(category=self.category) delete_url = reverse('document_delete', args=[ self.category.organisation.slug, self.category.slug, document.document_key ]) res = self.client.post(delete_url) self.assertRedirects(res, self.category.get_absolute_url()) res = self.client.post(delete_url) self.assertEqual(res.status_code, 404) metadata = DemoMetadata.objects.filter(document=document) self.assertEqual(metadata.count(), 0) revisions = DemoMetadataRevision.objects.filter(document=document) self.assertEqual(revisions.count(), 0) def test_cannot_revise_document_in_review(self): document = DocumentFactory( category=self.category, document_key='FAC09001-FWF-000-HSE-REP-0004', revision={ 'status': 'STD', 'review_start_date': '2014-04-04' } ) delete_url = reverse('document_delete', args=[ self.category.organisation.slug, self.category.slug, document.document_key ]) revision = document.latest_revision self.assertTrue(revision.is_under_review) res = self.client.post(delete_url) self.assertEqual(res.status_code, 403) try: document = Document.objects.get(document_key=document.document_key) except: self.fail('Document was deleted') def test_simple_user_cannot_delete_document(self): user = UserFactory( email='*****@*****.**', password='******', is_superuser=False, category=self.category, ) self.client.login(email=user.email, password='******') document = DocumentFactory(category=self.category) delete_url = reverse('document_delete', args=[ self.category.organisation.slug, self.category.slug, document.document_key ]) res = self.client.post(delete_url) self.assertEqual(res.status_code, 403)