"""Test test_get_zendesk_token.""" import json from unittest.mock import patch from owsresponse import response from tests.unit import db_utils from users import ( constants, # noqa ) from users.app import app @db_utils.test_schema @patch('users.handlers.identity.Neo4jSession.__enter__') @patch('users.handlers.identity.Neo4jSession.__exit__') def test_get_zendesk_token_v1(_exit, _enter, mocker): """Test zendesk token v1 generation.""" identity_id = '673eaeba-c7b7-4854-83a4-265c401bfb5f' token_version = constants.ZENDESK_CLASSIC_WEB_WIDGET_TOKEN_VERSION mocker.patch( 'users.config.ZENDESK_SECRET_KEY', '{"theorchard": "9bdd91ee-370c-43bf-8e8f-5eb4eb5f7f53"}' ) get_identity_mock = mocker.patch( 'users.models.identities.get_identity', return_value=response.Response( {'name': 'Foo Bar', 'email': 'foo.bar@test.com', 'default_brand': 'theorchard'} ), ) mocker.patch('users.logic.zendesk.time', return_value=1723618392) mocker.patch('users.logic.zendesk.uuid4', return_value='8d1b5f70-2115-49e6-828a-877b713e8d14') navigator = app.test_client() request = navigator.get( f'/users/identity/{identity_id}/zendesk_token/{token_version}', content_type='application/json', ) response_data = json.loads(request.data.decode('utf-8')) get_identity_mock.assert_called_once_with(identity_id) assert request.status_code == 200 assert response_data == { 'value': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiRm9vIEJhciIsImVtYWlsIjoiZm9vLmJhckB0ZXN0LmNvbSIsImlhdCI6MTcyMzYxODM5MiwianRpIjoiOGQxYjVmNzAtMjExNS00OWU2LTgyOGEtODc3YjcxM2U4ZDE0In0.YmCK4hrgmbh4YlzHPfEz4n2OiQ9O5r64lel4g4T6izU' # noqa: E501 } @db_utils.test_schema @patch('users.handlers.identity.Neo4jSession.__enter__') @patch('users.handlers.identity.Neo4jSession.__exit__') def test_get_zendesk_token_v1_no_secret_key(_exit, _enter, mocker): """Test no zendesk token v1 generated if secret key is not provided.""" identity_id = '673eaeba-c7b7-4854-83a4-265c401bfb5f' token_version = constants.ZENDESK_CLASSIC_WEB_WIDGET_TOKEN_VERSION mocker.patch('users.config.ZENDESK_SECRET_KEY', None) mocker.patch( 'users.models.identities.get_identity', return_value=response.Response( {'name': 'Foo Bar', 'email': 'foo.bar@test.com', 'default_brand': 'theorchard'} ), ) navigator = app.test_client() request = navigator.get( f'/users/identity/{identity_id}/zendesk_token/{token_version}', content_type='application/json', ) response_data = json.loads(request.data.decode('utf-8')) assert request.status_code == 500 assert response_data == {'code': 'internal_error', 'message': 'ZENDESK_SECRET_KEY must be set'} @db_utils.test_schema @patch('users.handlers.identity.Neo4jSession.__enter__') @patch('users.handlers.identity.Neo4jSession.__exit__') def test_get_zendesk_token_v1_no_identity(_exit, _enter, mocker): """Test no zendesk token generated if identity not found.""" identity_id = '673eaeba-c7b7-4854-83a4-265c401bfb5f' token_version = constants.ZENDESK_CLASSIC_WEB_WIDGET_TOKEN_VERSION mocker.patch('users.config.ZENDESK_SECRET_KEY', '9bdd91ee-370c-43bf-8e8f-5eb4eb5f7f53') mocker.patch( 'users.models.identities.get_identity', return_value=response.create_not_found_response() ) navigator = app.test_client() request = navigator.get( f'/users/identity/{identity_id}/zendesk_token/{token_version}', content_type='application/json', ) response_data = json.loads(request.data.decode('utf-8')) assert request.status_code == 404 assert response_data == {'code': 'not_found_error', 'message': None} @db_utils.test_schema @patch('users.handlers.identity.Neo4jSession.__enter__') @patch('users.handlers.identity.Neo4jSession.__exit__') def test_get_zendesk_token_v1_unsupported_version(_exit, _enter): """Test no zendesk jwt token generated if token version is not supported.""" identity_id = '673eaeba-c7b7-4854-83a4-265c401bfb5f' token_version = '' navigator = app.test_client() request = navigator.get( f'/users/identity/{identity_id}/zendesk_token/{token_version}', content_type='application/json', ) response_data = json.loads(request.data.decode('utf-8')) assert request.status_code == 400 assert response_data == { 'code': 'validation_error', 'message': '"" is not supported.', }