Source code for galaxy_test.selenium.test_uploads

import os

import pytest

from .framework import (
    selenium_test,
    SeleniumTestCase,
    UsesHistoryItemAssertions,
)


[docs]class TestUploads(SeleniumTestCase, UsesHistoryItemAssertions):
[docs] @selenium_test def test_upload_file(self): self.perform_upload(self.get_filename("1.sam")) self.history_panel_wait_for_hid_ok(1) history_count = len(self.history_contents()) assert history_count == 1, "Incorrect number of items in history - expected 1, found %d" % history_count self.history_panel_click_item_title(hid=1, wait=True) self.assert_item_summary_includes(1, "28 lines")
[docs] @selenium_test def test_upload_pasted_content(self): pasted_content = "this is pasted" self.perform_upload_of_pasted_content(pasted_content) self.history_panel_wait_for_hid_ok(1) history_count = len(self.history_contents()) assert history_count == 1, "Incorrect number of items in history - expected 1, found %d" % history_count
[docs] @selenium_test def test_upload_pasted_url_content(self): pasted_content = "https://raw.githubusercontent.com/galaxyproject/galaxy/dev/LICENSE.txt" self.perform_upload_of_pasted_content(pasted_content) self.history_panel_wait_for_hid_ok(1) history_count = len(self.history_contents()) assert history_count == 1, "Incorrect number of items in history - expected 1, found %d" % history_count
[docs] @selenium_test def test_upload_composite_dataset_pasted_data(self): paste_content = ["a", "b", "c"] self.perform_upload_of_composite_dataset_pasted_data("velvet", paste_content) self.history_panel_wait_for_hid_ok(1) history_count = len(self.history_contents()) assert history_count == 1, "Incorrect number of items in history - expected 1, found %d" % history_count self.history_panel_click_item_title(hid=1, wait=True) self.history_panel_item_view_dataset_details(1) param_values = self.driver.find_elements(self.by.CSS_SELECTOR, "#tool-parameters td.tool-parameter-value") request_json = param_values[1].text for data in paste_content: assert f'"paste_content": "{data}"' in request_json
[docs] @selenium_test def test_upload_simplest(self): self.perform_upload(self.get_filename("1.sam")) self.history_panel_wait_for_hid_ok(1) history_contents = self.history_contents() history_count = len(history_contents) assert history_count == 1, "Incorrect number of items in history - expected 1, found %d" % history_count hda = history_contents[0] assert hda["name"] == "1.sam", hda assert hda["extension"] == "sam", hda self.history_panel_click_item_title(hid=1, wait=True) self.assert_item_dbkey_displayed_as(1, "?")
[docs] @selenium_test def test_upload_specify_ext(self): self.perform_upload(self.get_filename("1.sam"), ext="txt") self.history_panel_wait_for_hid_ok(1) history_contents = self.history_contents() hda = history_contents[0] assert hda["name"] == "1.sam" assert hda["extension"] == "txt", hda
[docs] @selenium_test def test_upload_specify_genome(self): self.perform_upload(self.get_filename("1.sam"), genome="hg18") self.history_panel_wait_for_hid_ok(1) self.history_panel_click_item_title(hid=1, wait=True) self.assert_item_dbkey_displayed_as(1, "hg18")
[docs] @selenium_test def test_upload_specify_ext_all(self): self.perform_upload(self.get_filename("1.sam"), ext_all="txt") self.history_panel_wait_for_hid_ok(1) history_contents = self.history_contents() hda = history_contents[0] assert hda["name"] == "1.sam" assert hda["extension"] == "txt", hda
[docs] @selenium_test def test_upload_specify_genome_all(self): self.perform_upload(self.get_filename("1.sam"), genome_all="hg18") self.history_panel_wait_for_hid_ok(1) self.history_panel_click_item_title(hid=1, wait=True) self.assert_item_dbkey_displayed_as(1, "hg18")
[docs] @selenium_test def test_upload_deferred(self): self.perform_upload_of_pasted_content( "https://raw.githubusercontent.com/galaxyproject/galaxy/dev/test-data/1.bed", deferred=True ) hid = 1 self.history_panel_wait_for_hid_deferred(hid) self.history_panel_click_item_title(hid=hid, wait=True) self.screenshot("history_panel_dataset_deferred")
[docs] @selenium_test def test_upload_list(self): self.upload_list([self.get_filename("1.tabular")], name="Test List") self.history_panel_wait_for_hid_ok(3) # Make sure modals disappeared - both List creator (TODO: upload). self.wait_for_selector_absent_or_hidden(".collection-creator") self.assert_item_name(3, "Test List") # Make sure source item is hidden when the collection is created. self.history_panel_wait_for_hid_hidden(1)
[docs] @selenium_test def test_upload_pair(self): self.upload_list([self.get_filename("1.tabular"), self.get_filename("2.tabular")], name="Test Pair") self.history_panel_wait_for_hid_ok(5) # Make sure modals disappeared - both collection creator (TODO: upload). self.wait_for_selector_absent_or_hidden(".collection-creator") self.assert_item_name(5, "Test Pair") # Make sure source items are hidden when the collection is created. self.history_panel_wait_for_hid_hidden(1) self.history_panel_wait_for_hid_hidden(2) self.history_panel_wait_for_hid_hidden(3) self.history_panel_wait_for_hid_hidden(4)
[docs] @selenium_test def test_upload_pair_specify_extension(self): self.upload_list( [self.get_filename("1.tabular"), self.get_filename("2.tabular")], name="Test Pair", ext="txt", hide_source_items=False, ) self.history_panel_wait_for_hid_ok(5) self.history_panel_wait_for_hid_ok(1) history_contents = self.history_contents() hda = history_contents[0] assert hda["name"] == "1.tabular" assert hda["extension"] == "txt", hda
[docs] @selenium_test def test_upload_paired_list(self): self.upload_paired_list( [self.get_filename("1.tabular"), self.get_filename("2.tabular")], name="Test Paired List" ) self.history_panel_wait_for_hid_ok(5) # Make sure modals disappeared - both collection creator (TODO: upload). self.wait_for_selector_absent_or_hidden(".collection-creator") self.assert_item_name(5, "Test Paired List") # Make sure source items are hidden when the collection is created. self.history_panel_wait_for_hid_hidden(1) self.history_panel_wait_for_hid_hidden(2) self.history_panel_wait_for_hid_hidden(3) self.history_panel_wait_for_hid_hidden(4)
[docs] @selenium_test def test_upload_modal_retains_content(self): self.home() # initialize 2 uploads and close modal self.upload_start_click() self.upload_queue_local_file(self.get_filename("1.sam")) self.upload_paste_data("some pasted data") self.wait_for_and_click_selector("button#btn-close") # reopen modal and check that the files are still there self.upload_start_click() self.wait_for_selector_visible("#upload-row-0.upload-init") self.wait_for_selector_visible("#upload-row-1.upload-init") # perform upload and close modal self.upload_start() self.wait_for_and_click_selector("button#btn-close") # add another pasted file, but don't upload it self.upload_start_click() self.upload_paste_data("some more pasted data") self.wait_for_and_click_selector("button#btn-close") # reopen modal and see 2 uploaded, 1 yet to upload self.upload_start_click() self.wait_for_selector_visible("#upload-row-0.upload-success") self.wait_for_selector_visible("#upload-row-1.upload-success") self.wait_for_selector_visible("#upload-row-2.upload-init")
[docs] @selenium_test @pytest.mark.gtn_screenshot @pytest.mark.local def test_rules_example_1_datasets(self): # Test case generated for: # https://www.ebi.ac.uk/ena/data/view/PRJDA60709 self.home() self.upload_rule_start() self.sleep_for(self.wait_types.UX_RENDER) self.screenshot("rules_example_1_1_rules_landing") self.components.upload.rule_source_content.wait_for_and_send_keys( """study_accession sample_accession experiment_accession fastq_ftp PRJDA60709 SAMD00016379 DRX000475 ftp.sra.ebi.ac.uk/vol1/fastq/DRR000/DRR000770/DRR000770.fastq.gz PRJDA60709 SAMD00016383 DRX000476 ftp.sra.ebi.ac.uk/vol1/fastq/DRR000/DRR000771/DRR000771.fastq.gz PRJDA60709 SAMD00016380 DRX000477 ftp.sra.ebi.ac.uk/vol1/fastq/DRR000/DRR000772/DRR000772.fastq.gz PRJDA60709 SAMD00016378 DRX000478 ftp.sra.ebi.ac.uk/vol1/fastq/DRR000/DRR000773/DRR000773.fastq.gz PRJDA60709 SAMD00016381 DRX000479 ftp.sra.ebi.ac.uk/vol1/fastq/DRR000/DRR000774/DRR000774.fastq.gz PRJDA60709 SAMD00016382 DRX000480 ftp.sra.ebi.ac.uk/vol1/fastq/DRR000/DRR000775/DRR000775.fastq.gz""" ) self._wait_for_upload_modal() self.screenshot("rules_example_1_2_paste") self.upload_rule_build() rule_builder = self.components.rule_builder rule_builder._.wait_for_and_click() self.screenshot("rules_example_1_3_initial_rules") rule_builder.menu_button_filter.wait_for_and_click() self.screenshot("rule_builder_filters") rule_builder.menu_item_rule_type(rule_type="add-filter-count").wait_for_and_click() filter_editor = rule_builder.rule_editor(rule_type="add-filter-count") filter_editor_element = filter_editor.wait_for_visible() filter_input = filter_editor_element.find_element(self.by.CSS_SELECTOR, "input[type='number']") filter_input.clear() filter_input.send_keys("1") self.screenshot("rules_example_1_4_filter_header") rule_builder.rule_editor_ok.wait_for_and_click() self.rule_builder_set_mapping("url", "D") self.rule_builder_set_mapping("name", "C", screenshot_name="rules_example_1_5_mapping_edit") self.screenshot("rules_example_1_6_mapping_set") self.rule_builder_set_extension("fastqsanger.gz") self.screenshot("rules_example_1_7_extension_set")
# rule_builder.main_button_ok.wait_for_and_click() # self.history_panel_wait_for_hid_ok(6) # self.screenshot("rules_example_1_6_download_complete")
[docs] @selenium_test @pytest.mark.gtn_screenshot @pytest.mark.local def test_rules_example_2_list(self): self.perform_upload(self.get_filename("rules/PRJDA60709.tsv")) self.history_panel_wait_for_hid_ok(1) self.upload_rule_start() self.upload_rule_set_data_type("Collections") self.upload_rule_dataset_dialog() self.upload_rule_set_dataset(1) self.screenshot("rules_example_2_1_inputs") self.upload_rule_build() rule_builder = self.components.rule_builder rule_builder._.wait_for_and_click() self.screenshot("rules_example_2_2_initial_rules") # Filter header. self.rule_builder_filter_count(1) self.rule_builder_set_mapping("url", "D") self.rule_builder_set_mapping("list-identifiers", "C") self.rule_builder_set_extension("fastqsanger.gz") self.screenshot("rules_example_2_3_rules") self.rule_builder_set_collection_name("PRJDA60709") self.screenshot("rules_example_2_4_name")
# rule_builder.main_buton_ok.wait_for_and_click() # self.history_panel_wait_for_hid_ok(2) # self.screenshot("rules_example_2_5_download_complete")
[docs] @selenium_test @pytest.mark.gtn_screenshot @pytest.mark.local def test_rules_example_3_list_pairs(self): self.perform_upload(self.get_filename("rules/PRJDB3920.tsv")) self.history_panel_wait_for_hid_ok(1) self.upload_rule_start() self.upload_rule_set_data_type("Collections") self.upload_rule_dataset_dialog() self.upload_rule_set_dataset(1) self._wait_for_upload_modal() self.screenshot("rules_example_3_1_inputs") self.upload_rule_build() rule_builder = self.components.rule_builder rule_builder._.wait_for_and_click() self.screenshot("rules_example_3_2_initial_rules") # Filter header. self.rule_builder_filter_count(1) self.rule_builder_set_mapping("list-identifiers", "C") self.rule_builder_set_extension("fastqsanger.gz") self.screenshot("rules_example_3_3_old_rules") self.rule_builder_add_regex_groups("D", 2, r"(.*);(.*)", screenshot_name="rules_example_3_4_regex") self.screenshot("rules_example_3_6_with_regexes") # Remove A also? self.rule_builder_remove_columns(["D"], screenshot_name="rules_example_3_7_removed_column") self.rule_builder_split_columns(["D"], ["E"], screenshot_name="rules_example_3_8_split_columns") self.screenshot("rules_example_3_9_columns_are_split") self.rule_builder_add_regex_groups( "D", 1, r".*_(\d).fastq.gz", screenshot_name="rules_example_3_10_regex_paired" ) self.screenshot("rules_example_3_11_has_paired_id") self.rule_builder_swap_columns("D", "E", screenshot_name="rules_example_3_12_swap_columns") self.screenshot("rules_example_3_13_swapped_columns") self.rule_builder_set_mapping("paired-identifier", "D") self.rule_builder_set_mapping("url", "E") self.rule_builder_set_collection_name("PRJDB3920") self.screenshot("rules_example_3_14_paired_identifier_set")
[docs] @selenium_test @pytest.mark.gtn_screenshot @pytest.mark.local def test_rules_example_4_accessions(self): # http://www.uniprot.org/uniprot/?query=proteome:UP000052092+AND+proteomecomponent:%22Genome%22 self._setup_uniprot_example() self._wait_for_upload_modal() self.screenshot("rules_example_4_1_inputs") self.upload_rule_build() rule_builder = self.components.rule_builder rule_builder._.wait_for_and_click() self.screenshot("rules_example_4_2_initial_rules") self.rule_builder_filter_count(1) self.rule_builder_remove_columns(["B", "C", "E", "F", "G"]) self.rule_builder_set_mapping("info", "B") self.screenshot("rules_example_4_3_basic_rules") self.rule_builder_sort("A", screenshot_name="rules_example_4_4_sort") self.rule_builder_add_regex_replacement( "A", ".*", "http://www.uniprot.org/uniprot/\\0.fasta", screenshot_name="rules_example_4_5_url" ) self.screenshot("rules_example_4_6_url_built") self.rule_builder_set_mapping("list-identifiers", "A") self.rule_builder_set_mapping("url", "C") self.rule_builder_set_extension("fasta") self.rule_builder_set_collection_name("UP000052092") self.screenshot("rules_example_4_7_mapping_extension_and_name") rule_builder.view_source.wait_for_and_click() text_area_elem = rule_builder.source.wait_for_visible() self.screenshot("rules_example_4_8_source") self.write_screenshot_directory_file("rules_example_4_8_text", text_area_elem.get_attribute("value")) rule_builder.main_button_ok.wait_for_and_click() rule_builder.view_source.wait_for_visible()
[docs] @selenium_test @pytest.mark.gtn_screenshot @pytest.mark.local def test_rules_example_5_matching_collections(self): self._setup_uniprot_example() self._wait_for_upload_modal() self.screenshot("rules_example_5_1_inputs") self.upload_rule_build() rule_builder = self.components.rule_builder rule_builder.view_source.wait_for_and_click() content = self._read_rules_test_data_file("uniprot.json") self.rule_builder_enter_source_text(content) self.screenshot("rules_example_5_2_source") rule_builder.main_button_ok.wait_for_and_click() rule_builder.view_source.wait_for_visible() self.screenshot("rules_example_5_3_initial_rules") self.rule_builder_add_value("fasta", screenshot_name="rules_example_5_4_fasta") self.rule_builder_add_value("UP000052092 FASTA") self.rule_builder_add_regex_replacement( "A", ".*", "http://www.uniprot.org/uniprot/\\0.gff", screenshot_name="rules_example_5_5_url" ) self.rule_builder_add_value("gff3") self.rule_builder_add_value("UP000052092 GFF3") self._scroll_to_end_of_table() self.screenshot("rules_example_5_6_presplit") self.rule_builder_split_columns( ["C", "D", "E"], ["F", "G", "H"], screenshot_name="rules_example_5_7_split_columns" ) self.screenshot("rules_example_5_8_split") self.rule_builder_set_mapping("file-type", "D") self.rule_builder_set_mapping("collection-name", "E") self.screenshot("rules_example_5_9_mapping")
[docs] @selenium_test @pytest.mark.gtn_screenshot @pytest.mark.local def test_rules_example_6_nested_lists(self): self.home() self.perform_upload(self.get_filename("rules/PRJNA355367.tsv")) self.history_panel_wait_for_hid_ok(1) self.upload_rule_start() self.upload_rule_set_data_type("Collections") self.upload_rule_dataset_dialog() self.upload_rule_set_dataset(1) self._wait_for_upload_modal() self.screenshot("rules_example_6_1_paste") self.upload_rule_build() rule_builder = self.components.rule_builder rule_builder._.wait_for_and_click() self.screenshot("rules_example_6_2_rules_landing") self.rule_builder_filter_count(1) self.rule_builder_set_mapping("url", "J") self.rule_builder_set_extension("sra") self._scroll_to_end_of_table() self.screenshot("rules_example_6_3_end_of_table") self.rule_builder_add_regex_groups("L", 1, r"([^\d]+)\d+", screenshot_name="rules_example_6_4_regex") self.rule_builder_set_mapping( "list-identifiers", ["M", "A"], screenshot_name="rules_example_6_5_multiple_identifiers_edit" ) self._scroll_to_end_of_table() self.screenshot("rules_example_6_6_multiple_identifiers") self.rule_builder_set_collection_name("PRJNA355367") self.screenshot("rules_example_6_7_named")
[docs] @selenium_test @pytest.mark.local def test_rules_deferred_datasets(self): # Test case generated for: # https://www.ebi.ac.uk/ena/data/view/PRJDA60709 self.home() self.upload_rule_start() self.sleep_for(self.wait_types.UX_RENDER) self.screenshot("rules_deferred_datasets_1_rules_landing") self.components.upload.rule_source_content.wait_for_and_send_keys( """study_accession sample_accession experiment_accession fastq_ftp PRJDA60709 SAMD00016379 DRX000475 ftp.sra.ebi.ac.uk/vol1/fastq/DRR000/DRR000770/DRR000770.fastq.gz PRJDA60709 SAMD00016383 DRX000476 ftp.sra.ebi.ac.uk/vol1/fastq/DRR000/DRR000771/DRR000771.fastq.gz PRJDA60709 SAMD00016380 DRX000477 ftp.sra.ebi.ac.uk/vol1/fastq/DRR000/DRR000772/DRR000772.fastq.gz PRJDA60709 SAMD00016378 DRX000478 ftp.sra.ebi.ac.uk/vol1/fastq/DRR000/DRR000773/DRR000773.fastq.gz PRJDA60709 SAMD00016381 DRX000479 ftp.sra.ebi.ac.uk/vol1/fastq/DRR000/DRR000774/DRR000774.fastq.gz PRJDA60709 SAMD00016382 DRX000480 ftp.sra.ebi.ac.uk/vol1/fastq/DRR000/DRR000775/DRR000775.fastq.gz""" ) self._wait_for_upload_modal() self.screenshot("rules_deferred_datasets_2_paste") self.upload_rule_build() rule_builder = self.components.rule_builder rule_builder._.wait_for_and_click() self.screenshot("rules_deferred_datasets_3_initial_rules") rule_builder.menu_button_filter.wait_for_and_click() self.screenshot("rule_builder_filters") rule_builder.menu_item_rule_type(rule_type="add-filter-count").wait_for_and_click() filter_editor = rule_builder.rule_editor(rule_type="add-filter-count") filter_editor_element = filter_editor.wait_for_visible() filter_input = filter_editor_element.find_element(self.by.CSS_SELECTOR, "input[type='number']") filter_input.clear() filter_input.send_keys("1") self.screenshot("rules_deferred_datasets_4_filter_header") rule_builder.rule_editor_ok.wait_for_and_click() self.rule_builder_set_mapping("url-deferred", "D") self.rule_builder_set_mapping("name", "C", screenshot_name="rules_deferred_datasets_5_mapping_edit") self.screenshot("rules_deferred_datasets_6_mapping_set") self.rule_builder_set_extension("fastqsanger.gz") self.screenshot("rules_deferred_datasets_7_extension_set") rule_builder.main_button_ok.wait_for_and_click() self.history_panel_wait_for_hid_deferred(6) self.screenshot("rules_deferred_datasets_8_download_complete")
[docs] @selenium_test @pytest.mark.local def test_rules_deferred_list(self): self.home() self.perform_upload(self.get_filename("rules/PRJNA355367.tsv")) self.history_panel_wait_for_hid_ok(1) self.upload_rule_start() self.upload_rule_set_data_type("Collections") self.upload_rule_dataset_dialog() self.upload_rule_set_dataset(1) self._wait_for_upload_modal() self.screenshot("rules_deferred_list_1_paste") self.upload_rule_build() rule_builder = self.components.rule_builder rule_builder._.wait_for_and_click() self.screenshot("rules_deferred_list_2_rules_landing") self.rule_builder_filter_count(1) self.rule_builder_set_mapping("url-deferred", "J") self.rule_builder_set_extension("sra") self._scroll_to_end_of_table() self.screenshot("rules_deferred_list_3_end_of_table") self.rule_builder_add_regex_groups("L", 1, r"([^\d]+)\d+", screenshot_name="rules_deferred_list_4_regex") self.rule_builder_set_mapping( "list-identifiers", ["M", "A"], screenshot_name="rules_deferred_list_5_multiple_identifiers_edit" ) self._scroll_to_end_of_table() self.screenshot("rules_deferred_list_6_multiple_identifiers") self.rule_builder_set_collection_name("PRJNA355367") self.screenshot("rules_deferred_list_7_named") rule_builder.main_button_ok.wait_for_and_click() hid = 2 self.history_panel_wait_for_hid_ok(hid) self.screenshot("rules_deferred_list_7_download_complete")
def _read_rules_test_data_file(self, name): with open(self.test_data_resolver.get_filename(os.path.join("rules", name))) as f: return f.read() def _wait_for_upload_modal(self): self.components.upload.build_button.wait_for_visible() self.components.upload.build_button.wait_for_clickable() def _scroll_to_end_of_table(self): rule_builder = self.components.rule_builder table_elem = rule_builder.table.wait_for_visible() first_cell = table_elem.find_elements(self.by.CSS_SELECTOR, "td")[0] action_chains = self.action_chains() action_chains.move_to_element(first_cell) action_chains.click(first_cell) for _ in range(15): action_chains.send_keys(self.keys.ARROW_RIGHT) action_chains.perform() def _setup_uniprot_example(self): self.perform_upload(self.get_filename("rules/uniprot.tsv")) self.history_panel_wait_for_hid_ok(1) self.upload_rule_start() self.upload_rule_set_data_type("Collections") self.upload_rule_dataset_dialog() self.upload_rule_set_dataset(1)
# @selenium_test # def test_rules_example_5_matching_collections(self): # self.rule_builder_add_value("Protein FASTA") # self.rule_builder_add_value("gff") # self.rule_builder_add_value("Protein GFF")