- Implement tests for basic and bearer authentication headers in `test_auth.py`. - Create tests for the `EasybillWebhookParser` in `test_webhooks.py`, covering JSON and form-encoded payloads, as well as a generic parse and acknowledgement method.
58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
from easybill_client.webhooks import EasybillWebhookParser
|
|
|
|
|
|
def test_parser_reads_headers_and_payload():
|
|
parser = EasybillWebhookParser(secret="topsecret")
|
|
|
|
payload = {"id": 42, "number": "RE-42"}
|
|
headers = {
|
|
"X-easybill-Event": "document.completed",
|
|
"X-easybill-Webhook-Delivery": "4711",
|
|
}
|
|
|
|
envelope = parser.parse_json(headers=headers, payload=payload)
|
|
|
|
assert envelope.event == "document.completed"
|
|
assert envelope.delivery_id == "4711"
|
|
assert envelope.resource_id == 42
|
|
assert envelope.payload == payload
|
|
|
|
|
|
def test_parser_supports_form_encoded_payload():
|
|
parser = EasybillWebhookParser()
|
|
|
|
headers = {
|
|
"X-easybill-Event": "customer.update",
|
|
"X-easybill-Webhook-Delivery": "99",
|
|
}
|
|
form_data = {
|
|
"id": "15",
|
|
"customer_id": "15",
|
|
"company_name": "ACME GmbH",
|
|
}
|
|
|
|
envelope = parser.parse_form(headers=headers, form_data=form_data)
|
|
|
|
assert envelope.event == "customer.update"
|
|
assert envelope.delivery_id == "99"
|
|
assert envelope.resource_id == 15
|
|
assert envelope.payload["company_name"] == "ACME GmbH"
|
|
|
|
|
|
def test_generic_parse_and_acknowledgement():
|
|
parser = EasybillWebhookParser()
|
|
|
|
headers = {
|
|
"X-easybill-Event": "document.completed",
|
|
"X-easybill-Webhook-Delivery": "123",
|
|
}
|
|
|
|
envelope = parser.parse(
|
|
headers=headers,
|
|
payload={"id": 7, "status": "done"},
|
|
content_type="application/json",
|
|
)
|
|
|
|
assert envelope.event == "document.completed"
|
|
assert envelope.resource_id == 7
|
|
assert parser.build_acknowledgement() == {"status": "ok"}
|