Unverified Commit 4c7ab9f8 authored by mvdbeek's avatar mvdbeek
Browse files

Support directory uploads in workflow framework tests

parent 6d1d03e1
Loading
Loading
Loading
Loading
+47 −1
Original line number Diff line number Diff line
@@ -483,6 +483,45 @@ class BaseDatasetPopulator(BasePopulator):
            history_id, content=open(test_data_resolver.get_filename("1.bam"), "rb"), file_type="bam", wait=True
        )

    def new_directory_dataset(
        self, test_data_resolver: TestDataResolver, history_id: str, directory: str, format: str = "directory"
    ):
        directory_path = test_data_resolver.get_filename(directory)
        assert os.path.isdir(directory_path)

        tmp = tempfile.NamedTemporaryFile(delete=False)
        tf = tarfile.open(fileobj=tmp, mode="w:")
        tf.add(directory_path, ".")
        tf.close()

        with open(tmp.name, "rb") as tar_f:
            destination = {"type": "hdas"}
            targets = [
                {
                    "destination": destination,
                    "items": [
                        {
                            "src": "pasted",
                            "paste_content": "",
                            "ext": format,
                            "extra_files": {
                                "items_from": "archive",
                                "src": "files",
                                # Prevent Galaxy from checking for a single file in
                                # a directory and re-interpreting the archive
                                "fuzzy_root": False,
                            },
                        }
                    ],
                }
            ]
            payload = {"history_id": history_id, "targets": targets, "__files": {"files_0|file_data": tar_f}}
            fetch_response = self.fetch(payload)
        assert fetch_response.status_code == 200, fetch_response.content
        outputs = fetch_response.json()["outputs"]
        assert len(outputs) == 1
        return outputs[0]

    def fetch(
        self,
        payload: dict,
@@ -3273,8 +3312,9 @@ def load_data_dict(
) -> LoadDataDictResponseT:
    """Load a dictionary as inputs to a workflow (test data focused)."""

    def open_test_data(test_dict, mode="rb"):
    test_data_resolver = TestDataResolver()

    def open_test_data(test_dict, mode="rb"):
        filename = test_data_resolver.get_filename(test_dict.pop("value"))
        return open(filename, mode)

@@ -3356,6 +3396,12 @@ def load_data_dict(
                hda = dataset_populator.new_dataset(history_id, wait=True, **new_dataset_kwds)
                label_map[key] = dataset_populator.ds_entry(hda)
                has_uploads = True
            elif input_type == "Directory":
                hda = dataset_populator.new_directory_dataset(
                    test_data_resolver, history_id, directory=value["value"], format=value.get("file_type", "directory")
                )
                label_map[key] = dataset_populator.ds_entry(hda)
                has_uploads = True
            elif input_type == "raw":
                label_map[key] = value["value"]
                inputs[key] = value["value"]
+1 −3
Original line number Diff line number Diff line
@@ -93,9 +93,7 @@ class TestWorkflow(ApiTestCase):
        item_label = f"Output named {output_name}"

        def get_filename(name: str) -> str:
            return tempfile.NamedTemporaryFile(
                prefix=f"gx_workflow_framework_test_file_{output_name}", delete=False
            ).name
            return self.test_data_resolver.get_filename(name)

        def verify_dataset(dataset: dict, test_properties: OutputChecks):
            output_content = self.dataset_populator.get_history_dataset_content(