# -*- 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\nService Temporarily Unavailable
\nThe 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')