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

1"""Tests de la sous-cliente documents (asynchrone).""" 

2from __future__ import annotations 

3 

4from typing import Any 

5from unittest.mock import AsyncMock 

6 

7import pytest # pylint: disable=W0611 

8 

9from henrri_connect.models import Document, PdfUrlResponse 

10from tests.conftest import DOCUMENT_JSON, PAGED_META, make_response 

11 

12 

13def _paged(elements: list[Any]) -> dict[str, Any]: 

14 return {"elements": elements, "meta": PAGED_META} 

15 

16 

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 ) 

34 

35 res = await async_client.documents.add(doc) 

36 assert res.id == 200 

37 

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" 

53 

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 

57 

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" 

66 

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 

71 

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 

75 

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 

83 

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 

87 

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 

92 

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} 

96 

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"