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