From 3751379f1e9a4c215fb6eb898b4ccc67659b9ace Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Tue, 10 May 2022 21:51:50 +0700 Subject: initial commit 2 --- addons/l10n_it_edi/tests/__init__.py | 4 + .../tests/expected_xmls/IT01234567890_FPR01.xml | 113 +++++++++++++++ .../expected_xmls/IT01234567890_FPR01.xml.p7m | Bin 0 -> 7083 bytes .../expected_xmls/IT01234567890_FPR01_DT_001.xml | 71 +++++++++ .../expected_xmls/IT01234567890_FPR01_RC_001.xml | 72 ++++++++++ addons/l10n_it_edi/tests/test_ir_mail_server.py | 160 +++++++++++++++++++++ 6 files changed, 420 insertions(+) create mode 100644 addons/l10n_it_edi/tests/__init__.py create mode 100644 addons/l10n_it_edi/tests/expected_xmls/IT01234567890_FPR01.xml create mode 100644 addons/l10n_it_edi/tests/expected_xmls/IT01234567890_FPR01.xml.p7m create mode 100644 addons/l10n_it_edi/tests/expected_xmls/IT01234567890_FPR01_DT_001.xml create mode 100644 addons/l10n_it_edi/tests/expected_xmls/IT01234567890_FPR01_RC_001.xml create mode 100644 addons/l10n_it_edi/tests/test_ir_mail_server.py (limited to 'addons/l10n_it_edi/tests') diff --git a/addons/l10n_it_edi/tests/__init__.py b/addons/l10n_it_edi/tests/__init__.py new file mode 100644 index 00000000..c2bcfc21 --- /dev/null +++ b/addons/l10n_it_edi/tests/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import test_ir_mail_server diff --git a/addons/l10n_it_edi/tests/expected_xmls/IT01234567890_FPR01.xml b/addons/l10n_it_edi/tests/expected_xmls/IT01234567890_FPR01.xml new file mode 100644 index 00000000..936b6d4a --- /dev/null +++ b/addons/l10n_it_edi/tests/expected_xmls/IT01234567890_FPR01.xml @@ -0,0 +1,113 @@ + + + + + + IT + 01234560157 + + 00001 + FPR12 + ABC1234 + + + + + + IT + 01234560157 + + + SOCIETA' ALPHA SRL + + RF19 + + + VIALE ROMA 543 + 07100 + SASSARI + SS + IT + + + + + 01234560157 + + DITTA BETA + + + + VIA TORINO 38-B + 00145 + ROMA + RM + IT + + + + + + + TD01 + EUR + 2014-12-18 + 01234567890 + LA FATTURA FA RIFERIMENTO AD UNA OPERAZIONE AAAA BBBBBBBBBBBBBBBBBB CCC DDDDDDDDDDDDDDD E FFFFFFFFFFFFFFFFFFFF GGGGGGGGGG HHHHHHH II LLLLLLLLLLLLLLLLL MMM NNNNN OO PPPPPPPPPPP QQQQ RRRR SSSSSSSSSSSSSS + SEGUE DESCRIZIONE CAUSALE NEL CASO IN CUI NON SIANO STATI SUFFICIENTI 200 CARATTERI AAAAAAAAAAA BBBBBBBBBBBBBBBBB + + + 1 + 66685 + 1 + + + 1 + 01234567890 + 2012-09-01 + 5 + 01234567890abc + 456def + + + + + IT + 24681012141 + + + Trasporto spa + + + 2012-10-22T16:46:12.000+02:00 + + + + + 1 + DESCRIZIONE DELLA FORNITURA + 5.00 + 1.00 + 5.00 + 22.00 + + + 22.00 + 5.00 + 1.10 + I + + + + TP01 + + MP01 + 2015-01-30 + 6.10 + + + + diff --git a/addons/l10n_it_edi/tests/expected_xmls/IT01234567890_FPR01.xml.p7m b/addons/l10n_it_edi/tests/expected_xmls/IT01234567890_FPR01.xml.p7m new file mode 100644 index 00000000..ecb48417 Binary files /dev/null and b/addons/l10n_it_edi/tests/expected_xmls/IT01234567890_FPR01.xml.p7m differ diff --git a/addons/l10n_it_edi/tests/expected_xmls/IT01234567890_FPR01_DT_001.xml b/addons/l10n_it_edi/tests/expected_xmls/IT01234567890_FPR01_DT_001.xml new file mode 100644 index 00000000..10788771 --- /dev/null +++ b/addons/l10n_it_edi/tests/expected_xmls/IT01234567890_FPR01_DT_001.xml @@ -0,0 +1,71 @@ + + + 111 + IT01234567890_FPR01.xml + Notifica di esempio + 123456 + Esempio + + + + + + + + /descendant::ds:Signature + + + + g6h8KnGd+Y4DCdnGk5oIUbBwjJB3MMGlyizaFyCqH7I= + + + + LkOlfB97QK/evb7mYg+KkxW3BSiZre63y3Qeh/rV28E= + + + + BaZyFTXyxM8aIJhtiemem1lEwKR75ksXb33lsMqD89w= + + + +Z8/Kt/ZF/syaHxYr6/qoTz+nTJe3IV1m9Hj3WPOl1CZ/p5intUORW0IinpMum4rvPkLYpKPVbi39 +WCJujEqVOVFw5xezZlwmrRghmUeyTyKazK7mKEEMXCad+FGCZj2Gz1nkqi5aNyNX/lN7m9Ix7rZ8 +br3Fi3bi3nNMdyUmwog= + + + + +MIIEYDCCA0igAwIBAgIDEIgbMA0GCSqGSIb3DQEBBQUAMG0xCzAJBgNVBAYTAklUMR4wHAYDVQQK +ExVBZ2VuemlhIGRlbGxlIEVudHJhdGUxGzAZBgNVBAsTElNlcnZpemkgVGVsZW1hdGljaTEhMB8G +A1UEAxMYQ0EgQWdlbnppYSBkZWxsZSBFbnRyYXRlMB4XDTExMDcwNDEzMTkyNFoXDTE0MDcwNDEz +MTkyM1owdDELMAkGA1UEBhMCSVQxHjAcBgNVBAoTFUFnZW56aWEgZGVsbGUgRW50cmF0ZTEbMBkG +A1UECxMSU2Vydml6aSBUZWxlbWF0aWNpMSgwJgYDVQQDEx9TaXN0ZW1hIEludGVyc2NhbWJpbyBG +YXR0dXJhIFBBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMxOQj1dj6xgQBwB/S5naHvVqP +FL25Y3GnAulrcaeO8ZFFK5fWKPgiBwfyJ7qdlzn/RF7y+w92XLgh9zROmNlIjsJcp3rRwsAiKjuW +CkqwVXE0/Qtvxpo2Eovk1SV4+rf+7WKSHtabjmWXbM2FVccyN2AOvfR4WAdpr4hHkoEIiwIDAQAB +o4IBhDCCAYAwDgYDVR0PAQH/BAQDAgZAMIGZBgNVHSMEgZEwgY6AFOpEPx8Z4zc+q6qUgqWf6/wW +un+1oXGkbzBtMQswCQYDVQQGEwJJVDEeMBwGA1UEChMVQWdlbnppYSBkZWxsZSBFbnRyYXRlMRsw +GQYDVQQLExJTZXJ2aXppIFRlbGVtYXRpY2kxITAfBgNVBAMTGENBIEFnZW56aWEgZGVsbGUgRW50 +cmF0ZYIDEGJwMIGyBgNVHR8EgaowgacwgaSggaGggZ6GgZtsZGFwOi8vY2Fkcy5lbnRyYXRlLmZp +bmFuemUuaXQvY24lM2RDQSUyMEFnZW56aWElMjBkZWxsZSUyMEVudHJhdGUsb3UlM2RTZXJ2aXpp +JTIwVGVsZW1hdGljaSxvJTNkQWdlbnppYSUyMGRlbGxlJTIwRW50cmF0ZSxjJTNkaXQ/Y2VydGlm +aWNhdGVSZXZvY2F0aW9uTGlzdDAdBgNVHQ4EFgQUn+JY07NI6xlrCUXERiHoFFN66dkwDQYJKoZI +hvcNAQEFBQADggEBALZ0po2uLhLyZ8uiVfQUCAQd8s5o8ZJw2mcgZc/iaoNmDfcslZnTLWeuT6Gr +UFgG0uc1rY0UwWx/R1UOyc0ZesRo7Z6+kFmVubT1tbjLMuLjjUIyt4zWeNjf4PwNS0+s6Y6eC8tx +fOJmQNGQIbujWhAejoIteG01ciGeeII6AMnGK8KvbCA0UZmWl3Bou49zWajiEjtHFGkq/WNfDwRa +Fd4UWjR+UWS3rLahV7iOfh/+Yy7h1F0RzQuPJk7TCm7iHyc9QtgwxHHCmknRyNXMv6DeTOfK8ciq +uFWd6DasmblXLUm+uqhsWVRIkj2Bz63bpjuJU+8ptRfxHrVnzyCr9M4= + + + + + + + + 2014-06-05T14:27:51Z + + + + + + diff --git a/addons/l10n_it_edi/tests/expected_xmls/IT01234567890_FPR01_RC_001.xml b/addons/l10n_it_edi/tests/expected_xmls/IT01234567890_FPR01_RC_001.xml new file mode 100644 index 00000000..ab0725e4 --- /dev/null +++ b/addons/l10n_it_edi/tests/expected_xmls/IT01234567890_FPR01_RC_001.xml @@ -0,0 +1,72 @@ + + + 111 + IT01234567890_FPR01.xml + 2013-06-06T12:00:00Z + 2013-06-06T12:01:00Z + + AAA111 + Amministrazione di prova + + 123456 + Esempio + + + + + + + + /descendant::ds:Signature + + + + c+5ntDV6t4+PxIKEU6rbCUGu3ne9RMxoADu4yK4XIak= + + + + AhiGZ+LPENybg4dQwMwjg0Nxdxzu+3M5i0w+UI6X89E= + + + + BaZyFTXyxM8aIJhtiemem1lEwKR75ksXb33lsMqD89w= + + + G0FOBC+E8JKtJ5K2C+LBlvv3oarzkub7w2q5U1UQZnobWmFBbZ4WzgBNTMKUjdi2ZLkUpOSEwedf +VLgl5SyhaKYY6TizDNbxededjUpqKhyIgaWBLc/iDI6H//x+3axnLU4WwFzdr3AwqPQjPuugGX07 +gOcjBHtbr7ie2Wr//o8= + + + MIIEYDCCA0igAwIBAgIDEIgbMA0GCSqGSIb3DQEBBQUAMG0xCzAJBgNVBAYTAklUMR4wHAYDVQQK +ExVBZ2VuemlhIGRlbGxlIEVudHJhdGUxGzAZBgNVBAsTElNlcnZpemkgVGVsZW1hdGljaTEhMB8G +A1UEAxMYQ0EgQWdlbnppYSBkZWxsZSBFbnRyYXRlMB4XDTExMDcwNDEzMTkyNFoXDTE0MDcwNDEz +MTkyM1owdDELMAkGA1UEBhMCSVQxHjAcBgNVBAoTFUFnZW56aWEgZGVsbGUgRW50cmF0ZTEbMBkG +A1UECxMSU2Vydml6aSBUZWxlbWF0aWNpMSgwJgYDVQQDEx9TaXN0ZW1hIEludGVyc2NhbWJpbyBG +YXR0dXJhIFBBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMxOQj1dj6xgQBwB/S5naHvVqP +FL25Y3GnAulrcaeO8ZFFK5fWKPgiBwfyJ7qdlzn/RF7y+w92XLgh9zROmNlIjsJcp3rRwsAiKjuW +CkqwVXE0/Qtvxpo2Eovk1SV4+rf+7WKSHtabjmWXbM2FVccyN2AOvfR4WAdpr4hHkoEIiwIDAQAB +o4IBhDCCAYAwDgYDVR0PAQH/BAQDAgZAMIGZBgNVHSMEgZEwgY6AFOpEPx8Z4zc+q6qUgqWf6/wW +un+1oXGkbzBtMQswCQYDVQQGEwJJVDEeMBwGA1UEChMVQWdlbnppYSBkZWxsZSBFbnRyYXRlMRsw +GQYDVQQLExJTZXJ2aXppIFRlbGVtYXRpY2kxITAfBgNVBAMTGENBIEFnZW56aWEgZGVsbGUgRW50 +cmF0ZYIDEGJwMIGyBgNVHR8EgaowgacwgaSggaGggZ6GgZtsZGFwOi8vY2Fkcy5lbnRyYXRlLmZp +bmFuemUuaXQvY24lM2RDQSUyMEFnZW56aWElMjBkZWxsZSUyMEVudHJhdGUsb3UlM2RTZXJ2aXpp +JTIwVGVsZW1hdGljaSxvJTNkQWdlbnppYSUyMGRlbGxlJTIwRW50cmF0ZSxjJTNkaXQ/Y2VydGlm +aWNhdGVSZXZvY2F0aW9uTGlzdDAdBgNVHQ4EFgQUn+JY07NI6xlrCUXERiHoFFN66dkwDQYJKoZI +hvcNAQEFBQADggEBALZ0po2uLhLyZ8uiVfQUCAQd8s5o8ZJw2mcgZc/iaoNmDfcslZnTLWeuT6Gr +UFgG0uc1rY0UwWx/R1UOyc0ZesRo7Z6+kFmVubT1tbjLMuLjjUIyt4zWeNjf4PwNS0+s6Y6eC8tx +fOJmQNGQIbujWhAejoIteG01ciGeeII6AMnGK8KvbCA0UZmWl3Bou49zWajiEjtHFGkq/WNfDwRa +Fd4UWjR+UWS3rLahV7iOfh/+Yy7h1F0RzQuPJk7TCm7iHyc9QtgwxHHCmknRyNXMv6DeTOfK8ciq +uFWd6DasmblXLUm+uqhsWVRIkj2Bz63bpjuJU+8ptRfxHrVnzyCr9M4= + + + + + + + 2014-06-05T14:24:28Z + + + + + + diff --git a/addons/l10n_it_edi/tests/test_ir_mail_server.py b/addons/l10n_it_edi/tests/test_ir_mail_server.py new file mode 100644 index 00000000..734c7246 --- /dev/null +++ b/addons/l10n_it_edi/tests/test_ir_mail_server.py @@ -0,0 +1,160 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import datetime +import logging +from collections import namedtuple +from unittest.mock import patch +import freezegun + +from odoo import tools +from odoo.addons.account_edi.tests.common import AccountEdiTestCommon +from odoo.addons.l10n_it_edi.tools.remove_signature import remove_signature + +_logger = logging.getLogger(__name__) + + +class PecMailServerTests(AccountEdiTestCommon): + """ Main test class for the l10n_it_edi vendor bills XML import from a PEC mail account""" + + fake_test_content = """ + + + + + 01234560157 + + + + + + + TD02 + + + + """ + + @classmethod + def setUpClass(cls): + """ Setup the test class with a PEC mail server and a fake fatturaPA content """ + + super().setUpClass(chart_template_ref='l10n_it.l10n_it_chart_template_generic', + edi_format_ref='l10n_it_edi.edi_fatturaPA') + + # Use the company_data_2 to test that the e-invoice is imported for the right company + cls.company = cls.company_data_2['company'] + + # Initialize the company's codice fiscale + cls.company.l10n_it_codice_fiscale = 'IT01234560157' + + # Build test data. + # invoice_filename1 is used for vendor bill receipts tests + # invoice_filename2 is used for vendor bill tests + cls.invoice_filename1 = 'IT01234567890_FPR01.xml' + cls.invoice_filename2 = 'IT01234567890_FPR02.xml' + cls.signed_invoice_filename = 'IT01234567890_FPR01.xml.p7m' + cls.invoice_content = cls._get_test_file_content(cls.invoice_filename1) + cls.signed_invoice_content = cls._get_test_file_content(cls.signed_invoice_filename) + cls.invoice = cls.env['account.move'].create({ + 'move_type': 'in_invoice', + 'ref': '01234567890' + }) + cls.attachment = cls.env['ir.attachment'].create({ + 'name': cls.invoice_filename1, + 'raw': cls.invoice_content, + 'res_id': cls.invoice.id, + 'res_model': 'account.move', + }) + cls.edi_document = cls.env['account.edi.document'].create({ + 'edi_format_id': cls.edi_format.id, + 'move_id': cls.invoice.id, + 'attachment_id': cls.attachment.id, + 'state': 'sent' + }) + + # Initialize the fetchmail server that has to be tested + cls.server = cls.env['fetchmail.server'].sudo().create({ + 'name': 'test_server', + 'server_type': 'imap', + 'l10n_it_is_pec': True}) + + @classmethod + def _get_test_file_content(cls, filename): + """ Get the content of a test file inside this module """ + path = 'l10n_it_edi/tests/expected_xmls/' + filename + with tools.file_open(path, mode='rb') as test_file: + return test_file.read() + + def _create_invoice(self, content, filename): + """ Create an invoice from given attachment content """ + with patch.object(self.server._cr, 'commit', return_value=None): + if filename.endswith(".p7m"): + content = remove_signature(content) + return self.server._create_invoice_from_mail(content, filename, 'fake@address.be') + + # ----------------------------- + # + # Vendor bills + # + # ----------------------------- + + def test_receive_vendor_bill(self): + """ Test a sample e-invoice file from https://www.fatturapa.gov.it/export/documenti/fatturapa/v1.2/IT01234567890_FPR01.xml """ + invoices = self._create_invoice(self.invoice_content, self.invoice_filename2) + self.assertTrue(bool(invoices)) + + def test_receive_signed_vendor_bill(self): + """ Test a signed (P7M) sample e-invoice file from https://www.fatturapa.gov.it/export/documenti/fatturapa/v1.2/IT01234567890_FPR01.xml """ + with freezegun.freeze_time('2020-04-06'): + invoices = self._create_invoice(self.signed_invoice_content, self.signed_invoice_filename) + self.assertRecordValues(invoices, [{ + 'company_id': self.company.id, + 'name': 'BILL/2014/12/0001', + 'invoice_date': datetime.date(2014, 12, 18), + 'ref': '01234567890', + }]) + + def test_receive_same_vendor_bill_twice(self): + """ Test that the second time we are receiving a PEC mail with the same attachment, the second is discarded """ + content = self.fake_test_content.encode() + for result in [True, False]: + invoice = self._create_invoice(content, self.invoice_filename2) + self.assertEqual(result, bool(invoice)) + + # ----------------------------- + # + # Receipts + # + # ----------------------------- + + def _test_receipt(self, receipt_type, source_state, destination_state): + """ Test a receipt from the ones in the module's test files """ + + # Simulate the 'sent' state of the move, even if we didn't actually send an email in this test + self.invoice.l10n_it_send_state = source_state + + # Create a fake receipt from the test file + receipt_filename = 'IT01234567890_FPR01_%s_001.xml' % receipt_type + receipt_content = self._get_test_file_content(receipt_filename).decode() + + create_mail_attachment = namedtuple('Attachment', ('fname', 'content', 'info')) + receipt_mail_attachment = create_mail_attachment(receipt_filename, receipt_content, {}) + + # Simulate the arrival of the receipt + with patch.object(self.server._cr, 'commit', return_value=None): + self.server._message_receipt_invoice(receipt_type, receipt_mail_attachment) + + # Check the Destination state of the edi_document + self.assertTrue(destination_state, self.edi_document.state) + + def test_ricevuta_consegna(self): + """ Test a receipt adapted from https://www.fatturapa.gov.it/export/documenti/messaggi/v1.0/IT01234567890_11111_RC_001.xml """ + self._test_receipt('RC', 'sent', 'delivered') + + def test_decorrenza_termini(self): + """ Test a receipt adapted from https://www.fatturapa.gov.it/export/documenti/messaggi/v1.0/IT01234567890_11111_DT_001.xml """ + self._test_receipt('DT', 'delivered', 'delivered_expired') -- cgit v1.2.3