Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
fix: TT-287 Fix users email doesn't show in reports page
fix: TT-287 Add test for AzureConnection.users function
  • Loading branch information
jcalarcon98 committed Jul 7, 2021
commit e5102ed526cd918a0a8dd52a3ede10cb83ef5826
43 changes: 40 additions & 3 deletions tests/utils/azure_users_test.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
import copy
from unittest.mock import Mock, patch
from requests import Response

from utils.azure_users import AzureConnection, ROLE_FIELD_VALUES, AzureUser
from pytest import mark

Expand All @@ -14,7 +17,10 @@
],
)
def test_azure_connection_is_test_user(
get_mock, field_name, field_value, is_test_user_expected_value,
get_mock,
field_name,
field_value,
is_test_user_expected_value,
):
response_mock = Mock()
response_mock.status_code = 200
Expand All @@ -33,7 +39,12 @@ def test_azure_connection_get_test_user_ids(get_mock):
response_mock = Mock()
response_mock.status_code = 200
response_mock.json = Mock(
return_value={'value': [{'objectId': 'ID1'}, {'objectId': 'ID2'},]}
return_value={
'value': [
{'objectId': 'ID1'},
{'objectId': 'ID2'},
]
}
)
get_mock.return_value = response_mock

Expand Down Expand Up @@ -120,7 +131,10 @@ def test_get_groups_and_users(get_mock):
{'objectId': 'user-id1'},
],
},
{'displayName': 'test-group-3', 'members': [],},
{
'displayName': 'test-group-3',
'members': [],
},
]
}
response_mock.json = Mock(return_value=return_value)
Expand Down Expand Up @@ -228,3 +242,26 @@ def test_remove_user_from_group(
get_group_id_by_group_name_mock.assert_called_once()
get_user_mock.assert_called_once()
assert expected_value == test_user


@patch('utils.azure_users.AzureConnection.get_groups_and_users')
@patch('requests.get')
def test_users_functions_should_returns_all_users(
get_mock, get_groups_and_users_mock
):
first_response = Response()
first_response.status_code = 200
first_response._content = (
b'{"odata.nextLink":"nomatter&$skiptoken=X12872","value":[{"displayName":"Fake1",'
b'"otherMails":["[email protected]"],"objectId":"1"}]} '
)

second_response = copy.copy(first_response)
second_response._content = b'{"value":[{"displayName":"Fake2","otherMails":["[email protected]"],"objectId":"1"}]}'

get_mock.side_effect = [first_response, second_response]
get_groups_and_users_mock.return_value = []

users = AzureConnection().users()

assert len(users) == 2
32 changes: 27 additions & 5 deletions utils/azure_users.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,32 @@ def users(self) -> List[AzureUser]:
endpoint=self.config.ENDPOINT,
role_fields_params=role_fields_params,
)
response = requests.get(endpoint, auth=BearerAuth(self.access_token))

assert 200 == response.status_code
assert 'value' in response.json()
return [self.to_azure_user(item) for item in response.json()['value']]
exists_users = True
users = []
skip_token_attribute = '&$skiptoken='

while exists_users:
response = requests.get(
endpoint, auth=BearerAuth(self.access_token)
)
json_response = response.json()
assert 200 == response.status_code
assert 'value' in json_response
users = users + json_response['value']
remaining_users_link = json_response.get('odata.nextLink', None)
exists_users = (
False
if remaining_users_link is None
else skip_token_attribute in remaining_users_link
)
if exists_users:
request_token = remaining_users_link.split(
skip_token_attribute
)[1]
endpoint = endpoint + skip_token_attribute + request_token

return [self.to_azure_user(user) for user in users]

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