Source code for galaxy_test.selenium.test_history_panel_collections

import time

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 HistoryPanelCollectionsTestCase(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"] 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, assert_ok=True, ) ok_hid = ok_response["implicit_collections"][0]["hid"] # sleep really shouldn't be needed :( time.sleep(1) self.home() 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( "cat_data_and_sleep", running_inputs, history_id, assert_ok=False, ) 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() 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"] failed_response = self.dataset_populator.run_tool( "collection_creates_dynamic_nested_fail", {}, history_id, ) failed_hid = failed_response["output_collections"][0]["hid"] # 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, } running_response = self.dataset_populator.run_tool( "collection_creates_dynamic_nested", running_inputs, history_id, assert_ok=False, ) try: assert_status_code_is(running_response, 200) running_hid = running_response.json()["output_collections"][0]["hid"] # sleep really shouldn't be needed :( time.sleep(1) self.home() self.history_panel_wait_for_hid_state(running_hid, "running") self.screenshot("history_panel_collections_state_running") finally: for job in running_response.json()["jobs"]: self.dataset_populator.cancel_job(job["id"])
[docs] @selenium_test def test_collection_operations(self): # Test back and rename. input_collection = self._populated_paired_and_wait_for_it() collection_hid = input_collection["hid"] collection_view = self._click_and_wait_for_collection_view(collection_hid) collection_view.back.wait_for_and_click() self.history_panel_wait_for_hid_state(collection_hid, "ok") self._click_and_wait_for_collection_view(collection_hid) title_element = collection_view.title.wait_for_visible() assert title_element.text == input_collection["name"] title_element.click() title_rename_element = collection_view.title_input.wait_for_visible() self.screenshot("history_panel_collection_view_rename") title_rename_element.send_keys("My New Name") self.send_enter(title_rename_element) title_element = collection_view.title.wait_for_visible() assert title_element.text == "My New Name"
[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"] collection_view = self._click_and_wait_for_collection_view(collection_hid) # the space on the end of the parent_selector is important self.tagging_add(["#moo"], parent_selector="#current-history-panel .dataset-collection-panel .controls ") self.screenshot("history_panel_collection_view_add_nametag") collection_view.back.wait_for_and_click() self.history_panel_wait_for_hid_state(collection_hid, "ok") nametags = self.history_panel_item_get_nametags(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._click_and_wait_for_collection_view(collection_hid) dataset_elements = collection_view.list_items.all() assert len(dataset_elements) == 2, dataset_elements title_elements = [de.find_element_by_css_selector(".title .name").text for de in dataset_elements] assert title_elements == ["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): _, 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._click_and_wait_for_collection_view(failed_hid) @retry_assertion_during_transitions def check_four_datasets_shown(): dataset_elements = collection_view.list_items.all() assert len(dataset_elements) == 4, dataset_elements title_elements = [de.find_element_by_css_selector(".title .name").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._click_and_wait_for_collection_view(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._click_and_wait_for_collection_view(collection_hid) self.screenshot("history_panel_collection_view_list_list")
[docs] @selenium_test def test_limiting_collection_rendering(self): history_id = self.current_history_id() collection = self.dataset_collection_populator.create_list_in_history(history_id, contents=["0", "1", "0", "1"]).json() collection_hid = collection["hid"] with self.local_storage("collectionFuzzyCountDefault", 2): self.home() self.history_panel_wait_for_hid_state(collection_hid, "ok") self._click_and_wait_for_collection_view(collection_hid) self.screenshot("history_panel_collection_view_limiting") warning_text = self.components.history_panel.collection_view.elements_warning.wait_for_text() assert "only 2 of 4 items" in warning_text, warning_text
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"]).json() 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 _click_and_wait_for_collection_view(self, collection_hid): self.history_panel_click_item_title(collection_hid) collection_view = self.components.history_panel.collection_view collection_view._.wait_for_visible() return collection_view 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).json() collection_hid = input_collection["hid"] self.home() self.history_panel_wait_for_hid_state(collection_hid, "ok") return input_collection