def test_put_app_key_max_fail(app, mocker): expected_status = 400 expected_json = { 'error': { 'application': [ 'Value must be between 2 and 200 characters long.'], 'key': ['Value must be 32 characters long.'], } } request_mock = mocker.patch('modules.app_keys.routes_admin.request') request_mock.json = { 'application': "9xAqdEjnQ8uHmQjnSWUutERKfmgBFjWWsKkwKy4EBbpjeC8FuAXYH4bBqg5FVGapD47LTDsJmUU7dgUrxBVuSjhRUcQvxxukMvVs87ndpZ76DK9ZULFB77DjGDxmqJ5QHfEV6FjNXK2sbkFzdUBbbkPkcGpvgMqamdP33WpMFcDXpAftcRJyUJtMpVStZ3MMBS7LLVuBaDSBznGSfnpzTk6dS8zhnxpy8EayF6LSuKUjN3d2JkCrRDge5W8Rcmve", 'key': "AFJdJ9JCUhASZ4cA2ptC7CA72bYKLZD28", "status": 1 } app_key_1 = AppKey() app_key_1.id = 1 query_mock = mocker.patch('flask_sqlalchemy._QueryProperty.__get__') query_mock.return_value \ .get.return_value = app_key_1 query_mock.return_value \ .filter.return_value \ .first.return_value = None result = put_app_key(1) assert result[1] == expected_status assert result[0].json == expected_json
def test_put_app_key_min_fail(app, mocker): expected_status = 400 expected_json = { 'error': { 'application': [ 'Value must be between 2 and 200 characters long.'], 'key': ['Value must be 32 characters long.'], } } request_mock = mocker.patch('modules.app_keys.routes_admin.request') request_mock.json = { 'application': "T", 'key': "B8CzqaJWs9TmffSJjxDCFrepzhvYzrK", "status": 1 } app_key_1 = AppKey() app_key_1.id = 1 query_mock = mocker.patch('flask_sqlalchemy._QueryProperty.__get__') query_mock.return_value \ .get.return_value = app_key_1 query_mock.return_value \ .filter.return_value \ .first.return_value = None result = put_app_key(1) assert result[1] == expected_status assert result[0].json == expected_json
def test_put_app_key_required_fail(app, mocker): expected_status = 400 expected_json = { 'error': { 'application': ['Missing data for required field.'], 'foo': ['Unknown field.'], 'key': ['Missing data for required field.'], 'status': ['Missing data for required field.'], } } request_mock = mocker.patch('modules.app_keys.routes_admin.request') request_mock.json = {'foo': "bar"} app_key_1 = AppKey() app_key_1.id = 1 query_mock = mocker.patch('flask_sqlalchemy._QueryProperty.__get__') query_mock.return_value \ .get.return_value = app_key_1 query_mock.return_value \ .filter.return_value \ .first.return_value = None result = put_app_key(1) assert result[1] == expected_status assert result[0].json == expected_json
def test_put_app_key_type_fail(app, mocker): expected_status = 400 expected_json = { 'error': { 'application': ['Not a valid string.'], 'key': ['Not a valid string.'], 'status': ['Not a valid integer.'], } } request_mock = mocker.patch('modules.app_keys.routes_admin.request') request_mock.json = { 'application': 10, 'key': 15, "status": 'enabled' } app_key_1 = AppKey() app_key_1.id = 1 query_mock = mocker.patch('flask_sqlalchemy._QueryProperty.__get__') query_mock.return_value \ .get.return_value = app_key_1 query_mock.return_value \ .filter.return_value \ .first.return_value = None result = put_app_key(1) assert result[1] == expected_status assert result[0].json == expected_json
def test_put_app_key_ok(app, mocker): expected_status = 200 expected_m_length = 7 expected_m_application = 'Test Application A' expected_m_id = 1 expected_m_key = 'B8CzqaJWs9TmffSJjxDCFrepzhvYzrKA' expected_m_status = AppKey.STATUS_ENABLED expected_m_created_at = None expected_m_updated_at = None # @todo: timezone re_datetime = re.compile(r"^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$") request_mock = mocker.patch('modules.app_keys.routes_admin.request') request_mock.json = { 'application': expected_m_application, 'key': expected_m_key, "status": expected_m_status } app_key_1 = AppKey() app_key_1.id = expected_m_id query_mock = mocker.patch('flask_sqlalchemy._QueryProperty.__get__') query_mock.return_value \ .get.return_value = app_key_1 query_mock.return_value \ .filter.return_value \ .first.return_value = None db_mock = mocker.patch('modules.app_keys.routes_admin.db') db_mock.commit.return_value = None result = put_app_key(expected_m_id) assert result[1] == expected_status assert 'app_key' in result[0].json assert len(result[0].json['app_key']) == expected_m_length assert result[0].json['app_key']['application'] == expected_m_application assert result[0].json['app_key']['id'] == expected_m_id assert result[0].json['app_key']['key'] == expected_m_key assert result[0].json['app_key']['status'] == expected_m_status assert bool(re_datetime.match( result[0].json['app_key']['status_changed_at'])) assert result[0].json['app_key']['created_at'] == expected_m_created_at assert result[0].json['app_key']['updated_at'] == expected_m_updated_at
def test_put_app_key_route_ok(app, mocker, client): expected_status = 200 expected_m_length = 7 expected_m_application = 'Test Application A' expected_m_id = AppKey.STATUS_ENABLED expected_m_key = 'B8CzqaJWs9TmffSJjxDCFrepzhvYzrKA' expected_m_status = AppKey.STATUS_DISABLED expected_m_created_at = None expected_m_updated_at = None # @todo: timezone re_datetime = re.compile(r"^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$") data = { 'application': expected_m_application, 'key': expected_m_key, "status": expected_m_status } app_key_1 = AppKey() app_key_1.id = expected_m_id query_mock = mocker.patch('flask_sqlalchemy._QueryProperty.__get__') # mock app key authorization db query query_mock.return_value \ .filter.return_value \ .one.return_value = AppKey() # mock app key authorization db query query_mock.return_value \ .filter.return_value \ .one.return_value = AppKey() # mock user login db query role2 = Role() role2.id = 2 role2.name = 'SUPER_ADMIN' role2.password_reset_days = 365 admin1 = Administrator() admin1.id = 1 admin1.password = '******' admin1.roles = [role2] query_mock.return_value \ .filter.return_value \ .first.side_effect = [admin1, None] auth_db_mock = mocker.patch('modules.administrators.authentication.db') auth_db_mock.add.return_value = None auth_db_mock.commit.return_value = None query_mock.return_value \ .get.return_value = app_key_1 db_mock = mocker.patch('modules.app_keys.routes_admin.db') db_mock.commit.return_value = None # mock user login auth_mock = mocker.patch( 'modules.administrators.Authentication.is_account_locked') auth_mock.return_value = False credentials = base64.b64encode( 'admin1:admin1pass'.encode('ascii')).decode('utf-8') response = client.put( "/app_key/{}?app_key=123".format(expected_m_id), json=data, headers={"Authorization": f"Basic {credentials}"}) assert response.status_code == expected_status assert 'app_key' in response.json assert len(response.json['app_key']) == expected_m_length assert response.json['app_key']['application'] == expected_m_application assert response.json['app_key']['id'] == expected_m_id assert response.json['app_key']['key'] == expected_m_key assert response.json['app_key']['status'] == expected_m_status assert bool(re_datetime.match( response.json['app_key']['status_changed_at'])) assert response.json['app_key']['created_at'] == expected_m_created_at assert response.json['app_key']['updated_at'] == expected_m_updated_at