Files

138 lines
4.3 KiB
Python
Raw Permalink Normal View History

2018-09-01 00:16:26 +02:00
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import datetime
import os
from decimal import Decimal
2021-12-11 17:58:42 +01:00
from unittest.mock import MagicMock, Mock
2018-09-01 00:16:26 +02:00
from lxml import etree
from trytond.pool import Pool
from trytond.tests.test_tryton import (
ModuleTestCase, activate_module, with_transaction)
2018-09-01 00:16:26 +02:00
def get_invoice():
pool = Pool()
Address = pool.get('party.address')
Company = pool.get('company.company')
Country = pool.get('country.country')
Currency = pool.get('currency.currency')
Invoice = pool.get('account.invoice')
InvoiceLine = pool.get('account.invoice.line')
InvoiceTax = pool.get('account.invoice.tax')
MoveLine = pool.get('account.move.line')
Party = pool.get('party.party')
PaymentTerm = pool.get('account.invoice.payment_term')
Product = pool.get('product.product')
Tax = pool.get('account.tax')
Uom = pool.get('product.uom')
address = Mock(spec=Address,
street_unstructured="St sample, 15",
2018-09-01 00:16:26 +02:00
city="Scranton",
2021-03-31 23:59:33 +02:00
postal_code="1000",
2018-09-01 00:16:26 +02:00
subdivision=None,
country=Mock(spec=Country,
code='US'),
)
address.building_name = "Building A"
2018-09-01 00:16:26 +02:00
address.country.name = "United States"
party = Mock(spec=Party, addresses=[address])
party.name = "Michael Scott"
company = Mock(spec=Company,
party=Mock(spec=Party,
addresses=[Mock(spec=Address,
street_unstructured="Main street, 42",
2018-09-01 00:16:26 +02:00
country=Mock(spec=Country,
code='US'))]))
company.party.name = "Dunder Mifflin"
company.party.address_get = Mock(return_value=company.party.addresses[0])
taxes = [Mock(spec=InvoiceTax,
tax=Mock(spec=Tax,
unece_code='VAT',
unece_category_code='S',
legal_notice="Legal Notice",
),
base=Decimal('100.00'),
amount=Decimal('10.00'),
legal_notice="Legal Notice",
)]
product = Mock(spec=Product,
code="12345",
type='service',
)
product.name = "Product"
lines = [Mock(spec=InvoiceLine,
type='line',
product=product,
unit=Mock(spec=Uom,
unece_code='C62',
),
quantity=1,
unit_price=Decimal('100.0000'),
amount=Decimal('100.00'),
description="Description",
invoice_taxes=taxes,
)]
invoice = MagicMock(spec=Invoice,
id=-1,
__int__=Mock(return_value=-1),
type='out',
number="001",
party=party,
party_lang='fr',
invoice_address=party.addresses[0],
company=company,
currency=Mock(spec=Currency,
code='USD',
round=lambda a: a),
invoice_date=datetime.date.today(),
payment_term=Mock(spec=PaymentTerm, description="Direct"),
lines=lines,
taxes=taxes,
untaxed_amount=Decimal('100.00'),
tax_amount=Decimal('10.00'),
total_amount=Decimal('110.00'),
amount_to_pay=Decimal('110.00'),
lines_to_pay=[Mock(spec=MoveLine,
maturity_date=datetime.date.today(),
amount_second_currency=None,
debit=Decimal('110.00'),
credit=0,
)],
sales=[],
state='posted',
)
return invoice
class EDocumentUNCEFACTTestCase(ModuleTestCase):
'Test EDocument UN/CEFACT module'
module = 'edocument_uncefact'
@classmethod
def setUpClass(cls):
2025-04-04 00:45:18 +02:00
super().setUpClass()
2018-09-01 00:16:26 +02:00
activate_module('account_invoice')
@with_transaction()
def test_16B_CII_CrossIndustryInvoice(self):
"Test 16B-CII CrossIndustryInvoice"
pool = Pool()
Template = pool.get('edocument.uncefact.invoice')
invoice = get_invoice()
template = Template(invoice)
invoice_string = template.render('16B-CII')
invoice_xml = etree.fromstring(invoice_string)
schema_file = os.path.join(
os.path.dirname(__file__),
'16B-CII', 'data', 'standard', 'CrossIndustryInvoice_100pD16B.xsd')
schema = etree.XMLSchema(etree.parse(schema_file))
schema.assertValid(invoice_xml)
del ModuleTestCase