mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-10-24 12:13:33 +08:00
Add integration tests for exposing user information
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
from typing import ClassVar
|
||||
|
||||
from galaxy_test.driver import integration_util
|
||||
|
||||
USER_SUMMARY_KEYS = set(["model_class", "id", "email", "username", "deleted", "active", "last_password_change"])
|
||||
|
||||
|
||||
class UsersIntegrationTestCase(integration_util.IntegrationTestCase):
|
||||
expose_user_name: ClassVar[bool]
|
||||
expose_user_email: ClassVar[bool]
|
||||
expected_regular_user_list_count: ClassVar[int]
|
||||
expected_limited_user_keys: ClassVar[set]
|
||||
|
||||
@classmethod
|
||||
def handle_galaxy_config_kwds(cls, config):
|
||||
super().handle_galaxy_config_kwds(config)
|
||||
config["expose_user_name"] = cls.expose_user_name
|
||||
config["expose_user_email"] = cls.expose_user_email
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self._setup_users()
|
||||
|
||||
def _setup_users(self):
|
||||
self.user = self._get("users/current").json()
|
||||
self.user2 = self._setup_user("user02@test.gx")
|
||||
self.user3 = self._setup_user("user03@test.gx")
|
||||
|
||||
def test_admin_index(self):
|
||||
all_users_response = self._get("users", admin=True)
|
||||
self._assert_status_code_is(all_users_response, 200)
|
||||
all_users = all_users_response.json()
|
||||
assert len(all_users) == 3
|
||||
for user in all_users:
|
||||
self._assert_has_keys(user, *USER_SUMMARY_KEYS)
|
||||
|
||||
def test_user_index(self):
|
||||
requesting_user_id = self.user["id"]
|
||||
all_users_response = self._get("users")
|
||||
self._assert_status_code_is(all_users_response, 200)
|
||||
all_users = all_users_response.json()
|
||||
assert len(all_users) == self.expected_regular_user_list_count
|
||||
|
||||
unexpected_user_keys = USER_SUMMARY_KEYS - self.expected_limited_user_keys
|
||||
for user in all_users:
|
||||
if user["id"] == requesting_user_id:
|
||||
# Requesting users should be able to see their own information.
|
||||
self._assert_has_keys(user, *USER_SUMMARY_KEYS)
|
||||
continue
|
||||
# The user should be able to see other users information depending on the configuration.
|
||||
self._assert_has_keys(user, *self.expected_limited_user_keys)
|
||||
self._assert_not_has_keys(user, *unexpected_user_keys)
|
||||
|
||||
|
||||
class TestExposeUsersIntegration(UsersIntegrationTestCase):
|
||||
expose_user_name = True
|
||||
expose_user_email = True
|
||||
|
||||
# Since we allow to expose user information, all users are returned.
|
||||
expected_limited_user_keys = set(["id", "username", "email"])
|
||||
expected_regular_user_list_count = 3
|
||||
|
||||
|
||||
class TestExposeOnlyUserNameIntegration(UsersIntegrationTestCase):
|
||||
expose_user_name = True
|
||||
expose_user_email = False
|
||||
|
||||
# When only username is exposed, only that field is returned in the user list.
|
||||
# Since we are exposing user information, all users are returned.
|
||||
expected_limited_user_keys = set(["id", "username"])
|
||||
expected_regular_user_list_count = 3
|
||||
|
||||
|
||||
class TestExposeOnlyUserEmailIntegration(UsersIntegrationTestCase):
|
||||
expose_user_name = False
|
||||
expose_user_email = True
|
||||
|
||||
# When only email is exposed, only that field is returned in the user list.
|
||||
# Since we are exposing user information, all users are returned.
|
||||
expected_limited_user_keys = set(["id", "email"])
|
||||
expected_regular_user_list_count = 3
|
||||
|
||||
|
||||
class TestUnexposedUsersIntegration(UsersIntegrationTestCase):
|
||||
expose_user_name = False
|
||||
expose_user_email = False
|
||||
|
||||
# Since no user information is exposed, only the current user should be returned.
|
||||
# And the current user has all fields, so no limited fields.
|
||||
expected_limited_user_keys = set()
|
||||
expected_regular_user_list_count = 1
|
||||
Reference in New Issue
Block a user