# Path: pytrustnfe/utils.py
# def date_tostring(data):
#     assert isinstance(data, date), "Objeto date requerido"
#     return data.strftime("%d-%m-%y")
# 
# def datetime_tostring(data):
#     assert isinstance(data, datetime), "Objeto datetime requerido"
#     return data.strftime("%d-%m-%y %H:%M:%S")
# 
# 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%s%d%s" % (
#         obj_chave.estado,
#         obj_chave.emissao,
#         obj_chave.cnpj,
#         obj_chave.modelo,
#         obj_chave.serie.zfill(3),
#         str(obj_chave.numero).zfill(9),
#         obj_chave.tipo,
#         obj_chave.codigo,
#     )
#     chave_parcial = re.sub("[^0-9]", "", chave_parcial)
#     soma = 0
#     contador = 2
#     for c in reversed(chave_parcial):
#         soma += int(c) * contador
#         contador += 1
#         if contador == 10:
#             contador = 2
#     dv = (11 - soma % 11) if (soma % 11 != 0 and soma % 11 != 1) else 0
#     if prefix:
#         return prefix + chave_parcial + str(dv)
#     return chave_parcial + str(dv)
# 
# Path: pytrustnfe/utils.py
# class ChaveNFe(object):
#     def __init__(self, **kwargs):
#         self.cnpj = kwargs.pop("cnpj", "")
#         self.estado = kwargs.pop("estado", "")
#         self.emissao = kwargs.pop("emissao", "")
#         self.modelo = kwargs.pop("modelo", "")
#         self.serie = kwargs.pop("serie", "")
#         self.numero = kwargs.pop("numero", "")
#         self.tipo = kwargs.pop("tipo", "")
#         self.codigo = kwargs.pop("codigo", "")
# 
#     def validar(self):
#         assert self.cnpj != "", "CNPJ necessário para criar chave NF-e"
#         assert self.estado != "", "Estado necessário para criar chave NF-e"
#         assert self.emissao != "", "Emissão necessário para criar chave NF-e"
#         assert self.modelo != "", "Modelo necessário para criar chave NF-e"
#         assert self.serie != "", "Série necessária para criar chave NF-e"
#         assert self.numero != "", "Número necessário para criar chave NF-e"
#         assert self.tipo != "", "Tipo necessário para criar chave NF-e"
#         assert self.codigo != "", "Código necessário para criar chave NF-e"


import unittest
import datetime
from pytrustnfe.utils import date_tostring, datetime_tostring, gerar_chave
from pytrustnfe.utils import ChaveNFe


class test_utils(unittest.TestCase):
    kwargs = {
        "cnpj": "33009911002506",
        "estado": "52",
        "emissao": "0604",
        "modelo": "55",
        "serie": "012",
        "numero": 780,
        "tipo": 0,
        "codigo": "26730161",
    }

    def test_date_tostring(self):
        hoje = datetime.date.today()
        data = date_tostring(hoje)
        self.assertEqual(data, hoje.strftime("%d-%m-%y"), "Não convertido corretamente")
        self.assertRaises(Exception, date_tostring, "Not a date")

    def test_datetime_tostring(self):
        hoje = datetime.datetime.now()
        data = datetime_tostring(hoje)
        self.assertEqual(
            data, hoje.strftime("%d-%m-%y %H:%M:%S"), "Não convertido corretamente"
        )
        self.assertRaises(Exception, datetime_tostring, "Not a date")

    def test_geracao_chave(self):
        chave = ChaveNFe(**self.kwargs)

# Path: pytrustnfe/utils.py
# def date_tostring(data):
#     assert isinstance(data, date), "Objeto date requerido"
#     return data.strftime("%d-%m-%y")
# 
# def datetime_tostring(data):
#     assert isinstance(data, datetime), "Objeto datetime requerido"
#     return data.strftime("%d-%m-%y %H:%M:%S")
# 
# 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%s%d%s" % (
#         obj_chave.estado,
#         obj_chave.emissao,
#         obj_chave.cnpj,
#         obj_chave.modelo,
#         obj_chave.serie.zfill(3),
#         str(obj_chave.numero).zfill(9),
#         obj_chave.tipo,
#         obj_chave.codigo,
#     )
#     chave_parcial = re.sub("[^0-9]", "", chave_parcial)
#     soma = 0
#     contador = 2
#     for c in reversed(chave_parcial):
#         soma += int(c) * contador
#         contador += 1
#         if contador == 10:
#             contador = 2
#     dv = (11 - soma % 11) if (soma % 11 != 0 and soma % 11 != 1) else 0
#     if prefix:
#         return prefix + chave_parcial + str(dv)
#     return chave_parcial + str(dv)
# 
# Path: pytrustnfe/utils.py
# class ChaveNFe(object):
#     def __init__(self, **kwargs):
#         self.cnpj = kwargs.pop("cnpj", "")
#         self.estado = kwargs.pop("estado", "")
#         self.emissao = kwargs.pop("emissao", "")
#         self.modelo = kwargs.pop("modelo", "")
#         self.serie = kwargs.pop("serie", "")
#         self.numero = kwargs.pop("numero", "")
#         self.tipo = kwargs.pop("tipo", "")
#         self.codigo = kwargs.pop("codigo", "")
# 
#     def validar(self):
#         assert self.cnpj != "", "CNPJ necessário para criar chave NF-e"
#         assert self.estado != "", "Estado necessário para criar chave NF-e"
#         assert self.emissao != "", "Emissão necessário para criar chave NF-e"
#         assert self.modelo != "", "Modelo necessário para criar chave NF-e"
#         assert self.serie != "", "Série necessária para criar chave NF-e"
#         assert self.numero != "", "Número necessário para criar chave NF-e"
#         assert self.tipo != "", "Tipo necessário para criar chave NF-e"
#         assert self.codigo != "", "Código necessário para criar chave NF-e"


# Path: tests/test_utils.py
import unittest
import datetime
from pytrustnfe.utils import date_tostring, datetime_tostring, gerar_chave
from pytrustnfe.utils import ChaveNFe



class test_utils(unittest.TestCase):
    kwargs = {
        "cnpj": "33009911002506",
        "estado": "52",
        "emissao": "0604",
        "modelo": "55",
        "serie": "012",
        "numero": 780,
        "tipo": 0,
        "codigo": "26730161",
    }

    def test_date_tostring(self):
        hoje = datetime.date.today()
        data = date_tostring(hoje)
        self.assertEqual(data, hoje.strftime("%d-%m-%y"), "Não convertido corretamente")
        self.assertRaises(Exception, date_tostring, "Not a date")

    def test_datetime_tostring(self):
        hoje = datetime.datetime.now()
        data = datetime_tostring(hoje)
        self.assertEqual(
            data, hoje.strftime("%d-%m-%y %H:%M:%S"), "Não convertido corretamente"
        )
        self.assertRaises(Exception, datetime_tostring, "Not a date")

    def test_geracao_chave(self):
        chave = ChaveNFe(**self.kwargs)

        str_chave = gerar_chave(chave)