vbv/server/vbv_lernwelt/shop/tests/test_invoice.py

72 lines
2.3 KiB
Python

from datetime import date
from unittest.mock import create_autospec
from vbv_lernwelt.shop.invoice.abacus import AbacusInvoiceCreator
from vbv_lernwelt.shop.invoice.creator import Item
from vbv_lernwelt.shop.invoice.repositories import InvoiceRepository
def test_render_invoice():
# GIVEN
creator = AbacusInvoiceCreator(repository=create_autospec(InvoiceRepository))
items = [Item(product_number="001", quantity="10", description="Test Item")]
customer_number = "12345"
purchase_order_date = date(2023, 1, 1)
delivery_date = date(2023, 1, 10)
reference_purchase_order = "PO12345678"
unic_id = "UNIC001"
# WHEN
invoice_xml = creator.render_invoice(
customer_number,
purchase_order_date,
delivery_date,
reference_purchase_order,
unic_id,
items,
)
# THEN
assert "<CustomerNumber>12345</CustomerNumber>" in invoice_xml
assert "<ItemNumber>1</ItemNumber>" in invoice_xml
assert "<ProductNumber>001</ProductNumber>" in invoice_xml
assert "<QuantityOrdered>10</QuantityOrdered>" in invoice_xml
assert "<Text>Test Item</Text>" in invoice_xml
def test_create_invoice_calls_upload():
# GIVEN
repository_mock = create_autospec(InvoiceRepository)
creator = AbacusInvoiceCreator(repository=repository_mock)
items = [Item(product_number="001", quantity="10", description="Test Item")]
customer_number = "12345"
purchase_order_date = date(2023, 1, 1)
delivery_date = date(2023, 1, 10)
reference_purchase_order = "PO12345678"
unic_id = "UNIC001"
expected_filename = "test.xml"
# WHEN
creator.create_invoice(
customer_number,
purchase_order_date,
delivery_date,
reference_purchase_order,
unic_id,
items,
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>10</QuantityOrdered>" in uploaded_invoice
assert "<Text>Test Item</Text>" in uploaded_invoice