def test_documents_to_delete_raises_error_if_SPS_Package_error( self, MockLogger, MockXML, MockSPS_Package): MockSPS_Package.side_effect = TypeError("XML error") MockZipFile = MagicMock() with self.assertRaises(DocumentToDeleteException) as exc_info: is_document_to_delete(MockZipFile, "1806-907X-rba-53-01-1-8.xml") self.assertEqual(str(exc_info.exception), "XML error")
def test_document_to_delete_creates_etree_parser(self, mk_etree, MockSPS_Package): MockSPS_Package.return_value.is_document_deletion = False MockZipFile = MagicMock() MockZipFile.read.return_value = XML_FILE_CONTENT is_document_to_delete(MockZipFile, "1806-907X-rba-53-01-1-8.xml") mk_etree.XMLParser.assert_called_once_with(remove_blank_text=True, no_network=True)
def test_document_to_delete_creates_etree_xml(self, mk_etree, MockSPS_Package): MockParser = Mock() mk_etree.XMLParser.return_value = MockParser MockSPS_Package.return_value.is_document_deletion = False MockZipFile = MagicMock() MockZipFile.read.return_value = XML_FILE_CONTENT is_document_to_delete(MockZipFile, "1806-907X-rba-53-01-1-8.xml") mk_etree.XML.assert_called_once_with(XML_FILE_CONTENT, MockParser)
def test_document_to_delete_raises_error_if_read_from_zip_error( self, MockXML, MockSPS_Package ): MockZipFile = MagicMock() MockZipFile.read.side_effect = KeyError("File not found in the archive") with self.assertRaises(DocumentToDeleteException) as exc_info: is_document_to_delete(MockZipFile, "1806-907X-rba-53-01-1-8.xml") self.assertEqual(str(exc_info.exception), "'File not found in the archive'")
def test_document_to_delete_creates_SPS_Package_instance( self, mk_etree, MockSPS_Package): MockXML = Mock() mk_etree.XML.return_value = MockXML MockSPS_Package.return_value.is_document_deletion = False MockZipFile = MagicMock() is_document_to_delete(MockZipFile, "1806-907X-rba-53-01-1-8.xml") MockSPS_Package.assert_called_once_with(MockXML, "1806-907X-rba-53-01-1-8.xml")
def test_documents_to_delete_returns_documents_id_to_delete_and_xmls_to_delete( self): article_id = etree.Element("article-id") article_id.set("specific-use", "delete") xml_file = etree.XML(XML_FILE_CONTENT) am_tag = xml_file.find(".//article-meta") am_tag.append(article_id) deleted_xml_file = etree.tostring(xml_file) MockZipFile = MagicMock() MockZipFile.read.return_value = deleted_xml_file is_doc_to_delete, doc_scielo_pid = is_document_to_delete( MockZipFile, "1806-907X-rba-53-01-1-8.xml") self.assertTrue(is_doc_to_delete) self.assertEqual( doc_scielo_pid, "FX6F3cbyYmmwvtGmMB7WCgr") # SciELO ID de XML_FILE_CONTENT
def delete_documents( sps_package: str, xmls_filenames: list ) -> Tuple[List[str], List[dict]]: """ Deleta documentos informados do Kernel dict sps_packages_xmls: dict com os paths dos pacotes SPS e os respectivos nomes dos arquivos XML. """ Logger.debug("delete_documents IN") Logger.info("Reading sps_package: %s" % sps_package) xmls_to_delete = [] executions = [] with ZipFile(sps_package) as zipfile: for i, sps_xml_file in enumerate(xmls_filenames, 1): Logger.info( 'Reading XML file "%s" from ZIP file "%s" [%s/%s]', sps_xml_file, sps_package, i, len(xmls_filenames), ) execution = {"file_name": sps_xml_file, "deletion": True} try: is_doc_to_delete, doc_id = is_document_to_delete(zipfile, sps_xml_file) except DocumentToDeleteException as exc: Logger.error('Error reading document "%s": %s', sps_xml_file, str(exc)) execution.update({"failed": True, "error": str(exc)}) executions.append(execution) else: if is_doc_to_delete: xmls_to_delete.append(sps_xml_file) if doc_id is None: Logger.error( 'Document "%s" will not be deleted because SciELO PID is None', sps_xml_file, ) execution.update( {"failed": True, "error": "SciELO PID V3 is None"} ) executions.append(execution) continue try: delete_doc_from_kernel(doc_id) except DeleteDocFromKernelException as exc: Logger.info( 'Could not delete "%s" (scielo_id: "%s") from kernel: %s', sps_xml_file, doc_id, str(exc), ) execution.update( {"pid": doc_id, "failed": True, "error": str(exc)} ) else: Logger.info( 'Document "%s" (scielo_id: "%s") deleted from kernel', sps_xml_file, doc_id, ) execution.update({"pid": doc_id, "file_name": sps_xml_file}) executions.append(execution) Logger.debug("delete_documents OUT") return (list(set(xmls_filenames) - set(xmls_to_delete)), executions)
def test_document_to_delete_reads_xml_from_zip(self, mk_etree, MockSPS_Package): MockSPS_Package.return_value.is_document_deletion = False MockZipFile = MagicMock() is_document_to_delete(MockZipFile, "1806-907X-rba-53-01-1-8.xml") MockZipFile.read.assert_any_call("1806-907X-rba-53-01-1-8.xml")
def test_documents_to_delete_returns_false_if_xml_is_not_to_delete(self): MockZipFile = MagicMock() MockZipFile.read.return_value = XML_FILE_CONTENT is_doc_to_delete, __ = is_document_to_delete( MockZipFile, "1806-907X-rba-53-01-1-8.xml") self.assertFalse(is_doc_to_delete)