Browse Source

Adding unit tests

tags/0.1.5
Danimar Ribeiro 9 years ago
parent
commit
e77aaa74a7
  1. 2
      pytrustnfe/Servidores.py
  2. 1
      pytrustnfe/test/XMLs/jinja_remove_empty.xml
  3. 1
      pytrustnfe/test/XMLs/jinja_result.xml
  4. 6
      pytrustnfe/test/XMLs/jinja_template.xml
  5. 20
      pytrustnfe/test/test_certificado.py
  6. 42
      pytrustnfe/test/test_servidores.py
  7. 8
      pytrustnfe/test/test_utils.py
  8. 26
      pytrustnfe/test/test_xml.py
  9. 88
      pytrustnfe/test/test_xml_serializacao.py
  10. 17
      pytrustnfe/utils.py
  11. 27
      pytrustnfe/xml/__init__.py
  12. 3
      pytrustnfe/xml/filters.py

2
pytrustnfe/Servidores.py

@ -111,7 +111,7 @@ METODO_WS = {
SVRS = {
NFE_AMBIENTE_PRODUCAO: {
'servidor': 'nfe.sefazvirtual.rs.gov.br',
'servidor': 'nfe.svrs.rs.gov.br',
WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento.asmx',
WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NfeAutorizacao.asmx',
WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NfeRetAutorizacao.asmx',

1
pytrustnfe/test/XMLs/jinja_remove_empty.xml

@ -0,0 +1 @@
<consNFeDest xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.01"><tpAmb>oi</tpAmb><CNPJ>ola</CNPJ><indEmi>comovai</indEmi></consNFeDest>

1
pytrustnfe/test/XMLs/jinja_result.xml

@ -0,0 +1 @@
<consNFeDest xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.01"><tpAmb>oi</tpAmb><CNPJ>ola</CNPJ><indNFe/><indEmi>comovai</indEmi></consNFeDest>

6
pytrustnfe/test/XMLs/jinja_template.xml

@ -0,0 +1,6 @@
<consNFeDest xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.01">
<tpAmb>{{ tag1 }}</tpAmb>
<CNPJ>{{ tag2 }}</CNPJ>
<indNFe></indNFe>
<indEmi>{{ tag3 }}</indEmi>
</consNFeDest>

20
pytrustnfe/test/test_certificado.py

@ -7,6 +7,8 @@ Created on Jun 14, 2015
import unittest
import os
import os.path
from pytrustnfe.certificado import Certificado
from pytrustnfe.certificado import save_cert_key
from pytrustnfe.certificado import extract_cert_and_key_from_pfx
CHAVE = '-----BEGIN PRIVATE KEY-----\n' \
@ -52,6 +54,24 @@ class test_assinatura(unittest.TestCase):
self.assertEqual(key, CHAVE, 'Chave gerada inválida')
self.assertEqual(cert, CERTIFICADO, 'Certificado inválido')
def test_save_pfx(self):
pfx_source = open(os.path.join(self.caminho, 'teste.pfx'), 'r').read()
pfx = Certificado(pfx_source, '123')
path = pfx.save_pfx()
saved = open(path, 'r').read()
self.assertEqual(pfx_source, saved,
'Arquivo pfx salvo não bate com arquivo lido')
def test_save_cert_and_key(self):
dir_pfx = open(os.path.join(self.caminho, 'teste.pfx'), 'r').read()
cert, key = extract_cert_and_key_from_pfx(dir_pfx, '123456')
cert_path, key_path = save_cert_key(cert, key)
cert_saved = open(cert_path, 'r').read()
key_saved = open(key_path, 'r').read()
self.assertEqual(
cert, cert_saved, 'Certificado não corresponde ao original')
self.assertEqual(key, key_saved, 'Chave não corresponde ao original')
def test_pfx_nao_existe(self):
self.assertRaises(Exception, extract_cert_and_key_from_pfx,
'file.pfx', '123456')

42
pytrustnfe/test/test_servidores.py

@ -0,0 +1,42 @@
# coding=utf-8
'''
Created on Jun 14, 2015
@author: danimar
'''
import unittest
from pytrustnfe.Servidores import localizar_url
url_ba = 'https://nfe.sefaz.ba.gov.br/webservices/NfeAutorizacao/NfeAutoriza\
cao.asmx'
url_sp = 'https://nfe.fazenda.sp.gov.br/ws/nfeautorizacao.asmx'
url_sc = 'https://nfe.svrs.rs.gov.br/ws/NfeAutorizacao/NfeAutorizacao.asmx'
url_rs = 'https://nfe.sefaz.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao.asmx'
url_cad_rs = 'https://cad.sefazrs.rs.gov.br/ws/cadconsultacadastro/cadcon\
sultacadastro2.asmx'
url_cad_sc = 'https://cad.svrs.rs.gov.br/ws/CadConsultaCadastro/CadConsult\
aCadastro2.asmx'
class test_servidores(unittest.TestCase):
def test_localizar_url(self):
url = localizar_url('NfeAutorizacao', '29', ambiente=1)
self.assertEqual(url, url_ba)
url = localizar_url('NfeAutorizacao', '35', ambiente=1)
self.assertEqual(url, url_sp)
url = localizar_url('NfeAutorizacao', '42', ambiente=1)
self.assertEqual(url, url_sc)
url = localizar_url('NfeAutorizacao', '43', ambiente=1)
self.assertEqual(url, url_rs)
url = localizar_url('NfeConsultaCadastro', '43', ambiente=2)
self.assertEqual(url, url_cad_rs)
url = localizar_url('NfeConsultaCadastro', '42', ambiente=2)
self.assertEqual(url, url_cad_sc)

8
pytrustnfe/test/test_utils.py

@ -8,7 +8,7 @@ import unittest
import datetime
from pytrustnfe.utils import date_tostring, datetime_tostring, \
gerar_chave
from pytrustnfe.utils import ChaveNFe
from pytrustnfe.utils import ChaveNFe, CabecalhoSoap
class test_utils(unittest.TestCase):
@ -18,6 +18,12 @@ class test_utils(unittest.TestCase):
'tipo': 0, 'codigo': '26730161'
}
def test_cabecalho_soap(self):
head = CabecalhoSoap(versao=1, estado='SC', soap_action='Autorizacao')
self.assertEqual(head.versao, 1)
self.assertEqual(head.estado, 'SC')
self.assertEqual(head.soap_action, 'Autorizacao')
def test_date_tostring(self):
hoje = datetime.date.today()
data = date_tostring(hoje)

26
pytrustnfe/test/test_xml.py

@ -0,0 +1,26 @@
# coding=utf-8
'''
Created on Jun 14, 2015
@author: danimar
'''
import unittest
from datetime import datetime
from pytrustnfe.xml.filters import normalize_str
from pytrustnfe.xml.filters import format_percent
from pytrustnfe.xml.filters import format_date
from pytrustnfe.xml.filters import format_datetime
class test_xmlfilters(unittest.TestCase):
def test_xmlfilters(self):
word = normalize_str('ação café pó pá veêm')
self.assertEqual(word, 'acao cafe po pa veem')
self.assertEqual(1.5, format_percent(150))
self.assertEqual('aa', format_date('aa'))
self.assertEqual('aa', format_datetime('aa'))
dt = datetime(2016, 9, 17, 12, 12, 12)
self.assertEqual('2016-09-17', format_date(dt.date()))
self.assertEqual('2016-09-17T12:12:12', format_datetime(dt))

88
pytrustnfe/test/test_xml_serializacao.py

@ -1,65 +1,37 @@
# coding=utf-8
import os.path
import unittest
from unittest import skip
XML_TESTE = '<enviNFe versao="3.10">'\
'<idLote>1</idLote>'\
'<indSinc>1</indSinc>'\
'<NFe>'\
'<infNFe versao="3.10" Id="NFe456465465465465654652123564878">'\
'<ide>'\
'<cUF>32</cUF>'\
'<cNF>0001</cNF>'\
'<natOp>Venda de mercadorias</natOp>'\
'</ide>'\
'</infNFe>'\
'</NFe>'\
'</enviNFe>'
XML_LIST = '<cobr>'\
'<dup item="1">'\
'<nDup>1</nDup>'\
'<dVenc>21-06-2015</dVenc>'\
'<vDup>123.00</vDup>'\
'</dup>'\
'<dup item="2">'\
'<nDup>2</nDup>'\
'<dVenc>21-07-2015</dVenc>'\
'<vDup>123.00</vDup>'\
'</dup>'\
'</cobr>'
from lxml import etree
from pytrustnfe.xml import render_xml
from pytrustnfe.xml import sanitize_response
class test_xml_serializacao(unittest.TestCase):
@skip('Pulando')
def test_serializacao(self):
t = DynamicXml("enviNFe")
t(versao="3.10")
t.idLote = "1"
t.indSinc = "1"
t.NFe.infNFe(versao="3.10", Id="NFe456465465465465654652123564878")
t.NFe.infNFe.ide.cUF = "32"
t.NFe.infNFe.ide.cNF = "0001"
t.NFe.infNFe.ide.natOp = "Venda de mercadorias"
xml = t.render()
self.assertEqual(xml, XML_TESTE, "Geração de xml com problemas")
@skip('Pulando')
def test_list_serializacao(self):
t = DynamicXml("cobr")
t.dup[0](item="1")
t.dup[0].nDup = '1'
t.dup[0].dVenc = '21-06-2015'
t.dup[0].vDup = '123.00'
t.dup[1](item="2")
t.dup[1].nDup = '2'
t.dup[1].dVenc = '21-07-2015'
t.dup[1].vDup = '123.00'
xml = t.render()
self.assertEqual(xml, XML_LIST,
"Xml com lista de valores sendo gerado incorretamnte")
def test_serializacao_default(self):
path = os.path.join(os.path.dirname(__file__), 'XMLs')
xml = render_xml(path, 'jinja_template.xml', False, tag1='oi',
tag2='ola', tag3='comovai')
result = open(os.path.join(path, 'jinja_result.xml'), 'r').read()
self.assertEqual(xml + '\n', result)
def test_serializacao_remove_empty(self):
path = os.path.join(os.path.dirname(__file__), 'XMLs')
xmlElem = render_xml(path, 'jinja_template.xml', True, tag1='oi',
tag2='ola', tag3='comovai')
xml = etree.tostring(xmlElem)
result = open(os.path.join(path, 'jinja_remove_empty.xml'), 'r').read()
self.assertEqual(xml + '\n', result)
def test_sanitize_response(self):
path = os.path.join(os.path.dirname(__file__), 'XMLs')
xml_to_clear = open(os.path.join(path, 'jinja_result.xml'), 'r').read()
xml, obj = sanitize_response(xml_to_clear)
self.assertEqual(xml, xml_to_clear)
self.assertEqual(obj.tpAmb, 'oi')
self.assertEqual(obj.CNPJ, 'ola')
self.assertEqual(obj.indNFe, '')
self.assertEqual(obj.indEmi, 'comovai')

17
pytrustnfe/utils.py

@ -47,18 +47,15 @@ def datetime_tostring(data):
return data.strftime("%d-%m-%y %H:%M:%S")
def gerar_consulta_recibo(recibo):
return {'tpAmb': recibo.tpAmb, 'nRec': recibo.infRec.nRec}
def gerar_chave(obj_chave, prefix=None):
assert isinstance(obj_chave, ChaveNFe), "Objeto deve ser do tipo ChaveNFe"
obj_chave.validar()
chave_parcial = "%s%s%s%s%s%09d%d%s" % (obj_chave.estado, obj_chave.emissao,
obj_chave.cnpj, obj_chave.modelo,
obj_chave.serie.zfill(3), obj_chave.numero,
obj_chave.tipo, obj_chave.codigo)
chave_parcial = "%s%s%s%s%s%09d%d%s" % (
obj_chave.estado, obj_chave.emissao,
obj_chave.cnpj, obj_chave.modelo,
obj_chave.serie.zfill(3), obj_chave.numero,
obj_chave.tipo, obj_chave.codigo)
soma = 0
contador = 2
for c in reversed(chave_parcial):
@ -70,7 +67,3 @@ def gerar_chave(obj_chave, prefix=None):
if prefix:
return prefix + chave_parcial + str(dv)
return chave_parcial + str(dv)
def descompacta_nfe_distribuicao(xml):
pass

27
pytrustnfe/xml/__init__.py

@ -55,30 +55,3 @@ def sanitize_response(response):
elem.tag = elem.tag[i+1:]
objectify.deannotate(tree, cleanup_namespaces=True)
return response, objectify.fromstring(etree.tostring(tree))
def valida_schema(xml, arquivo_xsd):
'''Função que valida um XML usando lxml do Python via arquivo XSD'''
# Carrega o esquema XML do arquivo XSD
xsd = etree.XMLSchema(file=arquivo_xsd)
# Converte o XML passado em XML do lxml
xml = etree.fromstring(str(xml))
# Verifica a validade do xml
erros = []
if not xsd(xml):
# Caso tenha erros, cria uma lista de erros
for erro in xsd.error_log:
erros.append({
'message': erro.message,
'domain': erro.domain,
'type': erro.type,
'level': erro.level,
'line': erro.line,
'column': erro.column,
'filename': erro.filename,
'domain_name': erro.domain_name,
'type_name': erro.type_name,
'level_name': erro.level_name
})
# Retorna os erros, sendo uma lista vazia caso não haja erros
return erros

3
pytrustnfe/xml/filters.py

@ -3,6 +3,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from decimal import Decimal
from datetime import date
from datetime import datetime
from unicodedata import normalize
@ -41,6 +42,6 @@ def format_date(value):
Format date
"""
dt_format = '%Y-%m-%d'
if isinstance(value, datetime):
if isinstance(value, date):
return value.strftime(dt_format)
return value
Loading…
Cancel
Save