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