oc-facho/tests/test_form.py

246 lines
7.2 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# This file is part of facho. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
"""Tests for `facho` package."""
import pytest
# from datetime import datetime
# import io
# import zipfile
import facho.fe.form as form
# from facho import fe
def test_invoice_legalmonetary():
inv = form.NationalSalesInvoice()
inv.add_invoice_line(form.InvoiceLine(
quantity=form.Quantity(1, '94'),
description='producto facho',
item=form.StandardItem(9999),
price=form.Price(
amount=form.Amount(100.0),
type_code='01',
type='x'
),
tax=form.TaxTotal(
subtotals=[
form.TaxSubTotal(
percent=19.0,
)]),
withholding=form.WithholdingTaxTotal(
subtotals=[])
))
inv.calculate()
assert inv.invoice_legal_monetary_total.line_extension_amount == (
form.Amount(100.0))
assert inv.invoice_legal_monetary_total.tax_exclusive_amount == (
form.Amount(100.0))
assert inv.invoice_legal_monetary_total.tax_inclusive_amount == (
form.Amount(119.0))
assert inv.invoice_legal_monetary_total.charge_total_amount == (
form.Amount(0.0))
def test_allowancecharge_as_discount():
discount = form.AllowanceChargeAsDiscount(amount=form.Amount(1000.0))
assert discount.isDiscount()
def test_FAU10():
inv = form.NationalSalesInvoice()
inv.add_invoice_line(form.InvoiceLine(
quantity=form.Quantity(1, '94'),
description='productofacho',
item=form.StandardItem(9999),
price=form.Price(
amount=form.Amount(100.0),
type_code='01',
type='x'
),
tax=form.TaxTotal(
subtotals=[
form.TaxSubTotal(
percent=19.0)]),
withholding=form.WithholdingTaxTotal(
subtotals=[])
))
inv.add_allowance_charge(form.AllowanceCharge(amount=form.Amount(19.0)))
inv.calculate()
assert inv.invoice_legal_monetary_total.line_extension_amount == (
form.Amount(100.0))
assert inv.invoice_legal_monetary_total.tax_exclusive_amount == (
form.Amount(100.0))
assert inv.invoice_legal_monetary_total.tax_inclusive_amount == (
form.Amount(119.0))
assert inv.invoice_legal_monetary_total.charge_total_amount == (
form.Amount(19.0))
def test_FAU14():
inv = form.NationalSalesInvoice()
inv.add_invoice_line(form.InvoiceLine(
quantity=form.Quantity(1, '94'),
description='productofacho',
item=form.StandardItem(9999),
price=form.Price(
amount=form.Amount(100.0),
type_code='01',
type='x'
),
tax=form.TaxTotal(
subtotals=[
form.TaxSubTotal(
percent=19.0,
)]),
withholding=form.WithholdingTaxTotal(
subtotals=[])
))
inv.add_allowance_charge(form.AllowanceCharge(
amount=form.Amount(19.0)))
inv.add_prepaid_payment(form.PrePaidPayment(
paid_amount=form.Amount(50.0)))
inv.calculate()
wants = form.Amount(119.0 + 19.0 - 50.0)
assert inv.invoice_legal_monetary_total.payable_amount == wants, "got %s want %s" % (inv.invoice_legal_monetary_total.payable_amount, wants)
def test_invalid_tipo_operacion_nota_debito():
reference = form.InvoiceDocumentReference(
ident='11111',
uuid='21312312',
date='2020-05-05'
)
inv = form.DebitNote(reference)
with pytest.raises(ValueError):
inv.set_operation_type(22)
def test_valid_tipo_operacion_nota_debito():
reference = form.InvoiceDocumentReference(
ident='11111',
uuid='21312312',
date='2020-05-05'
)
inv = form.DebitNote(reference)
inv.set_operation_type('30')
def test_invalid_tipo_operacion_nota_credito():
reference = form.InvoiceDocumentReference(
ident='11111',
uuid='21312312',
date='2020-05-05'
)
inv = form.DebitNote(reference)
with pytest.raises(ValueError):
inv.set_operation_type('990')
def test_valid_tipo_operacion_nota_credito():
reference = form.InvoiceDocumentReference(
ident='11111',
uuid='21312312',
date='2020-05-05'
)
inv = form.CreditNote(reference)
inv.set_operation_type('20')
def test_quantity():
quantity1 = form.Quantity(10, '94')
assert quantity1 * form.Amount(3) == form.Amount(30)
def test_invoice_line_quantity_without_taxes():
line = form.InvoiceLine(
quantity=form.Quantity(10, '94'),
description='',
item=form.StandardItem('test', 9999),
price=form.Price(
amount=form.Amount(30.00),
type_code='01',
type='x'),
tax=form.TaxTotal(subtotals=[]),
withholding=form.WithholdingTaxTotal(
subtotals=[])
)
line.calculate()
assert line.total_amount == form.Amount(300)
assert line.tax_amount == form.Amount(0)
def test_invoice_legalmonetary_with_taxes():
inv = form.NationalSalesInvoice()
inv.add_invoice_line(form.InvoiceLine(
quantity=form.Quantity(1, '94'),
description='productofacho',
item=form.StandardItem(9999),
price=form.Price(
amount=form.Amount(100.0),
type_code='01',
type='x'
),
tax=form.TaxTotal(subtotals=[]),
withholding=form.WithholdingTaxTotal(
subtotals=[])
))
inv.calculate()
assert inv.invoice_legal_monetary_total.line_extension_amount == (
form.Amount(100.0))
assert inv.invoice_legal_monetary_total.tax_exclusive_amount == (
form.Amount(100.0))
assert inv.invoice_legal_monetary_total.tax_inclusive_amount == (
form.Amount(100.0))
assert inv.invoice_legal_monetary_total.charge_total_amount == (
form.Amount(0.0))
assert inv.invoice_legal_monetary_total.payable_amount == (
form.Amount(100.0))
def test_invoice_ident_prefix_automatic_invalid():
inv = form.NationalSalesInvoice()
with pytest.raises(ValueError):
inv.set_ident('SETPQJQJ1234567')
def test_invoice_ident_prefix_automatic():
inv = form.NationalSalesInvoice()
inv.set_ident('SETP1234567')
assert inv.invoice_ident_prefix == 'SETP'
inv = form.NationalSalesInvoice()
inv.set_ident('SET1234567')
assert inv.invoice_ident_prefix == 'SET'
inv = form.NationalSalesInvoice()
inv.set_ident('SE1234567')
assert inv.invoice_ident_prefix == 'SE'
inv = form.NationalSalesInvoice()
inv.set_ident('S1234567')
assert inv.invoice_ident_prefix == 'S'
inv = form.NationalSalesInvoice()
inv.set_ident('1234567')
assert inv.invoice_ident_prefix == ''
def test_invoice_ident_prefix_manual():
inv = form.NationalSalesInvoice()
inv.set_ident('SETP1234567')
inv.set_ident_prefix('SETA')
assert inv.invoice_ident_prefix == 'SETA'
def test_invoice_ident_prefix_automatic_debit():
inv = form.DebitNote(form.BillingReference('', '', ''))
inv.set_ident('ABCDEF1234567')
assert inv.invoice_ident_prefix == 'ABCDEF'