"""Functional test for generating a token.""" import json from unittest.mock import MagicMock from freezegun import freeze_time import jwt from owsresponse import response from users import ( config, constants, handlers, # noqa ) from users.app import app from users.connectors import aws_secrets_manager from users.logic import user_info @freeze_time('2017-11-15 11:31:0') def test_get_secret(monkeypatch): """Test get secret.""" app.testing = True navigator = app.test_client() shared_token = 'sec==ret' secret = {'shared_token': shared_token} path = '/ws/generate-token/feature-fm' feature_fm_path = constants.URL_PATHS['feature-fm'] expected_response = { 'url_path': ( '{0}?timestamp=1510745460&label_id=123&user_id=alw:123' '&token=YTEyZDI5NTE1MzE3Y2VjMjgzYTI0NjNjZTU3NzdiNDAwYT' 'ExODhjZQ=='.format(feature_fm_path) ) } monkeypatch.setattr(aws_secrets_manager, 'get_secret', MagicMock(return_value=secret)) monkeypatch.setattr(config, 'FEATURE_FM_SECRET_TOKEN_KEY', 'shared_token') request = navigator.get( path, headers={ constants.GRASS_ACCOUNT_TYPE: 'vendor', constants.GRASS_ACCOUNT_ID: '123', constants.ORCHARD_USER_ID: 'alw:123', }, ) response_data = json.loads(request.data.decode('utf-8')) assert request.status_code == 200 assert response_data == expected_response @freeze_time('2017-11-15 11:31:0') def test_get_secret_with_subaccount(monkeypatch): """Test get secret.""" app.testing = True navigator = app.test_client() shared_token = 'sec==ret' secret = {'shared_token': shared_token} path = '/ws/generate-token/feature-fm' feature_fm_path = constants.URL_PATHS['feature-fm'] expected_response = { 'url_path': ( '{0}?timestamp=1510745460&subaccount_id=123&user_id=' 'alw:123&token=YzM1NGU1ZWFhOWMxZjBlYTY5OTk3MTUxMWQwO' 'GJiNTg3YjM3NDhhYw=='.format(feature_fm_path) ) } monkeypatch.setattr(aws_secrets_manager, 'get_secret', MagicMock(return_value=secret)) monkeypatch.setattr(config, 'FEATURE_FM_SECRET_TOKEN_KEY', 'shared_token') request = navigator.get( path, headers={ constants.GRASS_ACCOUNT_TYPE: 'subaccount', constants.GRASS_ACCOUNT_ID: '123', constants.ORCHARD_USER_ID: 'alw:123', }, ) response_data = json.loads(request.data.decode('utf-8')) assert request.status_code == 200 assert response_data == expected_response def test_get_secret_bad_params(): """Test get secret with bad params.""" app.testing = True navigator = app.test_client() path = '/ws/generate-token/feature-fm' request = navigator.get(path) assert request.status_code == 400 @freeze_time('2017-11-15 11:31:0') def test_generate_jwt_token(monkeypatch): """Test generate_jwt_token handler.""" app.testing = True navigator = app.test_client() shared_token = 'sec==ret' secret = {'shared_token': shared_token} path = '/ws/generate-jwt-token/feature-fm' jwt_response = ( 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlX2lkcyI' '6WzRdLCJlbWFpbCI6ImpvaG4uZG9lQHRoZW9yY2hhcmQuY29tIiwid' 'GltZXN0YW1wIjoxNTEwNzQ1NDYwLCJjb21wYW55IjoiQ29tcGFueSIs' 'ImFjY291bnQiOnsidmVuZG9yX2lkIjoxMjM0LCJzdWJhY2NvdW50X2l' 'kIjpudWxsfSwidHlwZSI6ImFsdyIsImxhbmd1YWdlIjoiZW4iLCJma' 'XJzdF9uYW1lIjoiSm9obiIsImxhc3RfbmFtZSI6IkRvZSIsInVzZXJ' 'faWQiOiJhbHc6MTIzIn0.kxiWlsOvutNxY8N82wN6zBJX58KyQUUq4A' 'jPY8XPwlw' ) expected_response = {'jwt': jwt_response} user = { 'type': 'alw', 'language': 'en', 'account': {'subaccount_id': None, 'vendor_id': 1234}, 'email': 'john.doe@theorchard.com', 'last_name': 'Doe', 'first_name': 'John', 'user_id': 'alw:123', 'company': 'Company', 'role_ids': [constants.ADMIN_ROLE_ID], } monkeypatch.setattr(jwt, 'encode', MagicMock(return_value=jwt_response)) monkeypatch.setattr( user_info, 'get_user_info_feature_fm', MagicMock(return_value=response.Response(user)) ) monkeypatch.setattr(aws_secrets_manager, 'get_secret', MagicMock(return_value=secret)) monkeypatch.setattr(config, 'FEATURE_FM_SECRET_TOKEN_KEY', 'shared_token') request = navigator.get( path, headers={ constants.GRASS_ACCOUNT_TYPE: 'vendor', constants.GRASS_ACCOUNT_ID: '123', constants.ORCHARD_USER_ID: 'alw:123', }, ) response_data = json.loads(request.data.decode('utf8')) assert request.status_code == 200 assert response_data.__contains__('jwt') assert response_data == expected_response def test_generate_jwt_token_bad_params(): """Test generate_jwt_token handler with bad params.""" app.testing = True navigator = app.test_client() path = '/ws/generate-jwt-token/feature-fm' request = navigator.get(path) assert request.status_code == 400