From 4da0fae30fedfcb52defc89e2e542572d3b6d40d Mon Sep 17 00:00:00 2001 From: Drew Short Date: Mon, 7 Oct 2019 21:52:36 -0500 Subject: [PATCH] Refactor: Added endpoint to expose roles --- server/corvus/api/user_api.py | 17 +++++++++++++++++ server/tests/api/test_user_api.py | 16 ++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/server/corvus/api/user_api.py b/server/corvus/api/user_api.py index 3fce2a5..075f836 100644 --- a/server/corvus/api/user_api.py +++ b/server/corvus/api/user_api.py @@ -15,6 +15,7 @@ from corvus.service import ( from corvus.service.patch_service import get_patch_fields from corvus.service.role_service import Role from corvus.utility.pagination_utility import get_pagination_params +from corvus.service.role_service import ROLE_LIST USER_BLUEPRINT = Blueprint( name='user', import_name=__name__, url_prefix='/user') @@ -114,3 +115,19 @@ def delete_user(name: str) -> APIResponse: return APIResponse( APIMessage(True, 'Successfully Deleted'), status=200) return abort(404) + + +@USER_BLUEPRINT.route('/roles', methods=['GET']) +@return_json +@authentication_middleware.require( + required_auth=Auth.TOKEN, required_role=Role.USER) +def get_roles() -> APIResponse: + """ + List the roles available on the service + + :return: The list of roles + """ + return APIResponse( + sorted({str(role.data) for role in ROLE_LIST}), + status=200 + ) diff --git a/server/tests/api/test_user_api.py b/server/tests/api/test_user_api.py index 01afb1f..70b14da 100644 --- a/server/tests/api/test_user_api.py +++ b/server/tests/api/test_user_api.py @@ -6,6 +6,8 @@ from flask.testing import FlaskClient from tests.conftest import AuthActions +from corvus.service.role_service import ROLE_LIST + def test_get_users_happy_path(auth: AuthActions, client: FlaskClient): with auth: @@ -177,3 +179,17 @@ def test_delete_user_happy_path(auth: AuthActions, client: FlaskClient): assert 200 == result2.status_code assert result2.json is not None assert 'message' in result2.json + + +def test_get_roles(auth: AuthActions, client: FlaskClient): + with auth: + auth_header = auth.get_authorization_header_token() + result = client.get( + '/user/roles', + headers={ + auth_header[0]: auth_header[1] + }) + assert 200 == result.status_code + assert result.json is not None + for role in ROLE_LIST: + assert str(role.data) in result.json