def test_all_revisions_document_download(self): """ Tests that download returns a zip file of all revisions of a document. """ document = DocumentFactory(category=self.category, ) sample_path = b'documents/tests/' native_doc = b'sample_doc_native.docx' pdf_doc = b'sample_doc_pdf.pdf' MetadataRevisionFactory( metadata=document.get_metadata(), revision=2, native_file=SimpleUploadedFile(native_doc, sample_path + native_doc), pdf_file=SimpleUploadedFile(pdf_doc, sample_path + pdf_doc), ) MetadataRevisionFactory( metadata=document.get_metadata(), revision=3, native_file=SimpleUploadedFile(native_doc, sample_path + native_doc), pdf_file=SimpleUploadedFile(pdf_doc, sample_path + pdf_doc), ) r = self.client.post(document.category.get_download_url(), { 'document_ids': document.id, 'revisions': 'all', 'format': 'both', }) self.assertEqual(r.status_code, 200) zipfile = BytesIO(r.content) filelist = ZipFile(zipfile).namelist() self.assertEqual(len(filelist), 4)
def test_all_revisions_document_download(self): """ Tests that download returns a zip file of all revisions of a document. """ document = DocumentFactory( category=self.category, ) sample_path = b'documents/tests/' native_doc = b'sample_doc_native.docx' pdf_doc = b'sample_doc_pdf.pdf' MetadataRevisionFactory( metadata=document.get_metadata(), revision=2, native_file=SimpleUploadedFile(native_doc, sample_path + native_doc), pdf_file=SimpleUploadedFile(pdf_doc, sample_path + pdf_doc), ) MetadataRevisionFactory( metadata=document.get_metadata(), revision=3, native_file=SimpleUploadedFile(native_doc, sample_path + native_doc), pdf_file=SimpleUploadedFile(pdf_doc, sample_path + pdf_doc), ) r = self.client.post(document.category.get_download_url(), { 'document_ids': document.id, 'revisions': 'all', 'format': 'both', }) self.assertEqual(r.status_code, 200) zipfile = BytesIO(r.content) filelist = ZipFile(zipfile).namelist() self.assertEqual(len(filelist), 4)
def generate_random_documents(nb_of_docs, category): """Generate a bunch of random documents. This function is useful for testing purpose. """ if category.category_template.metadata_model.model_class() != DemoMetadata: error_message = ('This function is only useful for testing purpose. ' 'The category you pass as an argument can only host ' 'documents of the DemoMetadata type.') raise Exception(error_message) for i in range(nb_of_docs): document = DocumentFactory( category=category, ) metadata = document.get_metadata() max_revision = choice(list(range(1, 5))) for revision_number in range(2, max_revision): MetadataRevisionFactory( revision=revision_number, revision_date='{year}-{month:0>2}-{day:0>2}'.format( year=2008 + revision_number, month=choice(list(range(1, 13))), day=choice(list(range(1, 29))), ), metadata=metadata )
def setUp(self): self.tmpdir = tempfile.mkdtemp(prefix='phasetest_', suffix='_trs') self.incoming = join(self.tmpdir, 'incoming') self.tobechecked = join(self.tmpdir, 'tobechecked') self.accepted = join(self.tmpdir, 'accepted') self.rejected = join(self.tmpdir, 'rejected') os.mkdir(self.accepted) os.mkdir(self.rejected) os.mkdir(self.tobechecked) doc = DocumentFactory( document_key='FAC10005-CTR-CLT-TRS-00001', metadata_factory_class=TransmittalFactory, revision_factory_class=TransmittalRevisionFactory, metadata={ 'status': 'tobechecked', 'tobechecked_dir': self.tobechecked, 'accepted_dir': self.accepted, 'rejected_dir': self.rejected, 'contractor': 'test' } ) self.transmittal = doc.get_metadata() os.mkdir(self.transmittal.full_tobechecked_name)
def test_new_revision_can_update_document_key(self): doc = DocumentFactory( category=self.category, document_key='FAC09001-FWF-000-HSE-REP-0004', revision={ 'status': 'STD', } ) url = reverse('document_revise', args=[ self.category.organisation.slug, self.category.slug, doc.document_key ]) self.client.post(url, { 'document_number': 'Another Document Number', 'title': doc.metadata.title, 'status': 'SPD', 'docclass': 1, 'created_on': '2015-10-10', 'revision_date': '2015-10-10', 'received_date': '2015-10-10', }, follow=True) doc.refresh_from_db() self.assertEqual(doc.document_number, 'Another Document Number') self.assertEqual(doc.document_key, 'ANOTHER-DOCUMENT-NUMBER') metadata = doc.get_metadata() self.assertEqual(metadata.document_number, 'Another Document Number') self.assertEqual(metadata.document_key, 'ANOTHER-DOCUMENT-NUMBER')
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')
def test_command(self): document = DocumentFactory( category=self.category, ) native_doc = 'sample_doc_native.docx' pdf_doc = 'sample_doc_pdf.pdf' MetadataRevisionFactory( metadata=document.get_metadata(), revision=2, native_file=SimpleUploadedFile(native_doc, b'content'), pdf_file=SimpleUploadedFile(pdf_doc, b'content'), ) # Document without files DocumentFactory( category=self.category, ) rev = document.get_latest_revision() filepath = rev.pdf_file.path # check file is on disk after doc deletion document.delete() self.assertTrue(os.path.exists(filepath)) call_command('clearmedia') # command has deleted file self.assertFalse(os.path.exists(filepath))
def generate_random_documents(nb_of_docs, category): """Generate a bunch of random documents. This function is useful for testing purpose. """ if category.category_template.metadata_model.model_class() != DemoMetadata: error_message = ('This function is only useful for testing purpose. ' 'The category you pass as an argument can only host ' 'documents of the DemoMetadata type.') raise Exception(error_message) for i in range(nb_of_docs): document = DocumentFactory(category=category, ) metadata = document.get_metadata() max_revision = choice(list(range(1, 5))) for revision_number in range(2, max_revision): MetadataRevisionFactory( revision=revision_number, revision_date='{year}-{month:0>2}-{day:0>2}'.format( year=2008 + revision_number, month=choice(list(range(1, 13))), day=choice(list(range(1, 29))), ), metadata=metadata)
def test_new_revision_can_update_document_key(self): doc = DocumentFactory(category=self.category, document_key='FAC09001-FWF-000-HSE-REP-0004', revision={ 'status': 'STD', }) url = reverse('document_revise', args=[ self.category.organisation.slug, self.category.slug, doc.document_key ]) self.client.post(url, { 'document_number': 'Another Document Number', 'title': doc.metadata.title, 'status': 'SPD', 'docclass': 1, 'created_on': '2015-10-10', 'revision_date': '2015-10-10', 'received_date': '2015-10-10', }, follow=True) doc.refresh_from_db() self.assertEqual(doc.document_number, 'Another Document Number') self.assertEqual(doc.document_key, 'ANOTHER-DOCUMENT-NUMBER') metadata = doc.get_metadata() self.assertEqual(metadata.document_number, 'Another Document Number') self.assertEqual(metadata.document_key, 'ANOTHER-DOCUMENT-NUMBER')
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')
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 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 test_command(self): document = DocumentFactory(category=self.category, ) native_doc = 'sample_doc_native.docx' pdf_doc = 'sample_doc_pdf.pdf' MetadataRevisionFactory( metadata=document.get_metadata(), revision=2, native_file=SimpleUploadedFile(native_doc, b'content'), pdf_file=SimpleUploadedFile(pdf_doc, b'content'), ) # Document without files DocumentFactory(category=self.category, ) rev = document.get_latest_revision() filepath = rev.pdf_file.path # check file is on disk after doc deletion document.delete() self.assertTrue(os.path.exists(filepath)) call_command('clearmedia') # command has deleted file self.assertFalse(os.path.exists(filepath))
def setUp(self): self.tmpdir = tempfile.mkdtemp(prefix='phasetest_', suffix='_trs') self.incoming = join(self.tmpdir, 'incoming') self.tobechecked = join(self.tmpdir, 'tobechecked') self.accepted = join(self.tmpdir, 'accepted') self.rejected = join(self.tmpdir, 'rejected') os.mkdir(self.accepted) os.mkdir(self.rejected) os.mkdir(self.tobechecked) doc = DocumentFactory( document_key='FAC10005-CTR-CLT-TRS-00001', metadata_factory_class=TransmittalFactory, revision_factory_class=TransmittalRevisionFactory, metadata={ 'status': 'tobechecked', 'tobechecked_dir': self.tobechecked, 'accepted_dir': self.accepted, 'rejected_dir': self.rejected, 'contractor': 'test' }) self.transmittal = doc.get_metadata() os.mkdir(self.transmittal.full_tobechecked_name)