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

1"""Tests du sous-client users (synchrone et asynchrone).""" 

2 

3from __future__ import annotations 

4 

5from unittest.mock import AsyncMock, MagicMock 

6 

7from henrri_connect.connect import ( 

8 AsyncHenrriClient, SyncHenrriClient, # type: ignore[import] 

9) 

10from tests.conftest import TOKEN_JSON, USER_JSON, make_response 

11 

12 

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) 

20 

21 user = sync_client.users.get(7) 

22 

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] 

26 

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 ) 

34 

35 address = sync_client.users.get_address(7) 

36 

37 assert address.city == "Paris" 

38 assert "/v1/users/7/address" in mock_http.request.call_args.args[1] 

39 

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 ) 

52 

53 result = sync_client.users.get_companies() 

54 

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] 

58 

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) 

64 

65 token = sync_client.users.refresh_token("old_refresh") 

66 

67 assert token.access_token == "new_access_token" 

68 assert sync_client._access_token == "new_access_token" # pylint: disable=W0212 

69 

70 

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) 

78 

79 user = await async_client.users.get(7) 

80 

81 assert user.id == 7 

82 assert user.email == "user@example.com" 

83 

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 ) 

96 

97 result = await async_client.users.get_companies() 

98 

99 assert result[0].company.name == "Async SA" 

100 

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) 

106 

107 token = await async_client.users.refresh_token("old_refresh") 

108 

109 assert token.access_token == "new_access_token"