From 1933ed99b888670d9e5e5778ee9169a4bde8f344 Mon Sep 17 00:00:00 2001 From: Isabela Morais Date: Mon, 10 Feb 2020 17:07:21 -0300 Subject: [PATCH 1/3] adding tests for rps batch --- .../nfse/paulistana/templates/EnvioLoteRPS.xml | 12 ++--- pytrustnfe/nfse/paulistana/templates/EnvioRPS.xml | 20 ++++---- .../test/XMLs/xml_send_rps_batch_to_paulistana.xml | 1 + pytrustnfe/test/const.py | 56 ++++++++++++++++++++ .../test/test_nfse_paulistana_email_tomador.py | 34 ++++++++++++ .../test/test_nfse_paulistana_endereco_tomador.py | 55 ++++++++++++++++++++ pytrustnfe/test/test_nfse_paulistana_para_lote.py | 28 ++++++++++ .../test/test_nfse_paulistana_tipo_cpfcnpj.py | 60 ++++++++++++++++++++++ .../test/test_nfse_paulistana_valores_default.py | 46 +++++++++++++++++ 9 files changed, 296 insertions(+), 16 deletions(-) create mode 100644 pytrustnfe/test/XMLs/xml_send_rps_batch_to_paulistana.xml create mode 100644 pytrustnfe/test/const.py create mode 100644 pytrustnfe/test/test_nfse_paulistana_email_tomador.py create mode 100644 pytrustnfe/test/test_nfse_paulistana_endereco_tomador.py create mode 100644 pytrustnfe/test/test_nfse_paulistana_para_lote.py create mode 100644 pytrustnfe/test/test_nfse_paulistana_tipo_cpfcnpj.py create mode 100644 pytrustnfe/test/test_nfse_paulistana_valores_default.py diff --git a/pytrustnfe/nfse/paulistana/templates/EnvioLoteRPS.xml b/pytrustnfe/nfse/paulistana/templates/EnvioLoteRPS.xml index 997e6cc..acc74c1 100644 --- a/pytrustnfe/nfse/paulistana/templates/EnvioLoteRPS.xml +++ b/pytrustnfe/nfse/paulistana/templates/EnvioLoteRPS.xml @@ -34,12 +34,12 @@ {{ rps.iss_retido | default('false') }} {% if rps.tomador.tipo_cpfcnpj != 3 %} - {% if rps.tomador.tipo_cpfcnpj == 1 -%} - {{ rps.tomador.cpf_cnpj }} - {% endif %} - {% if rps.tomador.tipo_cpfcnpj == 2 -%} - {{ rps.tomador.cpf_cnpj }} - {% endif %} + {% if rps.tomador.tipo_cpfcnpj == 1 -%} + {{ rps.tomador.cpf_cnpj }} + {% endif %} + {% if rps.tomador.tipo_cpfcnpj == 2 -%} + {{ rps.tomador.cpf_cnpj }} + {% endif %} {% endif %} {% if rps.tomador.inscricao_municipal -%} diff --git a/pytrustnfe/nfse/paulistana/templates/EnvioRPS.xml b/pytrustnfe/nfse/paulistana/templates/EnvioRPS.xml index 35e08cb..69deacf 100644 --- a/pytrustnfe/nfse/paulistana/templates/EnvioRPS.xml +++ b/pytrustnfe/nfse/paulistana/templates/EnvioRPS.xml @@ -6,11 +6,11 @@ {% for rps in nfse.lista_rps -%} - {{ rps.assinatura }} + {{ rps.assinatura }} - {{ rps.prestador.inscricao_municipal }} - {{ rps.serie }} - {{ rps.numero }} + {{ rps.prestador.inscricao_municipal }} + {{ rps.serie }} + {{ rps.numero }} {{ rps.tipo_rps | default('RPS') }} {{ rps.data_emissao }} @@ -28,12 +28,12 @@ {{ rps.iss_retido | default('false') }} {% if rps.tomador.tipo_cpfcnpj != 3 %} - {% if rps.tomador.tipo_cpfcnpj == 1 -%} - {{ rps.tomador.cpf_cnpj }} - {% endif %} - {% if rps.tomador.tipo_cpfcnpj == 2 -%} - {{ rps.tomador.cpf_cnpj }} - {% endif %} + {% if rps.tomador.tipo_cpfcnpj == 1 -%} + {{ rps.tomador.cpf_cnpj }} + {% endif %} + {% if rps.tomador.tipo_cpfcnpj == 2 -%} + {{ rps.tomador.cpf_cnpj }} + {% endif %} {% endif %} {% if rps.tomador.inscricao_municipal -%} diff --git a/pytrustnfe/test/XMLs/xml_send_rps_batch_to_paulistana.xml b/pytrustnfe/test/XMLs/xml_send_rps_batch_to_paulistana.xml new file mode 100644 index 0000000..63a3c1f --- /dev/null +++ b/pytrustnfe/test/XMLs/xml_send_rps_batch_to_paulistana.xml @@ -0,0 +1 @@ +12345678901234false2016-08-292016-08-29512312345610RPS2016-08-29NT0.000.000.000.000.00074985.00false12345678923256123456Trustcode1Vinicius de Moraes, 4242aaaCorregoFloripaSC88037240user@user.comVenda de servico12312345611RPS2016-08-29NT0.000.000.000.000.00074985.00false12345678923256123456Trustcode1Vinicius de Moraes, 4242aaaCorregoFloripaSC88037240user@user.comVenda de servico12312345612RPS2016-08-29NT0.000.000.000.000.00074985.00false12345678923256123456Trustcode1Vinicius de Moraes, 4242aaaCorregoFloripaSC88037240user@user.comVenda de servico12312345613RPS2016-08-29NT0.000.000.000.000.00074985.00false12345678923256123456Trustcode1Vinicius de Moraes, 4242aaaCorregoFloripaSC88037240user@user.comVenda de servico12312345614RPS2016-08-29NT0.000.000.000.000.00074985.00false12345678923256123456Trustcode1Vinicius de Moraes, 4242aaaCorregoFloripaSC88037240user@user.comVenda de servico \ No newline at end of file diff --git a/pytrustnfe/test/const.py b/pytrustnfe/test/const.py new file mode 100644 index 0000000..41d77fb --- /dev/null +++ b/pytrustnfe/test/const.py @@ -0,0 +1,56 @@ +LOTE_RPS = [ + { + 'assinatura': '123', + 'serie': '1', + 'numero': str(i), + 'data_emissao': '2016-08-29', + 'codigo_atividade': '07498', + 'total_servicos': '2.00', + 'total_deducoes': '3.00', + 'prestador': { + 'inscricao_municipal': '123456' + }, + 'tomador': { + 'tipo_cpfcnpj': 1, + 'cpf_cnpj': '12345678923256', + 'inscricao_municipal': '123456', + 'razao_social': 'Trustcode', + 'tipo_logradouro': '1', + 'complemento': 'aaa', + 'logradouro': 'Vinicius de Moraes, 42', + 'numero': '42', + 'bairro': 'Corrego', + 'cidade': 'Floripa', + 'uf': 'SC', + 'cep': '88037240', + 'email': 'user@user.com' + }, + 'codigo_atividade': '07498', + 'aliquota_atividade': '5.00', + 'descricao': 'Venda de servico' + } for i in range(5) +] + +DEFAULT_RPS = [ + { + 'assinatura': '123', + 'serie': '1', + 'numero': '1', + 'data_emissao': '2016-08-29', + 'codigo_atividade': '07498', + 'prestador': { + 'inscricao_municipal': '123456' + }, + 'tomador': { + 'tipo_cpfcnpj': 1, + 'cpf_cnpj': '12345678923256', + }, + } +] + +NFSE = { + 'cpf_cnpj': '12345678901234', + 'data_inicio': '2016-08-29', + 'data_fim': '2016-08-29', + 'lista_rps': [] +} diff --git a/pytrustnfe/test/test_nfse_paulistana_email_tomador.py b/pytrustnfe/test/test_nfse_paulistana_email_tomador.py new file mode 100644 index 0000000..c1617fe --- /dev/null +++ b/pytrustnfe/test/test_nfse_paulistana_email_tomador.py @@ -0,0 +1,34 @@ +# coding=utf-8 + +import unittest +from pytrustnfe.xml import render_xml, sanitize_response +from const import NFSE, DEFAULT_RPS + +template_path = '../nfse/paulistana/templates' + + +def _get_nfse(lista_rps): + nfse = NFSE + nfse['lista_rps'] = lista_rps + return nfse + + +def get_objects(nfse): + xml_rps = render_xml(template_path, 'EnvioRPS.xml', False, nfse=nfse) + _, obj_rps = sanitize_response(xml_rps) + + xml_lote_rps = render_xml(template_path, 'EnvioLoteRPS.xml', False, nfse=nfse) + _, obj_lote_rps = sanitize_response(xml_lote_rps) + + return obj_rps, obj_lote_rps + + +class test_nfse_paulistana_email_tomador(unittest.TestCase): + + def test_rps_sem_email(self): + nfse = _get_nfse(DEFAULT_RPS) + + obj_rps, obj_lote_rps = get_objects(nfse) + + self.assertFalse(hasattr(obj_rps.RPS, 'EmailTomador')) + self.assertFalse(hasattr(obj_lote_rps.RPS, 'EmailTomador')) \ No newline at end of file diff --git a/pytrustnfe/test/test_nfse_paulistana_endereco_tomador.py b/pytrustnfe/test/test_nfse_paulistana_endereco_tomador.py new file mode 100644 index 0000000..afffa66 --- /dev/null +++ b/pytrustnfe/test/test_nfse_paulistana_endereco_tomador.py @@ -0,0 +1,55 @@ +# coding=utf-8 + +import unittest +from pytrustnfe.xml import render_xml, sanitize_response +from const import NFSE, DEFAULT_RPS + + +attrs = ['TipoLogradouro', 'Logradouro', 'NumeroEndereco', 'ComplementoEndereco', 'Bairro', 'CEP'] + +template_path = '../nfse/paulistana/templates' + + +def _get_nfse(lista_rps): + nfse = NFSE + nfse['lista_rps'] = lista_rps + return nfse + + +def get_objects(nfse): + xml_rps = render_xml(template_path, 'EnvioRPS.xml', False, nfse=nfse) + _, obj_rps = sanitize_response(xml_rps) + + xml_lote_rps = render_xml(template_path, 'EnvioLoteRPS.xml', False, nfse=nfse) + _, obj_lote_rps = sanitize_response(xml_lote_rps) + + return obj_rps, obj_lote_rps + + +class test_nfse_paulistana_endereco_tomador(unittest.TestCase): + + def test_rps_sem_cidade(self): + nfse = _get_nfse(DEFAULT_RPS) + + obj_rps, obj_lote_rps = get_objects(nfse) + + self.assertFalse(hasattr(obj_rps.RPS, 'EnderecoTomador')) + self.assertFalse(hasattr(obj_lote_rps.RPS, 'EnderecoTomador')) + + def test_rps_sem_dados_endereco(self): + lista_rps = DEFAULT_RPS + + for rps in lista_rps: + rps['tomador']['cidade'] = 'Florianópolis' + rps['tomador']['cidade'] = 'SC' + + nfse = _get_nfse(lista_rps) + + obj_rps, obj_lote_rps = get_objects(nfse) + + self.assertTrue(hasattr(obj_rps.RPS, 'EnderecoTomador')) + self.assertTrue(hasattr(obj_lote_rps.RPS, 'EnderecoTomador')) + + for attr in attrs: + self.assertFalse(hasattr(obj_rps.RPS.EnderecoTomador, attr)) + self.assertFalse(hasattr(obj_lote_rps.RPS.EnderecoTomador, attr)) diff --git a/pytrustnfe/test/test_nfse_paulistana_para_lote.py b/pytrustnfe/test/test_nfse_paulistana_para_lote.py new file mode 100644 index 0000000..78634dc --- /dev/null +++ b/pytrustnfe/test/test_nfse_paulistana_para_lote.py @@ -0,0 +1,28 @@ +# coding=utf-8 + +import os.path +import unittest +from pytrustnfe.xml import render_xml, sanitize_response +from const import LOTE_RPS, NFSE + + +def _get_nfse(): + nfse = NFSE + nfse['lista_rps'] = LOTE_RPS + return nfse + + +class test_nfse_paulistana_para_lote(unittest.TestCase): + xml_path = os.path.join(os.path.dirname(__file__), 'XMLs') + template_path = '../nfse/paulistana/templates' + + def test_envio_nfse(self): + nfse = _get_nfse() + + xml_send = render_xml(self.template_path, 'EnvioLoteRPS.xml', False, nfse=nfse) + expected_xml = open(os.path.join(self.xml_path, 'xml_send_rps_batch_to_paulistana.xml'), 'r').read() + + _, obj = sanitize_response(xml_send) + + self.assertEqual(obj.Cabecalho.QtdRPS, 5) + self.assertEqual(xml_send, expected_xml) diff --git a/pytrustnfe/test/test_nfse_paulistana_tipo_cpfcnpj.py b/pytrustnfe/test/test_nfse_paulistana_tipo_cpfcnpj.py new file mode 100644 index 0000000..99ff043 --- /dev/null +++ b/pytrustnfe/test/test_nfse_paulistana_tipo_cpfcnpj.py @@ -0,0 +1,60 @@ +# coding=utf-8 + +import os.path +import unittest +from pytrustnfe.xml import render_xml, sanitize_response +from const import DEFAULT_RPS, NFSE + +template_path = '../nfse/paulistana/templates' + + +def _get_nfse(tipo_cpfcnpj): + nfse = NFSE + lista_rps = DEFAULT_RPS + + for rps in lista_rps: + rps['tomador']['tipo_cpfcnpj'] = tipo_cpfcnpj + rps['tomador']['cpf_cnpj'] = '12345678923256' + + nfse['lista_rps'] = lista_rps + return nfse + + +def get_objects(nfse): + xml_rps = render_xml(template_path, 'EnvioRPS.xml', False, nfse=nfse) + _, obj_rps = sanitize_response(xml_rps) + + xml_lote_rps = render_xml(template_path, 'EnvioLoteRPS.xml', False, nfse=nfse) + _, obj_lote_rps = sanitize_response(xml_lote_rps) + + return obj_rps, obj_lote_rps + + +class test_nfse_paulistana_tipo_cpfcnpj(unittest.TestCase): + + def test_tipo_cpfcnpj_1(self): + nfse = _get_nfse(tipo_cpfcnpj=1) + + obj_rps, obj_lote_rps = get_objects(nfse) + + self.assertTrue(hasattr(obj_rps.RPS, 'CPFCNPJTomador')) + self.assertTrue(hasattr(obj_rps.RPS.CPFCNPJTomador, 'CPF')) + self.assertTrue(hasattr(obj_lote_rps.RPS, 'CPFCNPJTomador')) + self.assertTrue(hasattr(obj_lote_rps.RPS.CPFCNPJTomador, 'CPF')) + + def test_tipo_cpfcnpj_2(self): + nfse = _get_nfse(tipo_cpfcnpj=2) + + obj_rps, obj_lote_rps = get_objects(nfse) + + self.assertTrue(hasattr(obj_rps.RPS, 'CPFCNPJTomador')) + self.assertTrue(hasattr(obj_rps.RPS.CPFCNPJTomador, 'CNPJ')) + self.assertTrue(hasattr(obj_lote_rps.RPS, 'CPFCNPJTomador')) + self.assertTrue(hasattr(obj_lote_rps.RPS.CPFCNPJTomador, 'CNPJ')) + + def test_tipo_cpfcnpj_3(self): + nfse = _get_nfse(tipo_cpfcnpj=3) + + obj_rps, obj_lote_rps = get_objects(nfse) + + self.assertFalse(hasattr(obj_rps.RPS, 'CPFCNPJTomador')) diff --git a/pytrustnfe/test/test_nfse_paulistana_valores_default.py b/pytrustnfe/test/test_nfse_paulistana_valores_default.py new file mode 100644 index 0000000..d974043 --- /dev/null +++ b/pytrustnfe/test/test_nfse_paulistana_valores_default.py @@ -0,0 +1,46 @@ +# coding=utf-8 + +import os.path +import unittest +from pytrustnfe.xml import render_xml, sanitize_response +from const import DEFAULT_RPS, NFSE + +default_values = { + 'TipoRPS': 'RPS', + 'TributacaoRPS': 'T', + 'ValorCOFINS': 0.0, + 'ValorINSS': 0.0, + 'ValorIR': 0.0, + 'ValorPIS': 0.0, + 'ValorCSLL': 0.0, + 'ISSRetido': False +} +attrs = ['TipoRPS', 'TributacaoRPS', 'ValorPIS', 'ValorCOFINS', 'ValorINSS', 'ValorIR', 'ValorCSLL', 'ISSRetido'] + + +def _get_nfse(): + nfse = NFSE + nfse['lista_rps'] = DEFAULT_RPS + return nfse + + +class test_nfse_paulistana_valores_default(unittest.TestCase): + template_path = '../nfse/paulistana/templates' + nfse = _get_nfse() + + def test_rps_sem_valores(self): + + xml_rps = render_xml(self.template_path, 'EnvioRPS.xml', False, nfse=self.nfse) + + _, obj = sanitize_response(xml_rps) + + for attr in attrs: + self.assertEqual(getattr(obj.RPS, attr), default_values[attr]) + + def test_lote_rps_sem_valores(self): + xml_lote_rps = render_xml(self.template_path, 'EnvioLoteRPS.xml', False, nfse=self.nfse) + + _, obj = sanitize_response(xml_lote_rps) + + for attr in attrs: + self.assertEqual(getattr(obj.RPS, attr), default_values[attr]) From 4404529147f8e9c937e6f68bb11a71750c0962b1 Mon Sep 17 00:00:00 2001 From: Isabela Morais Date: Tue, 11 Feb 2020 09:37:22 -0300 Subject: [PATCH 2/3] test batch size --- pytrustnfe/test/test_nfse_paulistana_para_lote.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pytrustnfe/test/test_nfse_paulistana_para_lote.py b/pytrustnfe/test/test_nfse_paulistana_para_lote.py index 78634dc..8d1bcad 100644 --- a/pytrustnfe/test/test_nfse_paulistana_para_lote.py +++ b/pytrustnfe/test/test_nfse_paulistana_para_lote.py @@ -15,6 +15,7 @@ def _get_nfse(): class test_nfse_paulistana_para_lote(unittest.TestCase): xml_path = os.path.join(os.path.dirname(__file__), 'XMLs') template_path = '../nfse/paulistana/templates' + BATCH_SIZE = len(LOTE_RPS) def test_envio_nfse(self): nfse = _get_nfse() @@ -24,5 +25,5 @@ class test_nfse_paulistana_para_lote(unittest.TestCase): _, obj = sanitize_response(xml_send) - self.assertEqual(obj.Cabecalho.QtdRPS, 5) + self.assertEqual(obj.Cabecalho.QtdRPS, self.BATCH_SIZE) self.assertEqual(xml_send, expected_xml) From 0af1e96eea68a7b03d1313d20894f7d2f9e49c68 Mon Sep 17 00:00:00 2001 From: Isabela Morais Date: Thu, 13 Feb 2020 15:22:41 -0300 Subject: [PATCH 3/3] improving idiom --- pytrustnfe/test/test_nfse_paulistana_email_tomador.py | 3 ++- pytrustnfe/test/test_nfse_paulistana_endereco_tomador.py | 3 ++- pytrustnfe/test/test_nfse_paulistana_para_lote.py | 2 +- pytrustnfe/test/test_nfse_paulistana_tipo_cpfcnpj.py | 2 +- pytrustnfe/test/test_nfse_paulistana_valores_default.py | 2 +- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/pytrustnfe/test/test_nfse_paulistana_email_tomador.py b/pytrustnfe/test/test_nfse_paulistana_email_tomador.py index c1617fe..0e1b2e0 100644 --- a/pytrustnfe/test/test_nfse_paulistana_email_tomador.py +++ b/pytrustnfe/test/test_nfse_paulistana_email_tomador.py @@ -1,10 +1,11 @@ # coding=utf-8 import unittest +import os.path from pytrustnfe.xml import render_xml, sanitize_response from const import NFSE, DEFAULT_RPS -template_path = '../nfse/paulistana/templates' +template_path = os.path.join(os.path.dirname(__file__), '..', 'nfse', 'paulistana', 'templates') def _get_nfse(lista_rps): diff --git a/pytrustnfe/test/test_nfse_paulistana_endereco_tomador.py b/pytrustnfe/test/test_nfse_paulistana_endereco_tomador.py index afffa66..ce3521f 100644 --- a/pytrustnfe/test/test_nfse_paulistana_endereco_tomador.py +++ b/pytrustnfe/test/test_nfse_paulistana_endereco_tomador.py @@ -1,13 +1,14 @@ # coding=utf-8 import unittest +import os.path from pytrustnfe.xml import render_xml, sanitize_response from const import NFSE, DEFAULT_RPS attrs = ['TipoLogradouro', 'Logradouro', 'NumeroEndereco', 'ComplementoEndereco', 'Bairro', 'CEP'] -template_path = '../nfse/paulistana/templates' +template_path = os.path.join(os.path.dirname(__file__), '..', 'nfse', 'paulistana', 'templates') def _get_nfse(lista_rps): diff --git a/pytrustnfe/test/test_nfse_paulistana_para_lote.py b/pytrustnfe/test/test_nfse_paulistana_para_lote.py index 8d1bcad..d0a8cf7 100644 --- a/pytrustnfe/test/test_nfse_paulistana_para_lote.py +++ b/pytrustnfe/test/test_nfse_paulistana_para_lote.py @@ -14,7 +14,7 @@ def _get_nfse(): class test_nfse_paulistana_para_lote(unittest.TestCase): xml_path = os.path.join(os.path.dirname(__file__), 'XMLs') - template_path = '../nfse/paulistana/templates' + template_path = os.path.join(os.path.dirname(__file__), '..', 'nfse', 'paulistana', 'templates') BATCH_SIZE = len(LOTE_RPS) def test_envio_nfse(self): diff --git a/pytrustnfe/test/test_nfse_paulistana_tipo_cpfcnpj.py b/pytrustnfe/test/test_nfse_paulistana_tipo_cpfcnpj.py index 99ff043..ac75af1 100644 --- a/pytrustnfe/test/test_nfse_paulistana_tipo_cpfcnpj.py +++ b/pytrustnfe/test/test_nfse_paulistana_tipo_cpfcnpj.py @@ -5,7 +5,7 @@ import unittest from pytrustnfe.xml import render_xml, sanitize_response from const import DEFAULT_RPS, NFSE -template_path = '../nfse/paulistana/templates' +template_path = os.path.join(os.path.dirname(__file__), '..', 'nfse', 'paulistana', 'templates') def _get_nfse(tipo_cpfcnpj): diff --git a/pytrustnfe/test/test_nfse_paulistana_valores_default.py b/pytrustnfe/test/test_nfse_paulistana_valores_default.py index d974043..ed7134e 100644 --- a/pytrustnfe/test/test_nfse_paulistana_valores_default.py +++ b/pytrustnfe/test/test_nfse_paulistana_valores_default.py @@ -25,7 +25,7 @@ def _get_nfse(): class test_nfse_paulistana_valores_default(unittest.TestCase): - template_path = '../nfse/paulistana/templates' + template_path = os.path.join(os.path.dirname(__file__), '..', 'nfse', 'paulistana', 'templates') nfse = _get_nfse() def test_rps_sem_valores(self):