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: 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 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 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: 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() 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_raises_error_if_no_scielo_id_in_xml(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) scielo_id_tag = xml_file.find(".//article-id[@specific-use='scielo']") am_tag.remove(scielo_id_tag) deleted_xml_file = etree.tostring(xml_file) MockZipFile = MagicMock() MockZipFile.read.return_value = deleted_xml_file with self.assertRaises(DocumentToDeleteException) as exc_info: document_to_delete(MockZipFile, "1806-907X-rba-53-01-1-8.xml") self.assertEqual(str(exc_info.exception), "Missing element in 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 result = document_to_delete(MockZipFile, "1806-907X-rba-53-01-1-8.xml") self.assertEqual( result, "FX6F3cbyYmmwvtGmMB7WCgr") # SciELO ID de XML_FILE_CONTENT
def delete_documents(sps_package, xmls_filenames): """ 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 = [] 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), ) try: doc_to_delete = document_to_delete(zipfile, sps_xml_file) except DocumentToDeleteException as exc: Logger.info('Could not delete document "%s": %s', sps_xml_file, str(exc)) else: if doc_to_delete: xmls_to_delete.append(sps_xml_file) try: delete_doc_from_kernel(doc_to_delete) except DeleteDocFromKernelException as exc: Logger.info( 'Could not delete "%s" (scielo_id: "%s") from kernel: %s', sps_xml_file, doc_to_delete, str(exc)) else: Logger.info( 'Document "%s" (scielo_id: "%s") deleted from kernel', sps_xml_file, doc_to_delete) Logger.debug("delete_documents OUT") return list(set(xmls_filenames) - set(xmls_to_delete))
def test_document_to_delete_reads_xml_from_zip(self, mk_etree, MockSPS_Package): MockSPS_Package.return_value.is_document_deletion = False MockZipFile = MagicMock() 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_none_if_xml_is_not_to_delete(self): MockZipFile = MagicMock() MockZipFile.read.return_value = XML_FILE_CONTENT result = document_to_delete(MockZipFile, "1806-907X-rba-53-01-1-8.xml") self.assertIsNone(result)