Coverage for tests/test_users.py: 100%
41 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 du sous-client users (synchrone et asynchrone)."""
3from __future__ import annotations
5from unittest.mock import AsyncMock, MagicMock
7from henrri_connect.connect import (
8 AsyncHenrriClient, SyncHenrriClient, # type: ignore[import]
9)
10from tests.conftest import TOKEN_JSON, USER_JSON, make_response
13class TestSyncUsers:
14 """Tests du sous-client users (synchrone)."""
15 def test_get_retourne_utilisateur(
16 self, sync_client: SyncHenrriClient, mock_http: MagicMock
17 ) -> None:
18 """Test de la méthode get_user()."""
19 mock_http.request.return_value = make_response(USER_JSON)
21 user = sync_client.users.get(7)
23 assert user.id == 7
24 assert user.email == "user@example.com"
25 assert "/v1/users/7" in mock_http.request.call_args.args[1]
27 def test_get_address(
28 self, sync_client: SyncHenrriClient, mock_http: MagicMock
29 ) -> None:
30 """Test de la méthode get_address()."""
31 mock_http.request.return_value = make_response(
32 {"id": 1, "city": "Paris", "isPostCodeShared": False}
33 )
35 address = sync_client.users.get_address(7)
37 assert address.city == "Paris"
38 assert "/v1/users/7/address" in mock_http.request.call_args.args[1]
40 def test_get_companies(
41 self, sync_client: SyncHenrriClient, mock_http: MagicMock
42 ) -> None:
43 """Test de la méthode get_companies()."""
44 mock_http.request.return_value = make_response(
45 [
46 {
47 "user": USER_JSON,
48 "company": {"id": 42, "name": "Ma Société", "isSelfEmployed": False},
49 }
50 ]
51 )
53 result = sync_client.users.get_companies()
55 assert len(result) == 1
56 assert result[0].company.name == "Ma Société"
57 assert "/v1/users/companies" in mock_http.request.call_args.args[1]
59 def test_refresh_token(
60 self, sync_client: SyncHenrriClient, mock_http: MagicMock
61 ) -> None:
62 """Test de la méthode refresh_token()."""
63 mock_http.request.return_value = make_response(TOKEN_JSON)
65 token = sync_client.users.refresh_token("old_refresh")
67 assert token.access_token == "new_access_token"
68 assert sync_client._access_token == "new_access_token" # pylint: disable=W0212
71class TestAsyncUsers:
72 """Tests du sous-client users (asynchrone)."""
73 async def test_get_retourne_utilisateur(
74 self, async_client: AsyncHenrriClient, mock_async_http: AsyncMock
75 ) -> None:
76 """Test de la méthode get_user()."""
77 mock_async_http.request.return_value = make_response(USER_JSON)
79 user = await async_client.users.get(7)
81 assert user.id == 7
82 assert user.email == "user@example.com"
84 async def test_get_companies(
85 self, async_client: AsyncHenrriClient, mock_async_http: AsyncMock
86 ) -> None:
87 """Test de la méthode get_companies()."""
88 mock_async_http.request.return_value = make_response(
89 [
90 {
91 "user": USER_JSON,
92 "company": {"id": 5, "name": "Async SA", "isSelfEmployed": True},
93 }
94 ]
95 )
97 result = await async_client.users.get_companies()
99 assert result[0].company.name == "Async SA"
101 async def test_refresh_token(
102 self, async_client: AsyncHenrriClient, mock_async_http: AsyncMock
103 ) -> None:
104 """Test de la méthode refresh_token()."""
105 mock_async_http.request.return_value = make_response(TOKEN_JSON)
107 token = await async_client.users.refresh_token("old_refresh")
109 assert token.access_token == "new_access_token"