From bd39ae228a2cef45d251f044cec1bf7be40a0e44 Mon Sep 17 00:00:00 2001 From: Frederik Jaeckel Date: Mon, 9 Dec 2024 15:46:18 +0100 Subject: [PATCH] update tests to check generated xml-data --- tests/test_invoice.py | 89 ++++++++++++++++++++++++++++++++++++ tests/xml_data.py | 104 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 193 insertions(+) create mode 100644 tests/xml_data.py diff --git a/tests/test_invoice.py b/tests/test_invoice.py index 9ecaf34..621995b 100644 --- a/tests/test_invoice.py +++ b/tests/test_invoice.py @@ -5,11 +5,14 @@ from decimal import Decimal from datetime import date +from facturx import get_facturx_xml_from_pdf + from trytond.tests.test_tryton import ModuleTestCase, with_transaction from trytond.pool import Pool from trytond.transaction import Transaction from trytond.modules.company.tests import create_company, set_company from trytond.modules.account.tests import create_chart, get_fiscalyear +from .xml_data import xml_from_pdf def set_invoice_sequences(fiscalyear): @@ -89,6 +92,7 @@ class InvoiceTestCase(ModuleTestCase): 'lines': [('create', [{ 'type': 'line', 'quantity': 2.0, + 'description': 'Product 1', 'unit': Uom.search([('symbol', '=', 'u')])[0].id, 'unit_price': Decimal('50.0'), 'taxes': [('add', [tax_lst[0].id])], @@ -112,8 +116,15 @@ class InvoiceTestCase(ModuleTestCase): pool = Pool() Configuration = pool.get('account.configuration') Party = pool.get('party.party') + Country = pool.get('country.country') ActionReport = pool.get('ir.action.report') + ExportWiz = pool.get('account_invoice_xrechnung.runrep', type='wizard') + Tax = pool.get('account.tax') + country_de, = Country.create([{ + 'name': 'Germany', + 'code': 'DE', + 'code3': 'DEU'}]) pty1, = Party.create([{ 'name': 'Payee', 'addresses': [('create', [{ @@ -121,10 +132,18 @@ class InvoiceTestCase(ModuleTestCase): 'street': 'Applicant Street 1', 'postal_code': '12345', 'city': 'Usertown', + 'country': country_de.id, }])], }]) company1 = create_company('m-ds') + Party.write(*[ + [company1.party], + {'addresses': [( + 'write', + [company1.party.addresses[0]], + {'country': country_de.id})]}]) + with set_company(company1): with Transaction().set_context({'company': company1.id}): @@ -141,8 +160,78 @@ class InvoiceTestCase(ModuleTestCase): self.assertEqual(cfg1.xrechn_zugferd_report.name, 'Invoice') create_chart(company=company1, tax=True) self.prep_fiscalyear(company1) + + tax, = Tax.search([('name', '=', '20% VAT')]) + Tax.write(*[ + [tax], + {'unece_code': 'GST', 'unece_category_code': 'S'}]) invoice = self.prep_invoice(pty1) + # start wizard with two selected records + with Transaction().set_context({ + 'active_ids': [invoice.id], + 'active_id': invoice.id, + 'active_model': 'account.invoice'}): + + (sess_id, start_state, end_state) = ExportWiz.create() + w_obj = ExportWiz(sess_id) + self.assertEqual(start_state, 'start') + self.assertEqual(end_state, 'end') + result = ExportWiz.execute(sess_id, {}, start_state) + + self.assertEqual( + list(result['view']['defaults'].keys()), [ + 'as_zip', 'edocument', 'invoice', 'state', + 'invoice.']) + + data = {} + for x in result['view']['defaults'].keys(): + if '.' in x: + continue + data[x] = result['view']['defaults'][x] + setattr(w_obj.start, x, data[x]) + self.assertEqual( + w_obj.start.edocument, + 'edocument.facturxext.invoice-ferd') + self.assertEqual(w_obj.start.invoice, invoice) + self.assertEqual(w_obj.start.as_zip, True) + w_obj.start.as_zip = False + data['as_zip'] = False + + # (action, data) + result = ExportWiz.execute( + sess_id, {'start': data}, 'export') + self.assertEqual(len(result['actions']), 1) + (action, data) = result['actions'][0] + + self.assertEqual( + action['report_name'], + 'account_invoice_xrechnung.export') + self.assertEqual(action['type'], 'ir.action.report') + self.assertEqual(action['records'], 'selected') + + # 2nd step, wizard told us which report we must execute + ReportExport = pool.get( + 'account_invoice_xrechnung.export', + type='report') + data2 = {} + data2.update(data) + data2['action_id'] = action['id'] + data2['model'] = 'account.invoice' + + (ext, pdfdata, dprint, fname) = ReportExport.execute( + [data['invoice']], data2) + + # extract xml + (xml_fname, xml_frompdf) = get_facturx_xml_from_pdf( + pdfdata) + + self.assertEqual(xml_fname, 'factur-x.xml') + self.assertEqual( + xml_frompdf.decode('utf8'), + xml_from_pdf % { + 'datetoday': date.today().strftime('%Y%m%d')}) + ExportWiz.delete(sess_id) # end InvoiceTestCase diff --git a/tests/xml_data.py b/tests/xml_data.py new file mode 100644 index 0000000..0c0eed9 --- /dev/null +++ b/tests/xml_data.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- +# This file is part of the account-invoice-xrechnung-module +# from m-ds for Tryton. The COPYRIGHT file at the top level of +# this repository contains the full copyright notices and license terms. + + +xml_from_pdf = """ + + + + urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended + + + + 1 + Parts + 380 + + 20240701 + + + + + + 1 + + + + Product 1 + + + + 50.00 + + + + 2.0 + + + + GST + S + 20.0 + + + 100.00 + + + + + + m-ds + + + + DE + + + + Payee + + + + 12345 + Applicant Street 1 + Usertown + DE + + + + + + + + + + 1 + usd + + 1 + + + 20.00 + GST + 100.00 + S + 20.0 + + + + %(datetoday)s + + 120.00 + + + 100.00 + 100.00 + 20.00 + 120.00 + 120.00 + + + +"""