Skip to content

Commit fb222c1

Browse files
authored
fix: TT-287 Fix users email doesn't show in reports page (#305)
fix: TT-287 Add test for AzureConnection.users function
1 parent a7df33d commit fb222c1

File tree

2 files changed

+67
-8
lines changed

2 files changed

+67
-8
lines changed

tests/utils/azure_users_test.py

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
import copy
12
from unittest.mock import Mock, patch
3+
from requests import Response
4+
25
from utils.azure_users import AzureConnection, ROLE_FIELD_VALUES, AzureUser
36
from pytest import mark
47

@@ -14,7 +17,10 @@
1417
],
1518
)
1619
def test_azure_connection_is_test_user(
17-
get_mock, field_name, field_value, is_test_user_expected_value,
20+
get_mock,
21+
field_name,
22+
field_value,
23+
is_test_user_expected_value,
1824
):
1925
response_mock = Mock()
2026
response_mock.status_code = 200
@@ -33,7 +39,12 @@ def test_azure_connection_get_test_user_ids(get_mock):
3339
response_mock = Mock()
3440
response_mock.status_code = 200
3541
response_mock.json = Mock(
36-
return_value={'value': [{'objectId': 'ID1'}, {'objectId': 'ID2'},]}
42+
return_value={
43+
'value': [
44+
{'objectId': 'ID1'},
45+
{'objectId': 'ID2'},
46+
]
47+
}
3748
)
3849
get_mock.return_value = response_mock
3950

@@ -120,7 +131,10 @@ def test_get_groups_and_users(get_mock):
120131
{'objectId': 'user-id1'},
121132
],
122133
},
123-
{'displayName': 'test-group-3', 'members': [],},
134+
{
135+
'displayName': 'test-group-3',
136+
'members': [],
137+
},
124138
]
125139
}
126140
response_mock.json = Mock(return_value=return_value)
@@ -228,3 +242,26 @@ def test_remove_user_from_group(
228242
get_group_id_by_group_name_mock.assert_called_once()
229243
get_user_mock.assert_called_once()
230244
assert expected_value == test_user
245+
246+
247+
@patch('utils.azure_users.AzureConnection.get_groups_and_users')
248+
@patch('requests.get')
249+
def test_users_functions_should_returns_all_users(
250+
get_mock, get_groups_and_users_mock
251+
):
252+
first_response = Response()
253+
first_response.status_code = 200
254+
first_response._content = (
255+
b'{"odata.nextLink":"nomatter&$skiptoken=X12872","value":[{"displayName":"Fake1",'
256+
b'"otherMails":["[email protected]"],"objectId":"1"}]} '
257+
)
258+
259+
second_response = copy.copy(first_response)
260+
second_response._content = b'{"value":[{"displayName":"Fake2","otherMails":["[email protected]"],"objectId":"1"}]}'
261+
262+
get_mock.side_effect = [first_response, second_response]
263+
get_groups_and_users_mock.return_value = []
264+
265+
users = AzureConnection().users()
266+
267+
assert len(users) == 2

utils/azure_users.py

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,32 @@ def users(self) -> List[AzureUser]:
100100
endpoint=self.config.ENDPOINT,
101101
role_fields_params=role_fields_params,
102102
)
103-
response = requests.get(endpoint, auth=BearerAuth(self.access_token))
104103

105-
assert 200 == response.status_code
106-
assert 'value' in response.json()
107-
return [self.to_azure_user(item) for item in response.json()['value']]
104+
exists_users = True
105+
users = []
106+
skip_token_attribute = '&$skiptoken='
107+
108+
while exists_users:
109+
response = requests.get(
110+
endpoint, auth=BearerAuth(self.access_token)
111+
)
112+
json_response = response.json()
113+
assert 200 == response.status_code
114+
assert 'value' in json_response
115+
users = users + json_response['value']
116+
remaining_users_link = json_response.get('odata.nextLink', None)
117+
exists_users = (
118+
False
119+
if remaining_users_link is None
120+
else skip_token_attribute in remaining_users_link
121+
)
122+
if exists_users:
123+
request_token = remaining_users_link.split(
124+
skip_token_attribute
125+
)[1]
126+
endpoint = endpoint + skip_token_attribute + request_token
127+
128+
return [self.to_azure_user(user) for user in users]
108129

109130
def to_azure_user(self, item) -> AzureUser:
110131
there_is_email = len(item['otherMails']) > 0
@@ -142,7 +163,8 @@ def update_role(self, user_id, role_id, is_grant):
142163
def add_user_to_group(self, user_id, group_name):
143164
group_id = self.get_group_id_by_group_name(group_name)
144165
endpoint = "{endpoint}/groups/{group_id}/$links/members?api-version=1.6".format(
145-
endpoint=self.config.ENDPOINT, group_id=group_id,
166+
endpoint=self.config.ENDPOINT,
167+
group_id=group_id,
146168
)
147169
data = {'url': f'{self.config.ENDPOINT}/directoryObjects/{user_id}'}
148170
response = requests.post(

0 commit comments

Comments
 (0)