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])