# -*- coding: utf-8 -*- import os from lxml import etree from unittest.mock import patch from odoo.tools import misc from odoo.tests.common import tagged from .common import TestL10nClEdiCommon, _check_with_xsd_patch, _is_valid_certificate @tagged('post_install_l10n', 'post_install', '-at_install') @patch('odoo.tools.xml_utils._check_with_xsd', _check_with_xsd_patch) @tagged('post_install', '-at_install') class TestL10nClDte(TestL10nClEdiCommon): @patch('odoo.addons.l10n_cl_edi.models.l10n_cl_edi_util.L10n_ClEdiUtil._get_seed_ws') def test_get_seed_none(self, get_seed_ws): get_seed_ws.return_value = None with self.assertRaises(Exception): self.env['l10n_cl.edi.util']._get_seed('SIITEST') @patch('odoo.addons.l10n_cl_edi.models.l10n_cl_edi_util.L10n_ClEdiUtil._get_seed_ws') def test_get_seed_ok(self, get_seed_ws): get_seed_ws.return_value = ( """ 00 00000000064 """) self.assertEqual(self.env['l10n_cl.edi.util']._get_seed('SIITEST'), '00000000064') @patch('odoo.addons.l10n_cl_edi.models.l10n_cl_edi_util.L10n_ClEdiUtil._get_seed_ws') def test_get_seed_no_seed_exception(self, get_seed_ws): get_seed_ws.return_value = ( """ -1 Error : (Message Exception) """) with self.assertRaises(Exception): self.env['l10n_cl.edi.util']._get_seed('SIITEST') @patch('odoo.addons.l10n_cl_edi.models.l10n_cl_edi_util.L10n_ClEdiUtil._get_seed_ws') def test_get_seed_retorno_error_exception(self, get_seed_ws): get_seed_ws.return_value = ( """ -2 ERROR RETORNO """) with self.assertRaises(Exception): self.env['l10n_cl.edi.util']._get_seed('SIITEST') @patch('odoo.addons.l10n_cl_edi.models.l10n_cl_edi_util.Client') @patch('odoo.addons.l10n_cl_edi.models.l10n_cl_edi_util.L10n_ClEdiUtil._get_signed_token') @patch('odoo.addons.l10n_cl_edi.models.l10n_cl_edi_util.L10n_ClEdiUtil._get_seed_ws') def get_token_none_error(self, get_seed_ws, get_signed_token, mock_client): get_seed_ws.return_value = '1234456' get_signed_token.return_value = 'test' mock_client.return_value.service.getToken.return_value = b'\n\n503 Service Temporarily Unavailable\n\n

Service Temporarily Unavailable

\n

The server is temporarily unable to service your\nrequest due to maintenance downtime or capacity\nproblems. Please try again later.

