259 lines
9.1 KiB
Python
259 lines
9.1 KiB
Python
from datetime import date, datetime
|
|
from unittest.mock import create_autospec
|
|
|
|
from django.test import TestCase
|
|
|
|
from vbv_lernwelt.core.admin import User
|
|
from vbv_lernwelt.core.create_default_users import create_default_users
|
|
from vbv_lernwelt.core.model_utils import add_countries
|
|
from vbv_lernwelt.shop.invoice.abacus import (
|
|
AbacusInvoiceCreator,
|
|
create_customer_xml,
|
|
create_invoice_xml,
|
|
render_customer_xml,
|
|
render_invoice_xml,
|
|
)
|
|
from vbv_lernwelt.shop.invoice.repositories import InvoiceRepository
|
|
from vbv_lernwelt.shop.models import CheckoutInformation
|
|
from vbv_lernwelt.shop.tests.factories import CheckoutInformationFactory
|
|
|
|
USER_USERNAME = "testuser"
|
|
USER_EMAIL = "test@example.com"
|
|
USER_PASSWORD = "testpassword"
|
|
|
|
|
|
class AbacusInvoiceTestCase(TestCase):
|
|
def setUp(self):
|
|
add_countries(small_set=True)
|
|
create_default_users()
|
|
|
|
def test_create_invoice_xml(self):
|
|
# set abacus_number before
|
|
_pat = User.objects.get(username="patrizia.huggel@eiger-versicherungen.ch")
|
|
_pat.abacus_debitor_number = 60000011
|
|
_pat.save()
|
|
_ignore_checkout_information = CheckoutInformationFactory(
|
|
user=_pat, abacus_order_id=6_000_000_123
|
|
)
|
|
|
|
feuz = User.objects.get(username="andreas.feuz@eiger-versicherungen.ch")
|
|
feuz_checkout_info = CheckoutInformationFactory(
|
|
user=feuz,
|
|
transaction_id="24021508331287484",
|
|
)
|
|
feuz_checkout_info.created_at = datetime(2024, 2, 15, 8, 33, 12, 0)
|
|
invoice_xml_filename, invoice_xml_content = create_invoice_xml(
|
|
feuz_checkout_info
|
|
)
|
|
|
|
self.assertEqual(
|
|
invoice_xml_filename, "myVBV_orde_60000012_20240215083312_6000000124.xml"
|
|
)
|
|
|
|
# print(invoice_xml_content)
|
|
assert "<CustomerNumber>60000012</CustomerNumber>" in invoice_xml_content
|
|
assert (
|
|
"<PurchaseOrderDate>2024-02-15</PurchaseOrderDate>" in invoice_xml_content
|
|
)
|
|
assert (
|
|
"<GroupingNumberAscii1>6000000124</GroupingNumberAscii1>"
|
|
in invoice_xml_content
|
|
)
|
|
assert (
|
|
"<ReferencePurchaseOrder>24021508331287484</ReferencePurchaseOrder>"
|
|
in invoice_xml_content
|
|
)
|
|
assert "<DeliveryDate>2024-02-15</DeliveryDate>" in invoice_xml_content
|
|
assert (
|
|
"<Text>Versicherungsvermittler/-in VBV - 2024-02-15 - Feuz Andreas</Text>"
|
|
in invoice_xml_content
|
|
)
|
|
|
|
def test_render_invoice_xml(self):
|
|
invoice_xml = 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 = """<?xml version="1.0" encoding="utf-8"?>
|
|
<AbaConnectContainer>
|
|
<Task>
|
|
<Parameter>
|
|
<Application>ORDE</Application>
|
|
<Id>Verkaufsauftrag</Id>
|
|
<MapId>AbaDefault</MapId>
|
|
<Version>2022.00</Version>
|
|
</Parameter>
|
|
<Transaction>
|
|
<SalesOrderHeader mode="SAVE">
|
|
<SalesOrderHeaderFields mode="SAVE">
|
|
<CustomerNumber>60000012</CustomerNumber>
|
|
<ProcessFlowNumber>30</ProcessFlowNumber>
|
|
<PaymentCode>9999</PaymentCode>
|
|
<PurchaseOrderDate>2024-02-15</PurchaseOrderDate>
|
|
<ReferencePurchaseOrder>24021508331287484</ReferencePurchaseOrder>
|
|
<GroupingNumberAscii1>6000000001</GroupingNumberAscii1>
|
|
</SalesOrderHeaderFields>
|
|
<Item mode="SAVE">
|
|
<ItemFields mode="SAVE">
|
|
<DeliveryDate>2024-02-15</DeliveryDate>
|
|
<ItemNumber>1</ItemNumber>
|
|
<ProductNumber>30202</ProductNumber>
|
|
<QuantityOrdered>1</QuantityOrdered>
|
|
</ItemFields>
|
|
<ItemText mode="SAVE">
|
|
<ItemTextFields mode="SAVE">
|
|
<Text>myVBV Versicherungsvermittler - Lernpfad, 2024-02-15, Skender, Gebhart-Krasniqi</Text>
|
|
</ItemTextFields>
|
|
</ItemText>
|
|
</Item>
|
|
</SalesOrderHeader>
|
|
</Transaction>
|
|
</Task>
|
|
</AbaConnectContainer>
|
|
"""
|
|
|
|
self.maxDiff = None
|
|
self.assertXMLEqual(expected_xml, invoice_xml)
|
|
|
|
def test_create_customer_xml_with_company_address(self):
|
|
_pat = User.objects.get(username="patrizia.huggel@eiger-versicherungen.ch")
|
|
_pat.abacus_debitor_number = 60000011
|
|
_pat.save()
|
|
_ignore_checkout_information = CheckoutInformationFactory(
|
|
user=_pat, abacus_order_id=6_000_000_123
|
|
)
|
|
|
|
feuz = User.objects.get(username="andreas.feuz@eiger-versicherungen.ch")
|
|
feuz_checkout_info = CheckoutInformationFactory(
|
|
user=feuz,
|
|
transaction_id="24021508331287484",
|
|
first_name="Andreas",
|
|
last_name="Feuz",
|
|
street="Eggersmatt",
|
|
street_number="32",
|
|
postal_code="1719",
|
|
city="Zumholz",
|
|
country_id="CH",
|
|
invoice_address="org",
|
|
organisation_detail_name="VBV",
|
|
organisation_street="Laupenstrasse",
|
|
organisation_street_number="10",
|
|
organisation_postal_code="3000",
|
|
organisation_city="Bern",
|
|
organisation_country_id="CH",
|
|
)
|
|
feuz_checkout_info.created_at = datetime(2024, 2, 15, 8, 33, 12, 0)
|
|
|
|
customer_xml_filename, customer_xml_content = create_customer_xml(
|
|
checkout_information=feuz_checkout_info
|
|
)
|
|
print(customer_xml_content)
|
|
print(customer_xml_filename)
|
|
|
|
self.assertEqual("myVBV_debi_60000012.xml", customer_xml_filename)
|
|
assert "<CustomerNumber>60000012</CustomerNumber>" in customer_xml_content
|
|
assert (
|
|
"<Email>andreas.feuz@eiger-versicherungen.ch</Email>"
|
|
in customer_xml_content
|
|
)
|
|
assert "<AddressNumber>60000012</AddressNumber>" in customer_xml_content
|
|
assert "<Name>Feuz</Name>" in customer_xml_content
|
|
assert "<Text>VBV</Text>" in customer_xml_content
|
|
assert "<Street>Laupenstrasse</Street>" in customer_xml_content
|
|
assert "<Country>CH</Country>" in customer_xml_content
|
|
|
|
def test_render_customer_xml(self):
|
|
customer_xml = 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",
|
|
)
|
|
|
|
# example from Skender
|
|
expected_xml = """<?xml version="1.0" encoding="utf-8"?>
|
|
<AbaConnectContainer>
|
|
<Task>
|
|
<Parameter>
|
|
<Application>DEBI</Application>
|
|
<ID>Kunden</ID>
|
|
<MapID>AbaDefault</MapID>
|
|
<Version>2022.00</Version>
|
|
</Parameter>
|
|
<Transaction>
|
|
<Customer mode="SAVE">
|
|
<CustomerNumber>60000012</CustomerNumber>
|
|
<DefaultCurrency>CHF</DefaultCurrency>
|
|
<PaymentTermNumber>1</PaymentTermNumber>
|
|
<ReminderProcedure>NORM</ReminderProcedure>
|
|
<AddressData mode="SAVE">
|
|
<AddressNumber>60000012</AddressNumber>
|
|
<Name>Gebhart-Krasniqi</Name>
|
|
<FirstName>Skender</FirstName>
|
|
<Text>VBV</Text>
|
|
<Street>Laupenstrasse</Street>
|
|
<HouseNumber>10</HouseNumber>
|
|
<ZIP>3000</ZIP>
|
|
<City>Bern</City>
|
|
<Country>CH</Country>
|
|
<Language>de</Language>
|
|
<Email>skender.krasniqi@vbv-afa.ch</Email>
|
|
</AddressData>
|
|
</Customer>
|
|
</Transaction>
|
|
</Task>
|
|
</AbaConnectContainer>
|
|
"""
|
|
|
|
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 "<CustomerNumber>12345</CustomerNumber>" in uploaded_invoice
|
|
assert "<ItemNumber>1</ItemNumber>" in uploaded_invoice
|
|
assert "<ProductNumber>001</ProductNumber>" in uploaded_invoice
|
|
assert "<QuantityOrdered>1</QuantityOrdered>" in uploaded_invoice
|
|
assert "<Text>Test Product Description</Text>" in uploaded_invoice
|