def test_logout_successful(admin_token):
    """
    注销用户成功
    :param admin_token:
    :return:
    """
    result = http_get(logout_url, token=admin_token)
    assert result.json()['code'] == 0
    result = http_get(get_user_url.format(user_id=1), token=admin_token)
    assert result.status_code == 401
    assert result.json()['code'] == 1002
    assert result.json()['msg'] == "认证错误"
def test_get_device_failed(admin_token):
    """
    获取设备详情失败
    :param admin_token:
    :return:
    """
    result = http_get(get_device_url.format(device_id=999), token=admin_token)
    assert result.json()['code'] == 3002
    assert result.json()['msg'] == "获取设备信息失败"
def test_get_user_normal_user_get_own_profile_successful(test1_token):
    """
    成功获取自己的信息,有权限用户。admin_or_has_permission_self权限测试。
    :param test1_token:
    :return:
    """
    result = http_get(get_user_url.format(user_id=2), token=test1_token)
    assert result.json()['code'] == 0
    assert result.json()['data']['id'] == 2
def test_get_user_admin_get_other_user_successful(admin_token):
    """
    成功获取其他用户信息,admin用户。admin_or_has_permission_self权限测试。
    :param admin_token:
    :return:
    """
    result = http_get(get_user_url.format(user_id=2), token=admin_token)
    assert result.json()['code'] == 0
    assert result.json()['data']['id'] == 2
def test_get_device_successful(admin_token):
    """
    获取设备详情成功
    :param admin_token:
    :return:
    """
    result = http_get(get_device_url.format(device_id=1), token=admin_token)
    assert result.json()['code'] == 0
    assert result.json()['data']['id'] == 1
def test_get_user_not_exist_user_failed(admin_token):
    """
    获取用户信息失败
    :param admin_token:
    :return:
    """
    result = http_get(get_user_url.format(user_id=999), token=admin_token)
    assert result.json()['code'] == 2004
    assert result.json()['msg'] == "获取用户资料失败"
def test_get_role_failed(admin_token):
    """
    获取角色信息失败
    :param admin_token:
    :return:
    """
    result = http_get(get_role_url.format(role_id=993), token=admin_token)
    assert result.json()['code'] == 4002
    assert result.json()['msg'] == "角色不存在"
def test_get_user_not_has_permission_failed(test3_token):
    """
    获取用户信息失败,无权限。admin_or_has_permission_self权限测试。
    :param test3_token:
    :return:
    """
    result = http_get(get_user_url.format(user_id=4), token=test3_token)
    assert result.status_code == 403
    assert result.json()['code'] == 1003
    assert result.json()['msg'] == "无权限访问"
def test_get_user_normal_user_get_other_user_failed(test1_token):
    """
    获取他人信息失败,有权限用户。admin_or_has_permission_self权限测试。
    :param test1_token:
    :return:
    """
    result = http_get(get_user_url.format(user_id=3), token=test1_token)
    assert result.status_code == 403
    assert result.json()['code'] == 1003
    assert result.json()['msg'] == "无权限访问"
def test_get_role_successful(admin_token):
    """
    获取角色详情成功
    :param admin_token:
    :return:
    """
    result = http_get(get_role_url.format(role_id=2), token=admin_token)
    assert result.json()['code'] == 0
    assert result.json()['msg'] == "ok"
    assert result.json()['data']['id'] == 2
def test_get_devices_successful_by_filter(admin_token):
    """
    使用过滤条件获取设备列表成功
    :param admin_token:
    :return:
    """
    params = {"page": 1, "per_page": 20, "brand": "Apple", "model": "apple"}
    result = http_get(get_devices_url, params=params, token=admin_token)
    assert result.json()['code'] == 0
    assert len(result.json()['data']) > 0
def test_get_devices_successful_empty(admin_token):
    """
    获取设备列表成功,空列表
    :param admin_token:
    :return:
    """
    params = {"page": 1, "per_page": 20, "model": "test"}
    result = http_get(get_devices_url, params=params, token=admin_token)
    assert result.json()['code'] == 0
    assert result.json()['total'] == 0
def test_get_devices_successful(admin_token):
    """
    获取设备列表成功
    :param admin_token:
    :return:
    """
    params = {"page": 1, "per_page": 2}
    result = http_get(get_devices_url, params=params, token=admin_token)
    assert result.json()['code'] == 0
    assert result.json()['data'][0]["id"] == 1
def test_return_back_failed(admin_token, empty_device_apply_record):
    """
    归还设备失败
    :param admin_token:
    :param empty_device_apply_record:
    :return:
    """
    empty_device_apply_record(1, 999)
    result = http_get(return_url.format(apply_id=999), token=admin_token)
    assert result.json()['code'] == 3006
    assert result.json()['msg'] == "归还失败"