\n\n' with self.assertRaises(Exception): self.env['l10n_cl.edi.util']._get_seed('SIITEST', '', '') @patch('odoo.addons.l10n_cl_edi.models.l10n_cl_edi_util.Client') @patch('odoo.addons.l10n_cl_edi.models.l10n_cl_edi_util.L10n_ClEdiUtil._get_signed_token') @patch('odoo.addons.l10n_cl_edi.models.l10n_cl_edi_util.L10n_ClEdiUtil._get_seed') def get_token_certificate_no_exists(self, get_seed, get_signed_token, mock_client): get_seed.return_value = '1234456' get_signed_token.return_value = 'test' mock_client.return_value.service.getToken.return_value = ( """ 11 XML Invalido, elemento “Certificate” no existe, función getCertificado """) with self.assertRaises(Exception): self.env['l10n_cl.edi.util']._get_seed('SIITEST', '', '') @patch('odoo.addons.l10n_cl_edi.models.l10n_cl_edi_util.Client') @patch('odoo.addons.l10n_cl_edi.models.l10n_cl_edi_util.L10n_ClEdiUtil._get_signed_token') @patch('odoo.addons.l10n_cl_edi.models.l10n_cl_edi_util.L10n_ClEdiUtil._get_seed') def get_token_rut_validation_error(self, get_seed, get_signed_token, mock_client): get_seed.return_value = '1234456' get_signed_token.return_value = 'test' mock_client.return_value.service.getToken.return_value = ( """ 12 ERROR (12) (MessageException) """) with self.assertRaises(Exception): self.env['l10n_cl.edi.util']._get_seed('SIITEST', '', '') @patch('odoo.addons.certificate.models.certificate.CertificateCertificate._compute_is_valid', _is_valid_certificate) def test_get_token_ok(self): seed = '023071972740' xml_expected_dte = misc.file_open(os.path.join( 'l10n_cl_edi', 'tests', 'expected_xml', 'token.xml')).read() self.assertXmlTreeEqual( self.get_xml_tree_from_string(self.env['l10n_cl.edi.util']._get_signed_token(self.certificate, seed).encode()), self.get_xml_tree_from_string(xml_expected_dte.encode()) ) def test_analyze_sii_result_rsc(self): sii_message = """ RSC Rechazado por Error en Schema 532 ( 2004/06/14 16:44:20) """ response_parsed = etree.fromstring(sii_message) self.assertEqual(self.env['l10n_cl.edi.util']._analyze_sii_result(response_parsed), 'rejected') def test_analyze_sii_result_sok(self): sii_message = """ SDK Schema Validado 532 ( 2004/06/14 16:44:20) """ response_parsed = etree.fromstring(sii_message) self.assertEqual(self.env['l10n_cl.edi.util']._analyze_sii_result(response_parsed), 'ask_for_status') def test_analyze_sii_result_crt(self): sii_message = """ CRT Caratula OK 532 ( 2004/06/14 16:44:20) """ response_parsed = etree.fromstring(sii_message) self.assertEqual(self.env['l10n_cl.edi.util']._analyze_sii_result(response_parsed), 'ask_for_status') def test_analyze_sii_result_rfr(self): sii_message = """ RFR Rechazado por Error en Firma 532 ( 2004/06/14 16:44:20) """ response_parsed = etree.fromstring(sii_message) self.assertEqual(self.env['l10n_cl.edi.util']._analyze_sii_result(response_parsed), 'rejected') def test_analyze_sii_result_fok(self): sii_message = """ 05 Error: RETORNO DATOS 532 ( 2004/06/14 16:44:20) """ response_parsed = etree.fromstring(sii_message) self.assertEqual(self.env['l10n_cl.edi.util']._analyze_sii_result(response_parsed), 'rejected') def test_analyze_sii_result_prd(self): sii_message = """ PRD Error Retorno Datos 532 ( 2004/06/14 16:44:20) """ response_parsed = etree.fromstring(sii_message) self.assertEqual(self.env['l10n_cl.edi.util']._analyze_sii_result(response_parsed), 'rejected') def test_analyze_sii_result_rct(self): sii_message = """ RCT Rechazado por Error en Carátula 532 ( 2004/06/14 16:44:20) """ response_parsed = etree.fromstring(sii_message) self.assertEqual(self.env['l10n_cl.edi.util']._analyze_sii_result(response_parsed), 'rejected') def test_analyze_sii_result_epr_accepted(self): sii_message = """ 251 EPR Envio Procesado 532 ( 2004/06/14 16:44:20) 33 1 1 0 0 """ response_parsed = etree.fromstring(sii_message) self.assertEqual(self.env['l10n_cl.edi.util']._analyze_sii_result(response_parsed), 'accepted') def test_analyze_sii_result_epr_rejected(self): sii_message = """ 251 EPR Envio Procesado 532 ( 2004/06/14 16:44:20) 33 1 0 1 0 """ response_parsed = etree.fromstring(sii_message) self.assertEqual(self.env['l10n_cl.edi.util']._analyze_sii_result(response_parsed), 'rejected') def test_analyze_sii_result_objected(self): sii_message = """ 251 EPR Envio Procesado 532 ( 2004/06/14 16:44:20) 33 1 0 0 1 """ response_parsed = etree.fromstring(sii_message) self.assertEqual(self.env['l10n_cl.edi.util']._analyze_sii_result(response_parsed), 'objected') def test_analyze_sii_result_srv_code(self): sii_message = """ -11 1 532 ( 2004/06/14 16:44:20) """ response_parsed = etree.fromstring(sii_message) self.assertEqual(self.env['l10n_cl.edi.util']._analyze_sii_result(response_parsed), 'ask_for_status')