+
-
-
-
-
-
-
- {{ "Create Dataset" | l }}
-
-
+
+
+
+
+
+
+ {{ localize("Save") }}
+
+
+
+
+ {{ localize("Auto-detect") }}
+
-
-
-
- {{ "Permissions" | l }}
-
-
-
-
- {{ "Save" | l }}
-
+
+
+
+
-
-
-
-
-
-
+
+
-
+
+
+
+ {{ localize("Save") }}
+
+
+
+
+
+
+
diff --git a/client/src/components/DatasetInformation/DatasetDetails.vue b/client/src/components/DatasetInformation/DatasetDetails.vue
index f9f2606669ed..667e33d2c802 100644
--- a/client/src/components/DatasetInformation/DatasetDetails.vue
+++ b/client/src/components/DatasetInformation/DatasetDetails.vue
@@ -1,112 +1,164 @@
-
-
-
-
Dataset Details
-
-
-
-
-
-
-
-
-
-
-
Job Not Found
-
- No job associated with this dataset is recorded in Galaxy. Galaxy cannot determine full
- dataset provenance and history for this dataset.
-
-
-
-
-
-
-
+
+
+
+
Dataset Details
+
+
+
+
+
+ {{ datasetLoadingError }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Job Not Found
+
+
+ No job associated with this dataset is recorded in Galaxy. Galaxy cannot determine full dataset
+ provenance and history for this dataset.
+
+
+
+
+
+
+
diff --git a/client/src/components/DatasetInformation/DatasetError.test.js b/client/src/components/DatasetInformation/DatasetError.test.js
deleted file mode 100644
index b46c8e625b0b..000000000000
--- a/client/src/components/DatasetInformation/DatasetError.test.js
+++ /dev/null
@@ -1,92 +0,0 @@
-import { mount } from "@vue/test-utils";
-import { createPinia } from "pinia";
-import { useUserStore } from "stores/userStore";
-import { getLocalVue } from "tests/jest/helpers";
-
-import MockProvider from "../providers/MockProvider";
-import DatasetError from "./DatasetError";
-
-jest.mock("components/providers", () => {
- return {}; // stubbed below
-});
-
-const localVue = getLocalVue();
-
-function buildWrapper(has_duplicate_inputs = true, has_empty_inputs = true, user_email = "") {
- const pinia = createPinia();
- const wrapper = mount(DatasetError, {
- propsData: {
- datasetId: "dataset_id",
- },
- localVue,
- stubs: {
- JobDetailsProvider: MockProvider({
- result: {
- tool_id: "tool_id",
- tool_stderr: "tool_stderr",
- job_stderr: "job_stderr",
- job_messages: [{ desc: "message_1" }, { desc: "message_2" }],
- user_email: user_email,
- },
- }),
- JobProblemProvider: MockProvider({
- result: { has_duplicate_inputs: has_duplicate_inputs, has_empty_inputs: has_empty_inputs },
- }),
- DatasetProvider: MockProvider({
- result: { id: "dataset_id", creating_job: "creating_job" },
- }),
- FontAwesomeIcon: false,
- FormElement: false,
- },
- pinia,
- });
-
- const userStore = useUserStore();
- userStore.currentUser = { email: user_email || "email" };
-
- return wrapper;
-}
-
-describe("DatasetError", () => {
- it("check props with common problems", async () => {
- const wrapper = buildWrapper();
- expect(wrapper.find("#dataset-error-tool-id").text()).toBe("tool_id");
- expect(wrapper.find("#dataset-error-tool-stderr").text()).toBe("tool_stderr");
- expect(wrapper.find("#dataset-error-job-stderr").text()).toBe("job_stderr");
- const messages = wrapper.findAll("#dataset-error-job-messages .code");
- expect(messages.at(0).text()).toBe("message_1");
- expect(messages.at(1).text()).toBe("message_2");
- expect(wrapper.find("#dataset-error-has-empty-inputs")).toBeDefined();
- expect(wrapper.find("#dataset-error-has-duplicate-inputs")).toBeDefined();
- });
-
- it("check props without common problems", async () => {
- const wrapper = buildWrapper(false, false, "user_email");
- expect(wrapper.find("#dataset-error-tool-id").text()).toBe("tool_id");
- expect(wrapper.find("#dataset-error-tool-stderr").text()).toBe("tool_stderr");
- expect(wrapper.find("#dataset-error-job-stderr").text()).toBe("job_stderr");
- expect(wrapper.findAll("#dataset-error-has-empty-inputs").length).toBe(0);
- expect(wrapper.findAll("#dataset-error-has-duplicate-inputs").length).toBe(0);
- expect(wrapper.findAll("#dataset-error-email").length).toBe(0);
- });
-
- it("hides form fields and button on success", async () => {
- const wrapper = buildWrapper();
- const fieldsAndButton = "#fieldsAndButton";
- expect(wrapper.find(fieldsAndButton).exists()).toBe(true);
- await wrapper.setData({ resultMessages: [["message", "success"]] });
- expect(wrapper.find(fieldsAndButton).exists()).toBe(false);
- });
-
- it("does not hide form fields and button on error", async () => {
- const wrapper = buildWrapper();
- const fieldsAndButton = "#fieldsAndButton";
- expect(wrapper.find(fieldsAndButton).exists()).toBe(true);
- const messages = [
- ["message", "success"],
- ["message", "danger"],
- ]; // at least one has "danger"
- await wrapper.setData({ resultMessages: messages });
- expect(wrapper.find(fieldsAndButton).exists()).toBe(true);
- });
-});
diff --git a/client/src/components/DatasetInformation/DatasetError.test.ts b/client/src/components/DatasetInformation/DatasetError.test.ts
new file mode 100644
index 000000000000..c3213e8dc6fc
--- /dev/null
+++ b/client/src/components/DatasetInformation/DatasetError.test.ts
@@ -0,0 +1,125 @@
+import { mount } from "@vue/test-utils";
+import flushPromises from "flush-promises";
+import { createPinia } from "pinia";
+import { getLocalVue } from "tests/jest/helpers";
+
+import { mockFetcher } from "@/api/schema/__mocks__";
+import { useUserStore } from "@/stores/userStore";
+
+import DatasetError from "./DatasetError.vue";
+
+const localVue = getLocalVue();
+
+const DATASET_ID = "dataset_id";
+
+async function montDatasetError(has_duplicate_inputs = true, has_empty_inputs = true, user_email = "") {
+ const pinia = createPinia();
+
+ mockFetcher
+ .path("/api/datasets/{dataset_id}")
+ .method("get")
+ .mock({
+ data: {
+ id: DATASET_ID,
+ creating_job: "creating_job",
+ },
+ });
+
+ mockFetcher
+ .path("/api/jobs/{job_id}")
+ .method("get")
+ .mock({
+ data: {
+ tool_id: "tool_id",
+ tool_stderr: "tool_stderr",
+ job_stderr: "job_stderr",
+ job_messages: [{ desc: "message_1" }, { desc: "message_2" }],
+ user_email: user_email,
+ },
+ });
+
+ mockFetcher
+ .path("/api/jobs/{job_id}/common_problems")
+ .method("get")
+ .mock({
+ data: {
+ has_duplicate_inputs: has_duplicate_inputs,
+ has_empty_inputs: has_empty_inputs,
+ },
+ });
+
+ const wrapper = mount(DatasetError as object, {
+ propsData: {
+ datasetId: DATASET_ID,
+ },
+ localVue,
+ pinia,
+ });
+
+ const userStore = useUserStore();
+ userStore.currentUser = {
+ email: user_email || "email",
+ id: "user_id",
+ tags_used: [],
+ isAnonymous: false,
+ total_disk_usage: 0,
+ };
+
+ await flushPromises();
+
+ return wrapper;
+}
+
+describe("DatasetError", () => {
+ it("check props with common problems", async () => {
+ const wrapper = await montDatasetError();
+
+ expect(wrapper.find("#dataset-error-tool-id").text()).toBe("tool_id");
+ expect(wrapper.find("#dataset-error-tool-stderr").text()).toBe("tool_stderr");
+ expect(wrapper.find("#dataset-error-job-stderr").text()).toBe("job_stderr");
+
+ const messages = wrapper.findAll("#dataset-error-job-messages .code");
+ expect(messages.at(0).text()).toBe("message_1");
+ expect(messages.at(1).text()).toBe("message_2");
+
+ expect(wrapper.find("#dataset-error-has-empty-inputs")).toBeDefined();
+ expect(wrapper.find("#dataset-error-has-duplicate-inputs")).toBeDefined();
+ });
+
+ it("check props without common problems", async () => {
+ const wrapper = await montDatasetError(false, false, "user_email");
+
+ expect(wrapper.find("#dataset-error-tool-id").text()).toBe("tool_id");
+ expect(wrapper.find("#dataset-error-tool-stderr").text()).toBe("tool_stderr");
+ expect(wrapper.find("#dataset-error-job-stderr").text()).toBe("job_stderr");
+
+ expect(wrapper.findAll("#dataset-error-has-empty-inputs").length).toBe(0);
+ expect(wrapper.findAll("#dataset-error-has-duplicate-inputs").length).toBe(0);
+ expect(wrapper.findAll("#dataset-error-email").length).toBe(0);
+ });
+
+ it("hides form fields and button on success", async () => {
+ const wrapper = await montDatasetError();
+
+ mockFetcher
+ .path("/api/jobs/{job_id}/error")
+ .method("post")
+ .mock({
+ data: {
+ messages: ["message", "success"],
+ },
+ });
+
+ const FormAndSubmitButton = "#dataset-error-form";
+ expect(wrapper.find(FormAndSubmitButton).exists()).toBe(true);
+
+ const submitButton = "#dataset-error-submit";
+ expect(wrapper.find(submitButton).exists()).toBe(true);
+
+ await wrapper.find(submitButton).trigger("click");
+
+ await flushPromises();
+
+ expect(wrapper.find(FormAndSubmitButton).exists()).toBe(false);
+ });
+});
diff --git a/client/src/components/DatasetInformation/DatasetError.vue b/client/src/components/DatasetInformation/DatasetError.vue
index 0deb037e7b1b..0c86dada34d9 100644
--- a/client/src/components/DatasetInformation/DatasetError.vue
+++ b/client/src/components/DatasetInformation/DatasetError.vue
@@ -1,157 +1,202 @@
-
-
-
- Failed to access Dataset details.
- {{ errorMessage }}
-
-
-
-
-
-
Dataset Error Report
-
- An error occurred while running the tool
- {{ jobDetails.tool_id }}.
-
-
-
-
-
Detected Common Potential Problems
-
- The tool was started with one or more empty input datasets. This frequently results in
- tool errors due to problematic input choices.
-
-
- The tool was started with one or more duplicate input datasets. This frequently results
- in tool errors due to problematic input choices.
-
-
-
-
Troubleshooting
-
- There are a number of helpful resources to self diagnose and correct problems.
-
- Start here:
-
-
- My job ended with an error. What can I do?
-
-
-
-
Issue Report
-
-
-
-
- {{ emailTitle }}
- {{ currentUser?.email }}
- {{ "You must be logged in to receive emails" | l }}
-
-
- Report
-
-
-
-
-
-
-
-
-
+
+
+
+
+ Failed to access Dataset details.
+ {{ errorMessage }}
+
+
+
+
+
+
Dataset Error Report
+
+
+ An error occurred while running the tool
+ {{ jobDetails.tool_id }}.
+
+
+
+
+
+
Detected Common Potential Problems
+
+
+ The tool was started with one or more empty input datasets. This frequently results in tool errors
+ due to problematic input choices.
+
+
+
+ The tool was started with one or more duplicate input datasets. This frequently results in tool
+ errors due to problematic input choices.
+
+
+
+
Troubleshooting
+
+
+ There are a number of helpful resources to self diagnose and correct problems.
+
+ Start here:
+
+
+ My job ended with an error. What can I do?
+
+
+
+
+
Issue Report
+
+
+
+
+
+
+ {{ localize("Your email address") }}
+ {{ currentUser.email }}
+ {{ localize("You must be logged in to receive emails") }}
+
+
+
+
+
+ Report
+
+
+
+
+
diff --git a/client/src/components/DatasetInformation/DatasetErrorDetails.vue b/client/src/components/DatasetInformation/DatasetErrorDetails.vue
index 8707f6b78d11..729c63ccd9c5 100644
--- a/client/src/components/DatasetInformation/DatasetErrorDetails.vue
+++ b/client/src/components/DatasetInformation/DatasetErrorDetails.vue
@@ -1,46 +1,52 @@
+
+
Details
+
Execution resulted in the following messages:
+
-
{{ jobMessage["desc"] }}
+
+ {{ jobMessage["desc"] }}
+
+
Tool generated the following standard error:
-
{{ toolStderr }}
+
+
+ {{ toolStderr }}
+
+
Galaxy job runner generated the following standard error:
-
{{ jobStderr }}
+
+
+ {{ jobStderr }}
+
-
-
diff --git a/client/src/components/DatasetInformation/DatasetHash.vue b/client/src/components/DatasetInformation/DatasetHash.vue
index cff960b49b0a..ee5e3f41aa60 100644
--- a/client/src/components/DatasetInformation/DatasetHash.vue
+++ b/client/src/components/DatasetInformation/DatasetHash.vue
@@ -1,16 +1,15 @@
+
+
{{ hash.hash_value }}
-
-
diff --git a/client/src/components/DatasetInformation/DatasetHashes.vue b/client/src/components/DatasetInformation/DatasetHashes.vue
index be4420236909..fe115a623de8 100644
--- a/client/src/components/DatasetInformation/DatasetHashes.vue
+++ b/client/src/components/DatasetInformation/DatasetHashes.vue
@@ -1,3 +1,15 @@
+
+
-
-
-