#!/usr/bin/env python3 import unittest import warnings import httpx from uuid import UUID URL_API = 'http://127.0.0.1:8000/api/{}' PATH_CERT = 'certificados/comercio.{}' CFDI_MINIMO = { "comprobante": { "TipoCambio": "1", "Moneda": "MXN", "TipoDeComprobante": "I", "LugarExpedicion": "06850", "SubTotal": "1000.00", "Total": "1160.00", "FormaPago": "03", "MetodoPago": "PUE", }, "emisor": { "Rfc": "EKU9003173C9", "RegimenFiscal": "601", }, "receptor": { "Rfc": "BASM740115RW0", "UsoCFDI": "G01" }, "conceptos": [ { "ClaveProdServ": "60121001", "Cantidad": "1.0", "ClaveUnidad": "KGM", "Descripcion": "Asesoría en desarrollo", "ValorUnitario": "1000.00", "Importe": "1000.00", "impuestos": { "traslados": [ { "Base": "1000.00", "Impuesto": "002", "TipoFactor": "Tasa", "TasaOCuota": "0.160000", "Importe": "160.00" } ] } } ], "impuestos": { "TotalImpuestosTrasladados": "160.00", "traslados": [ { "Impuesto": "002", "TipoFactor": "Tasa", "TasaOCuota": "0.160000", "Importe": "160.00" } ] } } CFDI_ISH = { "comprobante": { "TipoCambio": "1", "Moneda": "MXN", "TipoDeComprobante": "I", "LugarExpedicion": "06850", "SubTotal": "1409.64", "Total": "1677.47", "FormaPago": "03", "MetodoPago": "PUE" }, "emisor": { "Rfc": "EKU9003173C9", "RegimenFiscal": "601" }, "receptor": { "Rfc": "BASM740115RW0", "UsoCFDI": "G01" }, "conceptos": [ { "ClaveProdServ": "81112106", "Cantidad": "1.0", "ClaveUnidad": "18", "Descripcion": "Proveedores de servicios de aplicación", "ValorUnitario": "1409.64", "Importe": "1409.64", "impuestos": { "traslados": [ { "Base": "1409.64", "Impuesto": "002", "TipoFactor": "Tasa", "TasaOCuota": "0.160000", "Importe": "225.54" } ] } } ], "impuestos": { "TotalImpuestosTrasladados": "225.54", "traslados": [ { "Impuesto": "002", "TipoFactor": "Tasa", "TasaOCuota": "0.160000", "Importe": "225.54" } ] }, "complementos": { "impuestos_locales": { "TotaldeTraslados": "42.29", "TotaldeRetenciones": "0.00", "traslados": [ { "ImpLocTrasladado": "ISH", "TasadeTraslado": "3.00", "Importe": "42.29" } ] } } } def ignore_warnings(test_func): def do_test(self, *args, **kwargs): with warnings.catch_warnings(): warnings.simplefilter("ignore") test_func(self, *args, **kwargs) return do_test class TestClients(unittest.TestCase): def setUp(self): print(f'In method: {self._testMethodName}') self.url = URL_API.format('clients/') def test_unauthorized_without_token(self): expected = 401 result = httpx.post(self.url) self.assertEqual(expected, result.status_code) def test_unauthorized_with_token(self): expected = 401 result = httpx.post(self.url, headers={'Token': '123'}) self.assertEqual(expected, result.status_code) @ignore_warnings def test_01_add_client(self): expected = 201 headers = {'Token': '12345'} data = { 'rfc': 'EKU9003173C9', 'password': '12345678a', } files = { 'cer': open(PATH_CERT.format('cer'), 'rb'), 'key': open(PATH_CERT.format('key'), 'rb'), } result = httpx.post(self.url, headers=headers, data=data, files=files) self.assertEqual(expected, result.status_code) def test_02_get_client(self): expected = 200 headers = {'Token': '12345'} params = {'rfc': 'EKU9003173C9'} result = httpx.get(self.url, headers=headers, params=params) self.assertEqual(expected, result.status_code) def test_03_delete_client(self): expected = 200 headers = {'Token': '12345'} params = {'rfc': 'EKU9003173C9'} result = httpx.delete(self.url, headers=headers, params=params) self.assertEqual(expected, result.status_code) def test_04_delete_client_not_exists(self): expected = 202 headers = {'Token': '12345'} params = {'rfc': 'EKU900317321'} result = httpx.delete(self.url, headers=headers, params=params) self.assertEqual(expected, result.status_code) class TestCfdi(unittest.TestCase): def setUp(self): print(f'In method: {self._testMethodName}') self.url = URL_API.format('cfdi/') # ~ @unittest.skip('temp') def test_stamp_cfdi_emisor_not_exists(self): expected = 202 msg = 'Emisor no existe' headers = {'Token': '12345'} cfdi = CFDI_MINIMO.copy() cfdi['emisor']['Rfc'] = 'No_exists' result = httpx.post(self.url, headers=headers, json=cfdi) self.assertEqual(result.text, msg) self.assertEqual(expected, result.status_code) def test_stamp_cfdi(self): expected = 201 headers = {'Token': '12345'} result = httpx.post(self.url, headers=headers, json=CFDI_MINIMO) data = result.json() self.assertEqual(expected, result.status_code) self.assertTrue(bool(UUID(data['uuid']))) def test_stamp_cfdi_ish(self): expected = 201 headers = {'Token': '12345'} result = httpx.post(self.url, headers=headers, json=CFDI_ISH) data = result.json() self.assertEqual(expected, result.status_code) self.assertTrue(bool(UUID(data['uuid']))) if __name__ == '__main__': unittest.main()