Warning
This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.
Source code for galaxy_test.api.test_group_roles
from typing import (
List,
Optional,
)
from galaxy_test.api._framework import ApiTestCase
from galaxy_test.base.decorators import (
requires_admin,
using_requirement,
)
from galaxy_test.base.populators import DatasetPopulator
[docs]class TestGroupRolesApi(ApiTestCase):
dataset_populator: DatasetPopulator
[docs] def setUp(self):
super().setUp()
self.dataset_populator = DatasetPopulator(self.galaxy_interactor)
[docs] @requires_admin
def test_index(self, group_name: Optional[str] = None):
group_name = group_name or "test-group_roles"
group = self._create_group(group_name)
encoded_group_id = group["id"]
group_roles = self._get_group_roles(encoded_group_id)
assert isinstance(group_roles, list)
assert len(group_roles) > 0
for group_role in group_roles:
self._assert_valid_group_role(group_role)
[docs] def test_index_only_admin(self):
encoded_group_id = "any-group-id"
response = self._get(f"groups/{encoded_group_id}/roles")
self._assert_status_code_is(response, 403)
[docs] @requires_admin
def test_index_unknown_group_raises_400(self):
encoded_group_id = "unknown-group-id"
response = self._get(f"groups/{encoded_group_id}/roles", admin=True)
self._assert_status_code_is(response, 400)
[docs] @requires_admin
def test_show(self):
encoded_role_id = self.dataset_populator.user_private_role_id()
group = self._create_group("test-group-show-role", encoded_role_ids=[encoded_role_id])
encoded_group_id = group["id"]
response = self._get(f"groups/{encoded_group_id}/roles/{encoded_role_id}", admin=True)
self._assert_status_code_is(response, 200)
group_role = response.json()
self._assert_valid_group_role(group_role, assert_id=encoded_role_id)
[docs] def test_show_only_admin(self):
encoded_group_id = "any-group-id"
encoded_role_id = "any-role-id"
response = self._get(f"groups/{encoded_group_id}/roles/{encoded_role_id}")
self._assert_status_code_is(response, 403)
[docs] @requires_admin
def test_show_unknown_raises_400(self):
group = self._create_group("test-group-with-unknown-role")
encoded_group_id = group["id"]
encoded_role_id = "unknown-role-id"
response = self._get(f"groups/{encoded_group_id}/roles/{encoded_role_id}", admin=True)
self._assert_status_code_is(response, 400)
[docs] @requires_admin
def test_update(self):
group_name = "group-without-roles"
group = self._create_group(group_name, encoded_role_ids=[])
encoded_group_id = group["id"]
group_roles = self._get_group_roles(encoded_group_id)
assert len(group_roles) == 0
encoded_role_id = self.dataset_populator.user_private_role_id()
update_response = self._put(f"groups/{encoded_group_id}/roles/{encoded_role_id}", admin=True)
self._assert_status_code_is_ok(update_response)
group_role = update_response.json()
self._assert_valid_group_role(group_role, assert_id=encoded_role_id)
assert group_role["url"] == f"/api/groups/{encoded_group_id}/roles/{encoded_role_id}"
[docs] @requires_admin
def test_update_only_admin(self):
encoded_group_id = "any-group-id"
encoded_role_id = "any-role-id"
response = self._put(f"groups/{encoded_group_id}/roles/{encoded_role_id}")
self._assert_status_code_is(response, 403)
[docs] @requires_admin
def test_delete(self):
group_name = "group-with-role-to-delete"
encoded_role_id = self.dataset_populator.user_private_role_id()
group = self._create_group(group_name, encoded_role_ids=[encoded_role_id])
encoded_group_id = group["id"]
group_roles = self._get_group_roles(encoded_group_id)
assert len(group_roles) == 1
delete_response = self._delete(f"groups/{encoded_group_id}/roles/{encoded_role_id}", admin=True)
self._assert_status_code_is_ok(delete_response)
group_role = delete_response.json()
self._assert_valid_group_role(group_role, assert_id=encoded_role_id)
group_roles = self._get_group_roles(encoded_group_id)
assert len(group_roles) == 0
[docs] def test_delete_only_admin(self):
encoded_group_id = "any-group-id"
encoded_role_id = "any-role-id"
response = self._delete(f"groups/{encoded_group_id}/roles/{encoded_role_id}")
self._assert_status_code_is(response, 403)
[docs] @requires_admin
def test_delete_unknown_raises_400(self):
group_name = "group-without-role-to-delete"
group = self._create_group(group_name, encoded_role_ids=[])
encoded_group_id = group["id"]
group_roles = self._get_group_roles(encoded_group_id)
assert len(group_roles) == 0
encoded_role_id = "unknown-role-id"
delete_response = self._delete(f"groups/{encoded_group_id}/roles/{encoded_role_id}", admin=True)
self._assert_status_code_is(delete_response, 400)
def _create_group(self, group_name: str, encoded_role_ids: Optional[List[str]] = None):
if encoded_role_ids is None:
encoded_role_ids = [self.dataset_populator.user_private_role_id()]
role_ids = encoded_role_ids
payload = {
"name": group_name,
"role_ids": role_ids,
}
using_requirement("admin")
response = self._post("groups", payload, admin=True, json=True)
self._assert_status_code_is(response, 200)
group = response.json()[0] # POST /api/groups returns a list
return group
def _get_group_roles(self, encoded_group_id: str):
using_requirement("admin")
response = self._get(f"groups/{encoded_group_id}/roles", admin=True)
self._assert_status_code_is(response, 200)
group_roles = response.json()
return group_roles
def _assert_valid_group_role(self, role, assert_id=None):
self._assert_has_keys(role, "id", "name", "url")
if assert_id is not None:
assert role["id"] == assert_id