Enhance EasybillClient and AsyncEasybillClient with new methods for customer and document management, and add unit tests for client functionality.
This commit is contained in:
parent
caacb339dd
commit
b324671286
4 changed files with 295 additions and 10 deletions
123
tests/test_client_facade.py
Normal file
123
tests/test_client_facade.py
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
import httpx
|
||||
import pytest
|
||||
|
||||
from easybill_client import AsyncEasybillClient, EasybillClient
|
||||
|
||||
|
||||
class MockSyncTransport(httpx.MockTransport):
|
||||
def __init__(self):
|
||||
super().__init__(self._handler)
|
||||
|
||||
@staticmethod
|
||||
def _handler(request: httpx.Request) -> httpx.Response:
|
||||
if request.url.path == "/customers/1":
|
||||
return httpx.Response(
|
||||
200,
|
||||
json={
|
||||
"id": 1,
|
||||
"company_name": "ACME GmbH",
|
||||
"last_name": "Mustermann",
|
||||
"number": "K-100",
|
||||
},
|
||||
)
|
||||
|
||||
if request.url.path == "/documents":
|
||||
return httpx.Response(
|
||||
200,
|
||||
json={
|
||||
"page": 1,
|
||||
"pages": 1,
|
||||
"limit": 100,
|
||||
"total": 1,
|
||||
"items": [
|
||||
{
|
||||
"id": 10,
|
||||
"number": "RE-10",
|
||||
"customer_id": 1,
|
||||
"type": "INVOICE",
|
||||
"status": "DONE",
|
||||
"amount": 1999,
|
||||
"is_draft": False,
|
||||
}
|
||||
],
|
||||
},
|
||||
)
|
||||
|
||||
if request.url.path == "/webhooks" and request.method == "POST":
|
||||
body = request.read().decode()
|
||||
assert "document.completed" in body
|
||||
return httpx.Response(
|
||||
201,
|
||||
json={
|
||||
"id": 77,
|
||||
"url": "https://example.com/webhook",
|
||||
"description": "Connector Hub",
|
||||
"secret": "secret",
|
||||
"content_type": "json",
|
||||
"events": ["document.completed"],
|
||||
"is_active": True,
|
||||
},
|
||||
)
|
||||
|
||||
return httpx.Response(404, json={"error": "not found"})
|
||||
|
||||
|
||||
class MockAsyncTransport(httpx.MockTransport):
|
||||
def __init__(self):
|
||||
super().__init__(self._handler)
|
||||
|
||||
@staticmethod
|
||||
def _handler(request: httpx.Request) -> httpx.Response:
|
||||
if request.url.path == "/customers":
|
||||
return httpx.Response(
|
||||
200,
|
||||
json={
|
||||
"page": 1,
|
||||
"pages": 1,
|
||||
"limit": 100,
|
||||
"total": 1,
|
||||
"items": [
|
||||
{
|
||||
"id": 2,
|
||||
"company_name": "Example AG",
|
||||
"last_name": "Musterfrau",
|
||||
"number": "K-200",
|
||||
}
|
||||
],
|
||||
},
|
||||
)
|
||||
return httpx.Response(404, json={"error": "not found"})
|
||||
|
||||
|
||||
def test_sync_client_returns_customer_and_documents_as_models():
|
||||
client = EasybillClient(api_key="token", transport=MockSyncTransport())
|
||||
try:
|
||||
customer = client.get_customer(1)
|
||||
documents = client.list_documents()
|
||||
webhook = client.create_webhook(
|
||||
url="https://example.com/webhook",
|
||||
events=["document.completed"],
|
||||
secret="secret",
|
||||
description="Connector Hub",
|
||||
)
|
||||
finally:
|
||||
client.close()
|
||||
|
||||
assert customer.id == 1
|
||||
assert customer.company_name == "ACME GmbH"
|
||||
assert documents.total == 1
|
||||
assert documents.items[0].amount == 1999
|
||||
assert webhook.id == 77
|
||||
assert webhook.events == ["document.completed"]
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_async_client_lists_customers_as_models():
|
||||
client = AsyncEasybillClient(api_key="token", transport=MockAsyncTransport())
|
||||
try:
|
||||
customers = await client.list_customers()
|
||||
finally:
|
||||
await client.aclose()
|
||||
|
||||
assert customers.total == 1
|
||||
assert customers.items[0].company_name == "Example AG"
|
||||
Loading…
Add table
Add a link
Reference in a new issue