Skip to content

Commit 6abc3c2

Browse files
authored
feat: TT-147 user endpoint (#257)
* feat: TT-147 add endpoint to retrieve user * test: TT-147 add test for user namespace
1 parent e8ae7d3 commit 6abc3c2

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

tests/time_tracker_api/users/users_namespace_test.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,33 @@
11
from unittest.mock import Mock, patch
22
from flask import json
3+
from faker import Faker
34
from flask.testing import FlaskClient
45
from flask_restplus._http import HTTPStatus
56
from pytest import mark
67

78

9+
@patch('utils.azure_users.AzureConnection.get_msal_client', Mock())
10+
@patch('utils.azure_users.AzureConnection.get_token', Mock())
11+
@patch('utils.azure_users.AzureConnection.get_user')
12+
def test_get_user_response_contains_expected_props(
13+
get_user_mock, client: FlaskClient, valid_header: dict,
14+
):
15+
get_user_mock.return_value = {
16+
'name': 'dummy',
17+
'email': 'dummy',
18+
'roles': ['dummy-role'],
19+
}
20+
user_id = (Faker().uuid4(),)
21+
response = client.get(f'/users/{user_id}', headers=valid_header)
22+
23+
get_user_mock.assert_called()
24+
assert HTTPStatus.OK == response.status_code
25+
assert 'name' in json.loads(response.data)
26+
assert 'email' in json.loads(response.data)
27+
assert 'roles' in json.loads(response.data)
28+
assert ['dummy-role'] == json.loads(response.data)['roles']
29+
30+
831
@patch('utils.azure_users.AzureConnection.get_msal_client', Mock())
932
@patch('utils.azure_users.AzureConnection.get_token', Mock())
1033
@patch(

time_tracker_api/users/users_namespace.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,16 @@
4040
user_response_fields.update(common_fields)
4141

4242

43+
@ns.route('/<string:id>')
44+
@ns.param('id', 'The unique identifier of the user')
45+
class User(Resource):
46+
@ns.doc('get_user')
47+
@ns.marshal_list_with(user_response_fields)
48+
def get(self, id):
49+
"""Get an user"""
50+
return AzureConnection().get_user(id)
51+
52+
4353
@ns.route('')
4454
class Users(Resource):
4555
@ns.doc('list_users')

utils/azure_users.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,14 @@ def get_token(self):
8686
error_info = f"{response['error']} {response['error_description']}"
8787
raise ValueError(error_info)
8888

89+
def get_user(self, user_id) -> AzureUser:
90+
endpoint = "{endpoint}/users/{user_id}?api-version=1.6".format(
91+
endpoint=self.config.ENDPOINT, user_id=user_id
92+
)
93+
response = requests.get(endpoint, auth=BearerAuth(self.access_token))
94+
assert 200 == response.status_code
95+
return self.to_azure_user(response.json())
96+
8997
def users(self) -> List[AzureUser]:
9098
role_fields_params = ','.join(
9199
[field_name for field_name, _ in ROLE_FIELD_VALUES.values()]

0 commit comments

Comments
 (0)