1
0
mirror of https://github.com/quay/quay.git synced 2026-01-27 18:42:52 +03:00
Files
quay/endpoints/api/test/test_robot.py
2019-12-02 12:23:08 -05:00

101 lines
3.7 KiB
Python

import pytest
import json
from data import model
from endpoints.api import api
from endpoints.api.test.shared import conduct_api_call
from endpoints.api.robot import UserRobot, OrgRobot, UserRobotList, OrgRobotList
from endpoints.test.shared import client_with_identity
from util.names import parse_robot_username
from test.test_ldap import mock_ldap
from test.fixtures import *
@pytest.mark.parametrize("endpoint", [UserRobot, OrgRobot,])
@pytest.mark.parametrize(
"body",
[
{},
{"description": "this is a description"},
{"unstructured_metadata": {"foo": "bar"}},
{"description": "this is a description", "unstructured_metadata": {"foo": "bar"}},
],
)
def test_create_robot_with_metadata(endpoint, body, client):
with client_with_identity("devtable", client) as cl:
# Create the robot with the specified body.
conduct_api_call(
cl,
endpoint,
"PUT",
{"orgname": "buynlarge", "robot_shortname": "somebot"},
body,
expected_code=201,
)
# Ensure the create succeeded.
resp = conduct_api_call(
cl, endpoint, "GET", {"orgname": "buynlarge", "robot_shortname": "somebot",}
)
body = body or {}
assert resp.json["description"] == (body.get("description") or "")
assert resp.json["unstructured_metadata"] == (body.get("unstructured_metadata") or {})
@pytest.mark.parametrize(
"endpoint, params",
[
(UserRobot, {"robot_shortname": "dtrobot"}),
(OrgRobot, {"orgname": "buynlarge", "robot_shortname": "coolrobot"}),
],
)
def test_retrieve_robot(endpoint, params, app, client):
with client_with_identity("devtable", client) as cl:
result = conduct_api_call(cl, endpoint, "GET", params, None)
assert result.json["token"] is not None
@pytest.mark.parametrize(
"endpoint, params, bot_endpoint",
[(UserRobotList, {}, UserRobot), (OrgRobotList, {"orgname": "buynlarge"}, OrgRobot),],
)
@pytest.mark.parametrize("include_token", [True, False,])
@pytest.mark.parametrize("limit", [None, 1, 5,])
def test_retrieve_robots(endpoint, params, bot_endpoint, include_token, limit, app, client):
params["token"] = "true" if include_token else "false"
if limit is not None:
params["limit"] = limit
with client_with_identity("devtable", client) as cl:
result = conduct_api_call(cl, endpoint, "GET", params, None)
if limit is not None:
assert len(result.json["robots"]) <= limit
for robot in result.json["robots"]:
assert (robot.get("token") is not None) == include_token
if include_token:
bot_params = dict(params)
bot_params["robot_shortname"] = parse_robot_username(robot["name"])[1]
result = conduct_api_call(cl, bot_endpoint, "GET", bot_params, None)
assert robot.get("token") == result.json["token"]
@pytest.mark.parametrize("username, is_admin", [("devtable", True), ("reader", False),])
@pytest.mark.parametrize("with_permissions", [True, False,])
def test_retrieve_robots_token_permission(username, is_admin, with_permissions, app, client):
with client_with_identity(username, client) as cl:
params = {"orgname": "buynlarge", "token": "true"}
if with_permissions:
params["permissions"] = "true"
result = conduct_api_call(cl, OrgRobotList, "GET", params, None)
assert result.json["robots"]
for robot in result.json["robots"]:
assert (robot.get("token") is not None) == is_admin
assert (robot.get("repositories") is not None) == (is_admin and with_permissions)