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_history_panel_collections

import time

import pytest

from galaxy.selenium.navigates_galaxy import (
    edit_details,
    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 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, ) ok_hid = ok_response["implicit_collections"][0]["hid"] if not self.is_beta_history(): # 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_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() 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: if not self.is_beta_history(): # 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 payload["jobs"]: self.dataset_populator.cancel_job(job["id"])
[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._click_and_wait_for_collection_view(collection_hid) self._back_to_history() self.history_panel_wait_for_hid_state(collection_hid, "ok")
def _back_to_history(self): if self.is_beta_history(): # it's either a single back button or a dropdown with an option depending # on how deeply nested the collection is menu = self.beta_history_element("collection breadcrumbs menu") if not menu.is_absent: # menu.is_displayed results in an error but I don't understand why menu.wait_for_and_click() back = self.beta_history_element("back to history") else: back = self.components.history_panel.collection_view.back 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_wait_for_hid_state(collection_hid, "ok") collection_view = self._click_and_wait_for_collection_view(collection_hid) new_name = "My New Name" if self.is_beta_history(): self._rename_collection(new_name) self.screenshot("history_panel_collection_view_rename_beta") title_element = self.beta_history_element("collection name display").wait_for_present() else: 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() title_rename_element.send_keys(new_name) self.send_enter(title_rename_element) self.screenshot("history_panel_collection_view_rename") title_element = collection_view.title.wait_for_visible() assert title_element.text == new_name
@edit_details def _rename_collection(self, new_name): title_element = self.beta_history_element("name input").wait_for_clickable() title_element.clear() title_element.send_keys(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"] self._click_and_wait_for_collection_view(collection_hid) if self.is_beta_history(): self.history_panel_add_tags(["#moo"]) else: # the space on the end of the parent_selector is important self.tagging_add(["#moo"], parent_selector=".dataset-collection-panel .controls ") self.sleep_for(WAIT_TYPES.HISTORY_POLL) self.screenshot("history_panel_collection_view_add_nametag") self._back_to_history() 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) if self.is_beta_history(): self.sleep_for(WAIT_TYPES.HISTORY_POLL) dataset_elements = self.content_item_by_attributes().all() else: dataset_elements = collection_view.list_items.all() assert len(dataset_elements) == 2, dataset_elements titles = [de.find_element_by_css_selector(".title .name").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._click_and_wait_for_collection_view(failed_hid) @retry_assertion_during_transitions def check_four_datasets_shown(): if self.is_beta_history(): self.sleep_for(WAIT_TYPES.HISTORY_POLL) dataset_elements = collection_view.list_items_beta.all() else: 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): if self.is_beta_history(): raise pytest.skip("Beta history can scroll through collections of any length") 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_present() 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"] if not self.is_beta_history(): self.home() self.history_panel_wait_for_hid_state(collection_hid, "ok") return input_collection