Coverage for tests/test_documents_asynchro_extra.py: 100%
54 statements
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-05 11:17 +0200
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-05 11:17 +0200
1"""Tests de la sous-cliente documents (asynchrone)."""
2from __future__ import annotations
4from typing import Any
5from unittest.mock import AsyncMock
7import pytest # pylint: disable=W0611
9from henrri_connect.models import Document, PdfUrlResponse
10from tests.conftest import DOCUMENT_JSON, PAGED_META, make_response
13def _paged(elements: list[Any]) -> dict[str, Any]:
14 return {"elements": elements, "meta": PAGED_META}
17class TestAsyncDocumentsExtra:
18 """Tests de la sous-cliente documents (asynchrone)."""
19 async def test_add_and_modify_and_get_with_all(
20 self, async_client, mock_async_http: AsyncMock
21 ) -> None:
22 """Test de la méthode add()."""
23 mock_async_http.request.return_value = make_response({**DOCUMENT_JSON, "id": 200})
24 doc = Document(
25 document_type_id=1,
26 customer_id=1,
27 finalized=True,
28 price_before_tax=10.0,
29 price_after_tax=12.0,
30 tax_amount=20.0,
31 validated=True,
32 user_can_validate=True,
33 )
35 res = await async_client.documents.add(doc)
36 assert res.id == 200
38 mock_async_http.request.return_value = make_response({**DOCUMENT_JSON, "title": "t"})
39 res2 = await async_client.documents.modify(
40 100,
41 Document(
42 document_type_id=1,
43 customer_id=1,
44 finalized=True,
45 price_before_tax=10.0,
46 price_after_tax=12.0,
47 tax_amount=20.0,
48 validated=True,
49 user_can_validate=True,
50 )
51 )
52 assert res2.title == "t"
54 mock_async_http.request.return_value = make_response(DOCUMENT_JSON)
55 res3 = await async_client.documents.get_with_all(100)
56 assert res3.id == 100
58 async def test_pdf_endpoints(self, async_client, mock_async_http: AsyncMock) -> None:
59 """Test de la méthode get_pdf_url()."""
60 mock_async_http.request.return_value = make_response(
61 {"downloadUrl": "u", "fileName": "f.pdf"}
62 )
63 url = await async_client.documents.get_pdf_url(100)
64 assert isinstance(url, PdfUrlResponse)
65 assert url.download_url == "u"
67 pdf_bytes = b"%PDF-async"
68 mock_async_http.request.return_value = make_response({}, content=pdf_bytes)
69 got = await async_client.documents.get_pdf_bytes(100)
70 assert got == pdf_bytes
72 mock_async_http.request.return_value = make_response({}, content=pdf_bytes)
73 got2 = await async_client.documents.get_pdf_file(100, "guid")
74 assert got2 == pdf_bytes
76 async def test_finalize_transform_payment_milestones_next_quote(
77 self, async_client, mock_async_http: AsyncMock
78 ) -> None:
79 """Test de la méthode finalize()."""
80 mock_async_http.request.return_value = make_response({**DOCUMENT_JSON, "finalized": True})
81 f = await async_client.documents.finalize(100)
82 assert f.finalized is True
84 mock_async_http.request.return_value = make_response({**DOCUMENT_JSON, "id": 101})
85 t = await async_client.documents.transform_to_invoice(100)
86 assert t.id == 101
88 milestone = {"id": 1, "dueDate": "2025-06-30T00:00:00", "isPaid": False, "documentId": 100}
89 mock_async_http.request.return_value = make_response({"elements": [milestone]})
90 lst = await async_client.documents.get_payment_milestones(100)
91 assert lst.elements and lst.elements[0].document_id == 100
93 mock_async_http.request.return_value = make_response({"next": 5})
94 nq = await async_client.documents.get_next_quote_batch()
95 assert nq == {"next": 5}
97 async def test_list_with_selected_fields(
98 self,
99 async_client,
100 mock_async_http: AsyncMock
101 ) -> None:
102 """Test de la méthode list_with_selected_fields()."""
103 mock_async_http.request.return_value = make_response(_paged([DOCUMENT_JSON]))
104 res = await async_client.documents.list_with_selected_fields(
105 page=2,
106 limit=10,
107 fields="id,title"
108 )
109 assert res.elements and len(res.elements) == 1
110 _, kwargs = mock_async_http.request.call_args
111 params = kwargs["params"]
112 assert params["page"] == 2
113 assert params["fields"] == "id,title"