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.selenium.test_admin_app
from galaxy_test.base.decorators import requires_admin
from galaxy_test.base.populators import flakey
from .framework import (
selenium_test,
SeleniumTestCase,
)
[docs]class TestAdminApp(SeleniumTestCase):
run_as_admin = True
[docs] @selenium_test
@requires_admin
def test_html_allowlist(self):
admin_component = self.components.admin
self.admin_login()
self.admin_open()
self.sleep_for(self.wait_types.UX_RENDER)
self.screenshot("admin_landing")
admin_component.index.allowlist.wait_for_and_click()
self.sleep_for(self.wait_types.UX_RENDER)
self.screenshot("admin_allowlist_landing")
admin_component.allowlist.local.wait_for_and_click()
self.sleep_for(self.wait_types.UX_RENDER)
self.screenshot("admin_allowlist_local_landing")
# This should be updated if the list of built-in converters is changed.
render_button = self.find_element_by_xpath("//td[.='CONVERTER_bam_to_bigwig_0']/following::td/button")
render_button.click()
self.sleep_for(self.wait_types.UX_RENDER)
self.screenshot("admin_allowlist_converter_html_rendered")
admin_component.allowlist.rendered_active.wait_for_and_click()
self.sleep_for(self.wait_types.UX_RENDER)
self.screenshot("admin_allowlist_render_landing")
self.sleep_for(self.wait_types.UX_RENDER)
sanitize_button = self.find_element_by_xpath("//td[.='CONVERTER_bam_to_bigwig_0']/following::td/button")
sanitize_button.click()
self.sleep_for(self.wait_types.UX_RENDER)
self.screenshot("admin_allowlist_converter_sanitized")
[docs] @selenium_test
@flakey
@requires_admin
def test_admin_toolshed(self):
"""
This tests installing a repository, checking for upgrades, and uninstalling.
A repository named a_selenium_test_repo has been created for this test,
owned by devteam@galaxyproject.org. The repository contains a tool with two versions,
and the oldest version gets installed so that there will be an upgrade available
on the 'Installed Only' view. Unfortunately, since this test relies on the presence
of the toolshed server, in some cases it will fail even if the galaxy code is correct,
necessitating the use of the @flakey decorator.
"""
repository_name = "a_selenium_test_repo"
admin_component = self.components.admin
self.admin_login()
self.admin_open()
self.sleep_for(self.wait_types.UX_RENDER)
self.screenshot("admin_landing")
admin_component.index.toolshed.wait_for_and_click()
self.sleep_for(self.wait_types.UX_RENDER)
self.screenshot("admin_toolshed_landing")
repo_search_input = self.find_element_by_id("toolshed-repo-search")
repo_search_input.clear()
repo_search_input.send_keys(repository_name)
# If this hasn't succeeded after 30 seconds, the @flakey context should
# allow the test to still pass, since there should definitely be results
# after 30 seconds.
self.sleep_for(self.wait_types.SHED_SEARCH)
self.screenshot("admin_toolshed_search")
admin_component.toolshed.search_results.wait_for_visible()
repository_row = self.find_element_by_link_text(repository_name)
repository_row.click()
self.sleep_for(self.wait_types.UX_RENDER)
self.screenshot("admin_toolshed_repo_details")
install_button = self.find_element_by_xpath("(//button[contains(., 'Install')])[2]")
install_button.click()
self.sleep_for(self.wait_types.UX_RENDER)
self.screenshot("admin_toolshed_repo_install_settings")
self.sleep_for(self.wait_types.UX_TRANSITION)
ok_button = self.find_element_by_xpath(
"//*[@id='repo-install-settings___BV_modal_footer_']/button[contains(., 'OK')]"
)
ok_button.click()
self.sleep_for(self.wait_types.REPO_INSTALL)
installed_only = self.find_element_by_xpath("//span[contains(. ,'Installed Only')]/../../input")
self.action_chains().move_to_element(installed_only).click().perform()
self.sleep_for(self.wait_types.UX_TRANSITION)
# This serves as a check for the presence of the upgrade notification.
admin_component.toolshed.upgrade_notification.wait_for_visible()
self.screenshot("admin_toolshed_repo_installed")
repository_row = self.find_element_by_xpath(f"//div[contains(text(), '{repository_name}')]/..")
repository_row.click()
self.sleep_for(self.wait_types.UX_TRANSITION)
self.screenshot("admin_toolshed_installed_only")
# Unfortunately reusing the element isn't feasible, since the div
# containing the button gets replaced with a new div and button.
uninstall_button = self.find_element_by_xpath("(//button[contains(., 'Uninstall')])[1]")
uninstall_button.click()
self.sleep_for(self.wait_types.UX_TRANSITION)
self.screenshot("admin_toolshed_repo_uninstalled")
[docs] @selenium_test
@requires_admin
def test_admin_dependencies_display(self):
admin_component = self.components.admin
self.admin_login()
self.admin_open()
self.screenshot("admin_landing")
admin_component.index.dependencies.wait_for_and_click()
self.sleep_for(self.wait_types.UX_RENDER)
# Ensure that tabs are visible
self.find_element_by_link_text("Dependencies")
self.find_element_by_link_text("Containers")
unused_link = self.find_element_by_link_text("Unused")
# Ensure that #manage-resolver-type is visible.
admin_component.manage_dependencies.resolver_type.wait_for_visible()
self.screenshot("admin_dependencies_landing")
self.action_chains().move_to_element(unused_link).click().perform()
self.sleep_for(self.wait_types.UX_RENDER)
# Ensure that the unused paths table is visible.
admin_component.manage_dependencies.unused_paths.wait_for_visible()
self.screenshot("admin_dependencies_unused")
[docs] @selenium_test
@requires_admin
def test_admin_jobs_display(self):
admin_component = self.components.admin
self.admin_login()
self.admin_open()
self.sleep_for(self.wait_types.UX_RENDER)
self.screenshot("admin_landing")
admin_component.index.jobs.wait_for_and_click()
self.sleep_for(self.wait_types.UX_RENDER)
self.screenshot("admin_jobs_landing")
# Since both get_property and get_attribute always return true, use the
# label for the job lock toggle to verify that job locking actually happens
manage_jobs = admin_component.manage_jobs
lock_label = manage_jobs.job_lock_label
original_label = lock_label.wait_for_text()
lock_label.wait_for_and_click()
self.sleep_for(self.wait_types.UX_TRANSITION)
# Make sure the job lock has been toggled.
new_label = lock_label.wait_for_text()
assert new_label != original_label
self.screenshot("admin_jobs_locked")
lock_label.wait_for_and_click()
self.sleep_for(self.wait_types.UX_TRANSITION)
self.screenshot("admin_jobs_unlocked")
# And confirm that it has toggled back to what it was.
assert lock_label.wait_for_text() == original_label
[docs] @selenium_test
@requires_admin
def test_admin_server_display(self):
admin_component = self.components.admin
self.admin_login()
self.admin_open()
self.screenshot("admin_landing")
admin_component.index.datatypes.wait_for_and_click()
admin_component.datatypes_grid.wait_for_visible()
self.screenshot("admin_datatypes")
admin_component.index.data_tables.wait_for_and_click()
admin_component.data_tables_grid.wait_for_visible()
self.screenshot("admin_data_tables")
admin_component.index.display_applications.wait_for_and_click()
self.assert_message(self.components.admin.warning, "No display applications available.")
self.screenshot("admin_display_applications")
admin_component.index.jobs.wait_for_and_click()
admin_component.update_jobs.wait_for_visible()
self.screenshot("admin_manage_jobs")
admin_component.index.local_data.wait_for_and_click()
title_element = admin_component.dm_title.wait_for_visible()
assert title_element.text == "Local Data"
self.screenshot("admin_local_data")
[docs] @selenium_test
@requires_admin
def test_admin_user_display(self):
admin_component = self.components.admin
self.admin_login()
self.admin_open()
admin_component.index.users.wait_for_and_click()
admin_component.users_grid.wait_for_visible()
self.screenshot("admin_users")
admin_component.users_grid_create_button.wait_for_and_click()
admin_component.registration_form.wait_for_visible()
self.screenshot("admin_user_registration")
self.admin_open()
admin_component.index.groups.wait_for_and_click()
admin_component.groups_grid.wait_for_visible()
self.screenshot("admin_groups")
admin_component.groups_grid_create_button.wait_for_and_click()
admin_component.groups_create_view.wait_for_visible()
self.screenshot("admin_groups_create")
self.admin_open()
admin_component.index.roles.wait_for_and_click()
admin_component.roles_grid.wait_for_visible()
self.screenshot("admin_roles")
[docs] @selenium_test
@requires_admin
def test_admin_data_manager(self):
admin_component = self.components.admin
self.admin_login()
self.admin_open()
admin_component.index.local_data.wait_for_and_click()
title_element = admin_component.dm_title.wait_for_visible()
assert title_element.text == "Local Data"
admin_component.dm_data_managers_card.wait_for_visible()
admin_component.dm_jobs_button(data_manager="test-data-manager").wait_for_visible()
self.screenshot("admin_data_manager")
with self.dataset_populator.test_history() as history_id:
run_response = self.dataset_populator.run_tool_raw(
tool_id="data_manager",
inputs={"ignored_value": "test"},
history_id=history_id,
)
job_id = run_response.json()["jobs"][0]["id"]
self.dataset_populator.wait_for_tool_run(history_id=history_id, run_response=run_response, assert_ok=False)
admin_component.dm_jobs_button(data_manager="test-data-manager").wait_for_and_click()
admin_component.dm_jobs_breadcrumb.wait_for_visible()
admin_component.dm_jobs_table.wait_for_visible()
self.screenshot("admin_data_manager_jobs")
admin_component.dm_job(job_id=job_id).wait_for_and_click()
admin_component.dm_job_breadcrumb.wait_for_visible()
admin_component.dm_job_data_manager_card.wait_for_visible()
admin_component.dm_job_data_card(hda_index=0).wait_for_visible()
self.screenshot("admin_data_manager_job")
admin_component.index.local_data.wait_for_and_click()
admin_component.dm_table_button(data_table="testbeta").wait_for_and_click()
admin_component.dm_table_card.wait_for_visible()
self.screenshot("admin_data_manager_table")