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 "12345" in invoice_xml
assert "1" in invoice_xml
assert "001" in invoice_xml
assert "10" in invoice_xml
assert "Test Item" 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 "12345" in uploaded_invoice
assert "1" in uploaded_invoice
assert "001" in uploaded_invoice
assert "10" in uploaded_invoice
assert "Test Item" in uploaded_invoice