def test_get_roles_successful(admin_token):
    """
    获取角色列表成功
    :param admin_token:
    :return:
    """
    result = http_get(get_roles_url + "?page=1&per_page=2", token=admin_token)
    assert result.json()['code'] == 0
    assert result.json()['msg'] == "ok"
    assert len(result.json()['data']) == 2
    assert result.json()['per_page'] == 2
def test_get_users_failed_without_permission(test3_token):
    """
    获取用户列表失败,无权限用户。admin_or_has_permission权限测试。
    :param test3_token:
    :return:
    """
    params = {"page": 2, "per_page": 3}
    result = http_get(get_users_url, params=params, token=test3_token)
    assert result.status_code == 403
    assert result.json()['code'] == 1003
    assert result.json()['msg'] == "无权限访问"
def test_delete_role_failed(admin_token, empty_role):
    """
    删除角色失败
    :param admin_token:
    :param execute_sql:
    :return:
    """
    empty_role(994)
    result = http_get(delete_role_url.format(role_id=994), token=admin_token)
    assert result.json()['code'] == 4002
    assert result.json()['msg'] == "角色不存在"
def test_get_users_successful_has_permission(test2_token):
    """
    成功获取用户列表,有权限用户。admin_or_has_permission权限测试。
    :param test2_token:
    :return:
    """
    params = {"page": 2, "per_page": 3}
    result = http_get(get_users_url, params=params, token=test2_token)
    assert result.json()['code'] == 0
    assert result.json()['per_page'] == 3
    assert result.json()['page'] == 2
    assert result.json()['data'][0]["username"] == "test3"
def test_cancel_apply_successful(test1_token, empty_device_apply_record,
                                 execute_sql):
    """
    取消申请成功
    :param test1_token:
    :param empty_device_apply_record:
    :param execute_sql:
    :return:
    """
    empty_device_apply_record(1, 1)
    sql = """INSERT INTO device_apply_record VALUES (1, 4, 2, '2019-10-15 09:28:55', '2019-10-30 00:55:55', '测试需要', 1, NULL, NULL, NULL, NULL, 0, 0, '2019-10-15 16:16:48.399755', '2019-10-15 16:16:48.399755');
        """
    execute_sql(sql)
    result = http_get(cancel_url.format(apply_id=1), token=test1_token)
    assert result.json()['code'] == 0
    assert result.json()['msg'] == "ok"
def test_delete_role_successful(admin_token, empty_role, execute_sql):
    """
    删除角色成功
    :param admin_token:
    :param empty_role:
    :param execute_sql:
    :return:
    """
    empty_role(995)
    sql = """
    INSERT INTO role VALUES (995, '角色995', '描述995', '2019-10-18 17:45:21', '2019-10-18 17:45:21');
    """
    execute_sql(sql)
    result = http_get(delete_role_url.format(role_id=995), token=admin_token)
    assert result.json()['code'] == 0
    assert result.json()['msg'] == "ok"
def test_get_users_successful_by_filter(admin_token):
    """
    成功获取用户列表,使用参数过滤功能
    :param admin_token:
    :return:
    """
    params = {
        "page": 1,
        "per_page": 3,
        "username": "******",
        "realname": "test1",
        "email": "*****@*****.**",
        "status": 1
    }
    result = http_get(get_users_url, params=params, token=admin_token)
    assert result.json()['code'] == 0
    assert result.json()['data'][0]["username"] == "test1"
def test_return_back_successful(admin_token, empty_device_apply_record,
                                execute_sql):
    """
    归还设备成功
    :param admin_token:
    :param empty_device_apply_record:
    :param execute_sql:
    :return:
    """
    empty_device_apply_record(1, 1)
    sql = """
    INSERT INTO device_apply_record VALUES (1, 1, 1, '2019-10-15 09:28:55', '2019-10-30 00:55:55', '测试需要', 6, NULL, NULL, NULL, NULL, 0, 0, '2019-10-15 16:16:48.399755', '2019-10-15 16:16:48.399755');
    """
    execute_sql(sql)
    result = http_get(return_url.format(apply_id=1), token=admin_token)
    assert result.json()['code'] == 0
    assert result.json()['msg'] == "ok"
def test_return_back_failed_wrong_status(admin_token,
                                         empty_device_apply_record,
                                         execute_sql):
    """
    归还设备失败,错误的设备状态
    :param admin_token:
    :param empty_device_apply_record:
    :param execute_sql:
    :return:
    """
    empty_device_apply_record(1, 1)
    sql = """
        INSERT INTO device_apply_record VALUES (1, 1, 1, '2019-10-15 09:28:55', '2019-10-30 00:55:55', '测试需要', 3, NULL, NULL, NULL, NULL, 0, 0, '2019-10-15 16:16:48.399755', '2019-10-15 16:16:48.399755');
        """
    execute_sql(sql)
    result = http_get(return_url.format(apply_id=1), token=admin_token)
    assert result.json()['code'] == 3006
    assert result.json()['msg'] == "归还失败"