from datetime import date from unittest.mock import create_autospec from django.test import TestCase from vbv_lernwelt.core.admin import User from vbv_lernwelt.shop.invoice.abacus import AbacusInvoiceCreator from vbv_lernwelt.shop.invoice.creator import Item from vbv_lernwelt.shop.invoice.repositories import InvoiceRepository from vbv_lernwelt.shop.models import CheckoutInformation USER_USERNAME = "testuser" USER_EMAIL = "test@example.com" USER_PASSWORD = "testpassword" class InvoiceTestCase(TestCase): def setUp(self) -> None: self.user = User.objects.create_user( username=USER_USERNAME, email=USER_EMAIL, password=USER_PASSWORD, is_active=True, ) def test_render_invoice_xml(self): # GIVEN creator = AbacusInvoiceCreator(repository=create_autospec(InvoiceRepository)) # WHEN invoice_xml = creator.render_invoice_xml( abacus_debitor_number=60000012, abacus_order_id=6000000001, order_date=date(2024, 2, 15), datatrans_transaction_id="24021508331287484", item_description="myVBV Versicherungsvermittler - Lernpfad, 2024-02-15, Skender, Gebhart-Krasniqi", ) # example from Skender expected_xml = """ ORDE Verkaufsauftrag AbaDefault 2022.00 60000012 30 9999 2024-02-15 24021508331287484 6000000001 2024-02-15 1 30202 1 myVBV Versicherungsvermittler - Lernpfad, 2024-02-15, Skender, Gebhart-Krasniqi """ # THEN self.maxDiff = None self.assertXMLEqual(expected_xml, invoice_xml) def test_render_customer_xml(self): # GIVEN creator = AbacusInvoiceCreator( repository=create_autospec(InvoiceRepository)) # WHEN customer_xml = creator.render_customer_xml( abacus_debitor_number=60000012, last_name="Gebhart-Krasniqi", first_name="Skender", company_name="VBV", street="Laupenstrasse", house_number="10", zip_code="3000", city="Bern", country="CH", language="de", email="skender.krasniqi@vbv-afa.ch" ) print(customer_xml) # example from Skender expected_xml = """ DEBI Kunden AbaDefault 2022.00 60000012 CHF 1 NORM 60000012 Gebhart-Krasniqi Skender VBV Laupenstrasse 10 3000 Bern CH de skender.krasniqi@vbv-afa.ch """ # THEN self.maxDiff = None self.assertXMLEqual(expected_xml, customer_xml) def test_create_invoice_calls_upload(self): # GIVEN repository_mock = create_autospec(InvoiceRepository) creator = AbacusInvoiceCreator(repository=repository_mock) expected_filename = "test.xml" checkout_information = CheckoutInformation.objects.create( user=self.user, transaction_id="12345", product_sku="001", product_name="Test Product", product_description="Test Product Description", product_price=1000, state="initialized", ) # WHEN creator.create_invoice( checkout_information=checkout_information, filename=expected_filename, ) # THEN repository_mock.upload_invoice.assert_called_once() uploaded_invoice, uploaded_filename = repository_mock.upload_invoice.call_args[ 0 ] assert uploaded_filename == expected_filename assert "12345" in uploaded_invoice assert "1" in uploaded_invoice assert "001" in uploaded_invoice assert "1" in uploaded_invoice assert "Test Product Description" in uploaded_invoice