72 lines
2.3 KiB
Python
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
|