diff --git a/tests/fixtures.py b/tests/fixtures.py index 9bdd9fc..574e3ac 100644 --- a/tests/fixtures.py +++ b/tests/fixtures.py @@ -100,6 +100,7 @@ def simple_invoice_without_lines(): )) return inv + @pytest.fixture def simple_invoice(): inv = form.NationalSalesInvoice() @@ -130,19 +131,20 @@ def simple_invoice(): form.Country('CO', 'Colombia'), form.CountrySubentity('05', 'Antioquia')) )) + inv.add_invoice_line(form.InvoiceLine( - quantity = form.Quantity(1, '94'), - description = 'producto facho', - item = form.StandardItem( 9999), - price = form.Price(form.Amount(100.0), '01', ''), - tax = form.TaxTotal( - tax_amount = form.Amount(0.0), - taxable_amount = form.Amount(0.0), - subtotals = [ + quantity=form.Quantity(1, '94'), + description='productofacho', + item=form.StandardItem(9999), + price=form.Price(form.Amount(100.0),'01',''), + tax=form.TaxTotal( + tax_amount=form.Amount(0.0), + taxable_amount=form.Amount(0.0), + subtotals=[ form.TaxSubTotal( - percent = 19.0, - ) - ] - ) + percent=19.0, + )]), + withholding=form.WithholdingTaxTotal( + subtotals=[]) )) return inv diff --git a/tests/test_fe_form.py b/tests/test_fe_form.py index ca7f4b9..9b28f2e 100644 --- a/tests/test_fe_form.py +++ b/tests/test_fe_form.py @@ -5,24 +5,49 @@ """Tests for `facho` package.""" -import pytest from datetime import datetime import io import zipfile import facho.fe.form as form from facho import fe -from facho.fe.form_xml import DIANInvoiceXML, DIANCreditNoteXML, DIANDebitNoteXML +from facho.fe.form_xml import ( + DIANInvoiceXML, DIANCreditNoteXML, DIANDebitNoteXML) + +from fixtures import ( + simple_invoice, + simple_invoice_without_lines, + simple_credit_note_without_lines, + simple_debit_note_without_lines) + + +CUDE_ = ('907e4444decc9e59' + '160a2fb3b6659b33d' + 'c5b632a5008922b9a' + '62f83f757b1c448e4' + '7f5867f2b50dbdb96f48c7681168') + +CUFE_ = ( + '8bb918b19ba22a694f1da' + '11c643b5e9de39adf60311c' + 'f179179e9b33381030bcd4c3c' + '3f156c506ed5908f9276f5bd9b4') + +simple_invoice = simple_invoice +simple_invoice_without_lines = simple_invoice_without_lines +simple_credit_note_without_lines = simple_credit_note_without_lines +simple_debit_note_without_lines = simple_debit_note_without_lines -from fixtures import * def test_invoicesimple_build(simple_invoice): xml = DIANInvoiceXML(simple_invoice) - supplier_name = xml.get_element_text('/fe:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PartyName/cbc:Name') + supplier_name = xml.get_element_text( + '/fe:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PartyName/cbc:Name') assert supplier_name == simple_invoice.invoice_supplier.name - customer_name = xml.get_element_text('/fe:Invoice/cac:AccountingCustomerParty/cac:Party/cac:PartyName/cbc:Name') + customer_name = xml.get_element_text( + '/fe:Invoice/cac:AccountingCustomerParty/cac:Party/cac:PartyName/cbc:Name') assert customer_name == simple_invoice.invoice_customer.name @@ -42,9 +67,11 @@ def test_invoicesimple_xml_signed(monkeypatch, simple_invoice): print(xml.tostring()) xml.add_extension(signer) - elem = xml.get_element('/fe:Invoice/ext:UBLExtensions/ext:UBLExtension[2]/ext:ExtensionContent/ds:Signature') + elem = xml.get_element( + '/fe:Invoice/ext:UBLExtensions/ext:UBLExtension[2]/ext:ExtensionContent/ds:Signature') assert elem.text is not None + def test_invoicesimple_zip(simple_invoice): xml_invoice = DIANInvoiceXML(simple_invoice) @@ -66,26 +93,33 @@ def test_invoicesimple_zip(simple_invoice): def test_bug_cbcid_empty_on_invoice_line(simple_invoice): xml_invoice = DIANInvoiceXML(simple_invoice) - cbc_id = xml_invoice.get_element_text('/fe:Invoice/cac:InvoiceLine[1]/cbc:ID', format_=int) + cbc_id = xml_invoice.get_element_text( + '/fe:Invoice/cac:InvoiceLine[1]/cbc:ID', format_=int) assert cbc_id == 1 + def test_invoice_line_count_numeric(simple_invoice): xml_invoice = DIANInvoiceXML(simple_invoice) - count = xml_invoice.get_element_text('/fe:Invoice/cbc:LineCountNumeric', format_=int) + count = xml_invoice.get_element_text( + '/fe:Invoice/cbc:LineCountNumeric', format_=int) assert count == len(simple_invoice.invoice_lines) + def test_invoice_profileexecutionid(simple_invoice): xml_invoice = DIANInvoiceXML(simple_invoice) cufe_extension = fe.DianXMLExtensionCUFE(simple_invoice) xml_invoice.add_extension(cufe_extension) - id_ = xml_invoice.get_element_text('/fe:Invoice/cbc:ProfileExecutionID', format_=int) + id_ = xml_invoice.get_element_text( + '/fe:Invoice/cbc:ProfileExecutionID', format_=int) assert id_ == 2 + def test_invoice_invoice_type_code(simple_invoice): xml_invoice = DIANInvoiceXML(simple_invoice) id_ = xml_invoice.get_element_text('/fe:Invoice/cbc:InvoiceTypeCode', format_=int) assert id_ == 1 + def test_invoice_totals(simple_invoice_without_lines): simple_invoice = simple_invoice_without_lines simple_invoice.invoice_ident = '323200000129' @@ -171,26 +205,30 @@ def test_invoice_cufe(simple_invoice_without_lines): xml_invoice.add_extension(cufe_extension) cufe = xml_invoice.get_element_text('/fe:Invoice/cbc:UUID') # RESOLUCION 004: pagina 689 - assert cufe == '8bb918b19ba22a694f1da11c643b5e9de39adf60311cf179179e9b33381030bcd4c3c3f156c506ed5908f9276f5bd9b4' - + assert cufe == CUFE_ def test_credit_note_cude(simple_credit_note_without_lines): simple_invoice = simple_credit_note_without_lines simple_invoice.invoice_ident = '8110007871' - simple_invoice.invoice_issue = datetime.strptime('2019-01-12 07:00:00-05:00', '%Y-%m-%d %H:%M:%S%z') - simple_invoice.invoice_supplier.ident = form.PartyIdentification('900373076', '5', '31') - simple_invoice.invoice_customer.ident = form.PartyIdentification('8355990', '5', '31') + simple_invoice.invoice_issue = datetime.strptime( + '2019-01-12 07:00:00-05:00', '%Y-%m-%d %H:%M:%S%z') + simple_invoice.invoice_supplier.ident = form.PartyIdentification( + '900373076', '5', '31') + simple_invoice.invoice_customer.ident = form.PartyIdentification( + '8355990', '5', '31') simple_invoice.add_invoice_line(form.InvoiceLine( - quantity = form.Quantity(1, '94'), - description = 'producto', - item = form.StandardItem(111), - price = form.Price(form.Amount(5_000), '01', ''), - tax = form.TaxTotal( - subtotals = [ + quantity=form.Quantity( + 1, '94'), + description='producto', + item=form.StandardItem(111), + price=form.Price( + form.Amount(5_000), '01', ''), + tax=form.TaxTotal( + subtotals=[ form.TaxSubTotal( - scheme = form.TaxScheme('01'), - percent = 19.0 + scheme=form.TaxScheme('01'), + percent=19.0 )]) )) @@ -200,33 +238,38 @@ def test_credit_note_cude(simple_credit_note_without_lines): cude_extension = fe.DianXMLExtensionCUDE( simple_invoice, '12301', - tipo_ambiente = fe.AMBIENTE_PRODUCCION, + tipo_ambiente=fe.AMBIENTE_PRODUCCION, ) xml_invoice.add_extension(cude_extension) cude = xml_invoice.get_element_text('/fe:CreditNote/cbc:UUID') # pag 612 - assert cude == '907e4444decc9e59c160a2fb3b6659b33dc5b632a5008922b9a62f83f757b1c448e47f5867f2b50dbdb96f48c7681168' + assert cude == CUDE_ # pag 614 def test_debit_note_cude(simple_debit_note_without_lines): simple_invoice = simple_debit_note_without_lines simple_invoice.invoice_ident = 'ND1001' - simple_invoice.invoice_issue = datetime.strptime('2019-01-18 10:58:00-05:00', '%Y-%m-%d %H:%M:%S%z') - simple_invoice.invoice_supplier.ident = form.PartyIdentification('900197264', '5', '31') - simple_invoice.invoice_customer.ident = form.PartyIdentification('10254102', '5', '31') + simple_invoice.invoice_issue = datetime.strptime( + '2019-01-18 10:58:00-05:00', '%Y-%m-%d %H:%M:%S%z') + simple_invoice.invoice_supplier.ident = form.PartyIdentification( + '900197264', '5', '31') + simple_invoice.invoice_customer.ident = form.PartyIdentification( + '10254102', '5', '31') simple_invoice.add_invoice_line(form.InvoiceLine( - quantity = form.Quantity(1, '94'), - description = 'producto', - item = form.StandardItem(111), - price = form.Price(form.Amount(30_000), '01', ''), - tax = form.TaxTotal( - subtotals = [ + quantity=form.Quantity(1, '94'), + description='producto', + item=form.StandardItem(111), + price=form.Price(form.Amount(30_000), '01', ''), + tax=form.TaxTotal( + subtotals=[ form.TaxSubTotal( - scheme = form.TaxScheme('04'), - percent = 8.0 - )]) + scheme=form.TaxScheme('04'), + percent=8.0 + )]), + withholding=form.WithholdingTaxTotal( + subtotals=[]) )) simple_invoice.calculate() @@ -235,7 +278,7 @@ def test_debit_note_cude(simple_debit_note_without_lines): cude_extension = fe.DianXMLExtensionCUDE( simple_invoice, '10201', - tipo_ambiente = fe.AMBIENTE_PRUEBAS, + tipo_ambiente=fe.AMBIENTE_PRUEBAS, ) build_vars = cude_extension.buildVars() assert build_vars['NumFac'] == 'ND1001' @@ -251,8 +294,7 @@ def test_debit_note_cude(simple_debit_note_without_lines): assert build_vars['Software-PIN'] == '10201' assert build_vars['TipoAmb'] == 2 - - cude_composicion = "".join(cude_extension.formatVars()) + cude_composicion = "".join(cude_extension.formatVars()) assert cude_composicion == 'ND10012019-01-1810:58:00-05:0030000.00010.00042400.00030.0032400.0090019726410254102102012' xml_invoice.add_extension(cude_extension) diff --git a/tests/test_form.py b/tests/test_form.py index f0490df..2e2559a 100644 --- a/tests/test_form.py +++ b/tests/test_form.py @@ -13,6 +13,17 @@ import pytest import facho.fe.form as form # from facho import fe +from fixtures import ( + simple_invoice, + simple_invoice_without_lines, + simple_credit_note_without_lines, + simple_debit_note_without_lines) + +simple_invoice = simple_invoice +simple_invoice_without_lines = simple_invoice_without_lines +simple_credit_note_without_lines = simple_credit_note_without_lines +simple_debit_note_without_lines = simple_debit_note_without_lines + def test_invoice_legalmonetary(): inv = form.NationalSalesInvoice() diff --git a/tests/test_form_xml.py b/tests/test_form_xml.py index 16e69b4..01d87be 100644 --- a/tests/test_form_xml.py +++ b/tests/test_form_xml.py @@ -13,6 +13,17 @@ from facho.fe import form from facho.fe import form_xml # from fixtures import * +from fixtures import ( + simple_invoice, + simple_invoice_without_lines, + simple_credit_note_without_lines, + simple_debit_note_without_lines) + +simple_invoice = simple_invoice +simple_invoice_without_lines = simple_invoice_without_lines +simple_credit_note_without_lines = simple_credit_note_without_lines +simple_debit_note_without_lines = simple_debit_note_without_lines + def test_import_DIANInvoiceXML(): try: @@ -50,8 +61,7 @@ def test_allowance_charge_in_invoice(simple_invoice_without_lines): subtotals=[ form.TaxSubTotal( percent=19.0, - )] - ) + )]), )) inv.add_allowance_charge(form.AllowanceCharge(amount=form.Amount(19.0))) diff --git a/tests/test_query.py b/tests/test_query.py index ecba89f..2962977 100644 --- a/tests/test_query.py +++ b/tests/test_query.py @@ -12,13 +12,14 @@ from facho.fe.form_xml import DIANInvoiceXML # from facho.fe.form_xml import ( # DIANInvoiceXML, DIANCreditNoteXML, DIANDebitNoteXML) -# from fixtures import * +from fixtures import simple_invoice from facho.fe.form import query +simple_invoice = simple_invoice + def test_query_billing_reference(simple_invoice): - raise Exception(simple_invoice) xml = DIANInvoiceXML(simple_invoice) cufe_extension = fe.DianXMLExtensionCUFE(simple_invoice) xml.add_extension(cufe_extension)