Source code for galaxy_test.selenium.test_history_panel_collections

import time

from galaxy.selenium.navigates_galaxy import WAIT_TYPES
from galaxy_test.base.api_asserts import assert_status_code_is
from galaxy_test.base.populators import flakey
from .framework import (
    retry_assertion_during_transitions,
    selenium_test,
    SeleniumTestCase,
)


[docs]class TestHistoryPanelCollections(SeleniumTestCase): ensure_registered = True
[docs] @selenium_test def test_mapping_collection_states_terminal(self): history_id = self.current_history_id() input_collection, failed_collection = self._generate_partially_failed_collection_with_input() input_hid = input_collection["hid"] failed_hid = failed_collection["hid"] self.home() ok_inputs = { "input1": {"batch": True, "values": [{"src": "hdca", "id": input_collection["id"]}]}, "sleep_time": 0, } ok_response = self.dataset_populator.run_tool( "cat_data_and_sleep", ok_inputs, history_id, ) ok_hid = ok_response["implicit_collections"][0]["hid"] self.history_panel_wait_for_hid_state(input_hid, "ok") self.history_panel_wait_for_hid_state(failed_hid, "error") self.history_panel_wait_for_hid_state(ok_hid, "ok") self.screenshot("history_panel_collections_state_mapping_terminal")
[docs] @selenium_test @flakey # Some times a Paste web thread will stall when jobs are running. def test_mapping_collection_states_running(self): history_id = self.current_history_id() input_collection = self.dataset_collection_populator.create_list_in_history( history_id, contents=["0", "1"] ).json() running_inputs = { "input1": {"batch": True, "values": [{"src": "hdca", "id": input_collection["id"]}]}, "sleep_time": 60, } running_response = self.dataset_populator.run_tool_raw( "cat_data_and_sleep", running_inputs, history_id, ) try: assert_status_code_is(running_response, 200) running_hid = running_response.json()["implicit_collections"][0]["hid"] # sleep really shouldn't be needed :( time.sleep(1) self.home() self.history_panel_wait_for_hid_state(running_hid, "running", 1) self.screenshot("history_panel_collections_state_mapping_running") finally: for job in running_response.json()["jobs"]: self.dataset_populator.cancel_job(job["id"])
[docs] @selenium_test def test_output_collection_states_terminal(self): history_id = self.current_history_id() input_collection = self.dataset_collection_populator.create_list_in_history( history_id, contents=["0", "1", "0", "1"] ).json()["outputs"][0] ok_inputs = {"input1": {"src": "hdca", "id": input_collection["id"]}} ok_response = self.dataset_populator.run_tool("collection_creates_list", ok_inputs, history_id) ok_hid = ok_response["output_collections"][0]["hid"] assert ok_hid > 0 failed_response = self.dataset_populator.run_tool( "collection_creates_dynamic_nested_fail", {}, history_id, ) failed_hid = failed_response["output_collections"][0]["hid"] assert failed_hid > 0 # sleep really shouldn't be needed :( time.sleep(1) self.home() self.history_panel_wait_for_hid_state(ok_hid, "ok") self.history_panel_wait_for_hid_state(failed_hid, "error") self.screenshot("history_panel_collections_state_terminal")
[docs] @selenium_test @flakey # Some times a Paste web thread will stall when jobs are running. def test_output_collection_states_running(self): history_id = self.current_history_id() running_inputs = { "sleep_time": 180, } payload = self.dataset_populator.run_tool( "collection_creates_dynamic_nested", running_inputs, history_id, ) assert payload["output_collections"] assert payload["jobs"] assert len(payload["jobs"]) > 0 assert len(["output_collections"]) > 0 running_hid = payload["output_collections"][0]["hid"] assert running_hid try: self.history_panel_wait_for_hid_state(running_hid, "running") self.screenshot("history_panel_collections_state_running") finally: for job in payload["jobs"]: self.dataset_populator.cancel_job(job["id"])
[docs] @selenium_test def test_collection_job_details(self): ok_collection_hid, failed_collection_hid = self._generate_ok_and_failed_collections() ok_collection_element = self.history_panel_wait_for_hid_state(ok_collection_hid, "ok") failed_collection_element = self.history_panel_wait_for_hid_state(failed_collection_hid, "error") ok_collection_element.collection_job_details_button.wait_for_and_click() self.components.job_details.galaxy_tool_with_id(tool_id="collection_creates_list").wait_for_visible() tool_exit_code_component = self.components.job_details.tool_exit_code.wait_for_visible() self.screenshot("history_panel_collections_job_details_ok") assert int(tool_exit_code_component.text) == 0 failed_collection_element.collection_job_details_button.wait_for_and_click() self.components.job_details.galaxy_tool_with_id(tool_id="collection_creates_list_fail").wait_for_visible() tool_exit_code_component = self.components.job_details.tool_exit_code.wait_for_visible() self.screenshot("history_panel_collections_job_details_failed") assert int(tool_exit_code_component.text) > 0
[docs] @selenium_test def test_back_to_history_button(self): input_collection = self._populated_paired_and_wait_for_it() collection_hid = input_collection["hid"] self.history_panel_wait_for_hid_state(collection_hid, "ok") self.history_panel_expand_collection(collection_hid) self._back_to_history() self.history_panel_wait_for_hid_state(collection_hid, "ok")
def _back_to_history(self): menu = self.history_element("collection breadcrumbs menu") if not menu.is_absent: menu.wait_for_and_click() back = self.history_element("back to history") back.wait_for_and_click() self.sleep_for(WAIT_TYPES.UX_RENDER)
[docs] @selenium_test def test_rename_collection(self): input_collection = self._populated_paired_and_wait_for_it() collection_hid = input_collection["hid"] self.history_panel_expand_collection(collection_hid) self.sleep_for(self.wait_types.UX_RENDER) self.history_panel_wait_for_hid_state(collection_hid, "ok") new_name = "My New Name" self.history_panel_collection_rename(collection_hid, new_name, assert_old_name=input_collection["name"]) self.screenshot("history_panel_collection_view_rename") @retry_assertion_during_transitions def assert_name_changed(): title_element = self.history_panel_collection_name_element() assert title_element.text == new_name assert_name_changed()
[docs] @selenium_test def test_name_tags_display(self): # Test setting a name tag and viewing it from the outer history panel. input_collection = self._populated_paired_and_wait_for_it() collection_hid = input_collection["hid"] self.history_panel_expand_collection(collection_hid) self.sleep_for(self.wait_types.UX_RENDER) self.history_panel_add_tags(["#moo"]) self.sleep_for(self.wait_types.HISTORY_POLL) self.screenshot("history_panel_collection_view_add_nametag") self._back_to_history() self.sleep_for(self.wait_types.UX_RENDER) self.history_panel_wait_for_hid_state(collection_hid, "ok") nametags = self.history_panel_item_get_tags(collection_hid) assert nametags == ["#moo"] self.screenshot("history_panel_collection_with_nametag")
[docs] @selenium_test def test_paired_display(self): input_collection = self._populated_paired_and_wait_for_it() collection_hid = input_collection["hid"] collection_view = self.history_panel_expand_collection(collection_hid) self.sleep_for(WAIT_TYPES.UX_TRANSITION) dataset_elements = collection_view.list_items.all() assert len(dataset_elements) == 2, dataset_elements selector = ".title .name" selector = ".content-title" titles = [de.find_element(self.by.CSS_SELECTOR, selector).text for de in dataset_elements] assert titles == ["forward", "reverse"] self.screenshot("history_panel_collection_view_paired")
[docs] @selenium_test @flakey # Fails only in Jenkins full suite - possibly due to #3782 def test_list_display(self): input_collection, failed_collection = self._generate_partially_failed_collection_with_input() failed_hid = failed_collection["hid"] self.home() self.history_panel_wait_for_hid_state(failed_hid, "error") collection_view = self.history_panel_expand_collection(failed_hid) @retry_assertion_during_transitions def check_four_datasets_shown(): self.sleep_for(WAIT_TYPES.HISTORY_POLL) dataset_elements = collection_view.list_items.all() assert len(dataset_elements) == 4, dataset_elements selector = ".title .name" selector = ".content-title" title_elements = [de.find_element(self.by.CSS_SELECTOR, selector).text for de in dataset_elements] assert title_elements == ["data1", "data2", "data3", "data4"] check_four_datasets_shown() self.screenshot("history_panel_collection_view_list")
[docs] @selenium_test def test_list_paired_display(self): history_id = self.current_history_id() collection = self.dataset_collection_populator.create_list_of_pairs_in_history(history_id).json()["outputs"][0] collection_hid = collection["hid"] self.home() self.history_panel_wait_for_hid_state(collection_hid, "ok") self.history_panel_expand_collection(collection_hid) self.screenshot("history_panel_collection_view_list_paired")
[docs] @selenium_test def test_list_list_display(self): history_id = self.current_history_id() collection = self.dataset_collection_populator.create_list_of_list_in_history(history_id).json() collection_hid = collection["hid"] self.home() self.history_panel_wait_for_hid_state(collection_hid, "ok") self.history_panel_expand_collection(collection_hid) self.screenshot("history_panel_collection_view_list_list")
def _generate_partially_failed_collection_with_input(self): history_id = self.current_history_id() input_collection = self.dataset_collection_populator.create_list_in_history( history_id, contents=["0", "1", "0", "1"], wait=True ).json()["outputs"][0] failed_response = self.dataset_populator.run_exit_code_from_file(history_id, input_collection["id"]) failed_collection = failed_response["implicit_collections"][0] return input_collection, failed_collection def _populated_paired_and_wait_for_it(self): history_id = self.current_history_id() input_collection = self.dataset_collection_populator.create_pair_in_history(history_id, wait=True).json()[ "outputs" ][0] collection_hid = input_collection["hid"] self.history_panel_wait_for_hid_state(collection_hid, "ok") return input_collection def _generate_ok_and_failed_collections(self): history_id = self.current_history_id() fetch_response = self.dataset_collection_populator.create_list_in_history( history_id, contents=["0", "1", "0", "1"] ).json() hdca_id = self.dataset_collection_populator.wait_for_fetched_collection(fetch_response)["id"] collection_input = {"input1": {"src": "hdca", "id": hdca_id}} ok_response = self.dataset_populator.run_tool("collection_creates_list", collection_input, history_id) failed_response = self.dataset_populator.run_tool("collection_creates_list_fail", collection_input, history_id) ok_collection_hid = ok_response["output_collections"][0]["hid"] failed_collection_hid = failed_response["output_collections"][0]["hid"] return ok_collection_hid, failed_collection_hid