"""Test user utilities.""" from unittest.mock import MagicMock, patch from abacus_common_logic.constants.constants import ( APPLICATION_PROFILE_TYPE, DEFAULT_USER_ID, DEFAULT_USER_TYPE, IDENTITY_HEADER, USER_HEADER_DELIMITER, USER_HEADER_NAME, ) from abacus_common_logic.utils.users import ( get_flask_user_id, get_user_details_from_string, parse_user_headers, set_flask_user_details_from_headers, ) def test_parse_user_headers(): """Test parsing orchard headers.""" profile_id = 'foo' oa_type = 'oa' grass_id = f'{oa_type}{USER_HEADER_DELIMITER}{profile_id}' assert parse_user_headers(profile_id) == (APPLICATION_PROFILE_TYPE, profile_id) assert parse_user_headers(None, grass_id) == (oa_type, profile_id) assert parse_user_headers(None, None) == (DEFAULT_USER_TYPE, DEFAULT_USER_ID) def test_get_user_details_from_string(): """Test parsing legacy headers.""" profile_id = 'foo' oa_type = 'oa' grass_id = f'{oa_type}{USER_HEADER_DELIMITER}{profile_id}' malformed_grass_id = f'{grass_id}{USER_HEADER_DELIMITER}bar' empty_grass_id = '' none_grass_id = None assert get_user_details_from_string(grass_id) == (oa_type, profile_id) assert get_user_details_from_string(malformed_grass_id) == ( DEFAULT_USER_TYPE, DEFAULT_USER_ID, ) assert get_user_details_from_string(empty_grass_id) == ( DEFAULT_USER_TYPE, DEFAULT_USER_ID, ) assert get_user_details_from_string(none_grass_id) == ( DEFAULT_USER_TYPE, DEFAULT_USER_ID, ) @patch('abacus_common_logic.utils.users.g') def test_get_flask_user_id(mock_g): """Test getting the user id.""" user_id = 'baz' mock_g.user_details = None mock_g.request_context = MagicMock() mock_g.request_context.jwt_identity_id = None assert get_flask_user_id() == DEFAULT_USER_ID mock_g.user_details = {'id': user_id} assert get_flask_user_id() == user_id mock_g.request_context.jwt_identity_id = user_id mock_g.user_details = {'id': None} assert get_flask_user_id() == user_id del mock_g.request_context.jwt_identity_id assert get_flask_user_id() == DEFAULT_USER_ID @patch('abacus_common_logic.utils.users.g') def test_set_flask_user_details_from_headers(mock_g, test_app): """Test handling mock request data.""" profile_id = 'foo' oa_type = 'oa' grass_id = f'{oa_type}{USER_HEADER_DELIMITER}{profile_id}' mock_g.user_details = {} with test_app.test_request_context(headers={}): set_flask_user_details_from_headers() assert mock_g.user_details == {'type': DEFAULT_USER_TYPE, 'id': DEFAULT_USER_ID} with test_app.test_request_context(headers={USER_HEADER_NAME: grass_id}): set_flask_user_details_from_headers() assert mock_g.user_details == {'type': oa_type, 'id': profile_id} with test_app.test_request_context(headers={IDENTITY_HEADER: profile_id}): set_flask_user_details_from_headers() assert mock_g.user_details == { 'type': APPLICATION_PROFILE_TYPE, 'id': profile_id, }