diff --git a/extensions/ql-vscode/src/view/method-modeling/__tests__/MultipleModeledMethodsPanel.spec.tsx b/extensions/ql-vscode/src/view/method-modeling/__tests__/MultipleModeledMethodsPanel.spec.tsx
index 44ab596c6..a5893df2a 100644
--- a/extensions/ql-vscode/src/view/method-modeling/__tests__/MultipleModeledMethodsPanel.spec.tsx
+++ b/extensions/ql-vscode/src/view/method-modeling/__tests__/MultipleModeledMethodsPanel.spec.tsx
@@ -10,31 +10,43 @@ import { MultipleModeledMethodsPanel } from "../MultipleModeledMethodsPanel";
import { userEvent } from "@testing-library/user-event";
import type { ModeledMethod } from "../../../model-editor/modeled-method";
import { QueryLanguage } from "../../../common/query-language";
+import type { ModelingStatus } from "../../../model-editor/shared/modeling-status";
describe(MultipleModeledMethodsPanel.name, () => {
- const render = (props: MultipleModeledMethodsPanelProps) =>
- reactRender();
-
const language = QueryLanguage.Java;
const method = createMethod();
const isModelingInProgress = false;
const isProcessedByAutoModel = false;
- const modelingStatus = "unmodeled";
+ const modelingStatus: ModelingStatus = "unmodeled";
const onChange = jest.fn();
+ const baseProps = {
+ language,
+ method,
+ modelingStatus,
+ isModelingInProgress,
+ isProcessedByAutoModel,
+ onChange,
+ };
+
+ const createRender =
+ (modeledMethods: ModeledMethod[]) =>
+ (props: Partial = {}) =>
+ reactRender(
+ ,
+ );
+
describe("with no modeled methods", () => {
const modeledMethods: ModeledMethod[] = [];
+ const render = createRender(modeledMethods);
+
it("renders the method modeling inputs once", () => {
- render({
- language,
- method,
- modeledMethods,
- modelingStatus,
- isModelingInProgress,
- isProcessedByAutoModel,
- onChange,
- });
+ render();
expect(screen.getAllByRole("combobox")).toHaveLength(4);
expect(
@@ -45,15 +57,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("disables all pagination", () => {
- render({
- language,
- method,
- modeledMethods,
- modelingStatus,
- isModelingInProgress,
- isProcessedByAutoModel,
- onChange,
- });
+ render();
expect(
screen
@@ -68,15 +72,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("cannot add or delete modeling", () => {
- render({
- language,
- method,
- modeledMethods,
- modelingStatus,
- isModelingInProgress,
- isProcessedByAutoModel,
- onChange,
- });
+ render();
expect(
screen
@@ -99,16 +95,10 @@ describe(MultipleModeledMethodsPanel.name, () => {
}),
];
+ const render = createRender(modeledMethods);
+
it("renders the method modeling inputs once", () => {
- render({
- language,
- method,
- modeledMethods,
- modelingStatus,
- isModelingInProgress,
- isProcessedByAutoModel,
- onChange,
- });
+ render();
expect(screen.getAllByRole("combobox")).toHaveLength(4);
expect(
@@ -119,15 +109,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("disables all pagination", () => {
- render({
- language,
- method,
- modeledMethods,
- modelingStatus,
- isModelingInProgress,
- isProcessedByAutoModel,
- onChange,
- });
+ render();
expect(
screen
@@ -141,15 +123,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("cannot delete modeling", () => {
- render({
- language,
- method,
- modeledMethods,
- modelingStatus,
- isModelingInProgress,
- isProcessedByAutoModel,
- onChange,
- });
+ render();
expect(
screen
@@ -159,15 +133,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("can add modeling", async () => {
- render({
- language,
- method,
- modeledMethods,
- modelingStatus,
- isModelingInProgress,
- isProcessedByAutoModel,
- onChange,
- });
+ render();
await userEvent.click(screen.getByLabelText("Add modeling"));
@@ -186,29 +152,16 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("changes selection to the newly added modeling", async () => {
- const { rerender } = render({
- language,
- method,
- modeledMethods,
- modelingStatus,
- isModelingInProgress,
- isProcessedByAutoModel,
- onChange,
- });
+ const { rerender } = render();
await userEvent.click(screen.getByLabelText("Add modeling"));
rerender(
,
);
@@ -226,16 +179,10 @@ describe(MultipleModeledMethodsPanel.name, () => {
}),
];
+ const render = createRender(modeledMethods);
+
it("renders the method modeling inputs once", () => {
- render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ render();
expect(screen.getAllByRole("combobox")).toHaveLength(4);
expect(
@@ -246,15 +193,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("renders the pagination", () => {
- render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ render();
expect(screen.getByLabelText("Previous modeling")).toBeInTheDocument();
expect(screen.getByLabelText("Next modeling")).toBeInTheDocument();
@@ -262,15 +201,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("disables the correct pagination", async () => {
- render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ render();
expect(
screen
@@ -283,15 +214,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("can use the pagination", async () => {
- render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ render();
await userEvent.click(screen.getByLabelText("Next modeling"));
@@ -321,27 +244,14 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("correctly updates selected pagination index when the number of models decreases", async () => {
- const { rerender } = render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ const { rerender } = render();
await userEvent.click(screen.getByLabelText("Next modeling"));
rerender(
,
);
@@ -354,29 +264,13 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("does not show errors", () => {
- render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ render();
expect(screen.queryByRole("alert")).not.toBeInTheDocument();
});
it("can update the first modeling", async () => {
- render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ render();
const modelTypeDropdown = screen.getByRole("combobox", {
name: "Model type",
@@ -402,15 +296,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("can update the second modeling", async () => {
- render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ render();
await userEvent.click(screen.getByLabelText("Next modeling"));
@@ -438,15 +324,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("can delete modeling", async () => {
- render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ render();
await userEvent.click(screen.getByLabelText("Delete modeling"));
@@ -457,15 +335,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("can add modeling", async () => {
- render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ render();
await userEvent.click(screen.getByLabelText("Add modeling"));
@@ -484,29 +354,16 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("shows an error when adding a neutral modeling", async () => {
- const { rerender } = render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ const { rerender } = render();
await userEvent.click(screen.getByLabelText("Add modeling"));
rerender(
,
);
@@ -520,15 +377,10 @@ describe(MultipleModeledMethodsPanel.name, () => {
rerender(
,
);
@@ -540,15 +392,10 @@ describe(MultipleModeledMethodsPanel.name, () => {
rerender(
,
);
@@ -559,15 +406,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("changes selection to the newly added modeling", async () => {
- const { rerender } = render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ const { rerender } = render();
expect(screen.getByText("1/2")).toBeInTheDocument();
@@ -575,15 +414,10 @@ describe(MultipleModeledMethodsPanel.name, () => {
rerender(
,
);
@@ -610,16 +444,10 @@ describe(MultipleModeledMethodsPanel.name, () => {
}),
];
+ const render = createRender(modeledMethods);
+
it("can use the pagination", async () => {
- render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ render();
expect(
screen
@@ -703,27 +531,14 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("preserves selection when a modeling other than the selected modeling is removed", async () => {
- const { rerender } = render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ const { rerender } = render();
expect(screen.getByText("1/3")).toBeInTheDocument();
rerender(
,
);
@@ -731,15 +546,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("reduces selection when the selected modeling is removed", async () => {
- const { rerender } = render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ const { rerender } = render();
await userEvent.click(screen.getByLabelText("Next modeling"));
await userEvent.click(screen.getByLabelText("Next modeling"));
@@ -747,13 +554,8 @@ describe(MultipleModeledMethodsPanel.name, () => {
rerender(
,
);
@@ -774,16 +576,10 @@ describe(MultipleModeledMethodsPanel.name, () => {
}),
];
+ const render = createRender(modeledMethods);
+
it("can add modeling", () => {
- render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ render();
expect(
screen.getByLabelText("Add modeling").getElementsByTagName("input")[0],
@@ -791,15 +587,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("can delete first modeling", async () => {
- render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ render();
await userEvent.click(screen.getByLabelText("Delete modeling"));
@@ -810,15 +598,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("can delete second modeling", async () => {
- render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ render();
await userEvent.click(screen.getByLabelText("Next modeling"));
await userEvent.click(screen.getByLabelText("Delete modeling"));
@@ -830,15 +610,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
});
it("can add modeling after deleting second modeling", async () => {
- const { rerender } = render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ const { rerender } = render();
await userEvent.click(screen.getByLabelText("Next modeling"));
await userEvent.click(screen.getByLabelText("Delete modeling"));
@@ -850,13 +622,8 @@ describe(MultipleModeledMethodsPanel.name, () => {
rerender(
,
);
@@ -888,30 +655,16 @@ describe(MultipleModeledMethodsPanel.name, () => {
}),
];
+ const render = createRender(modeledMethods);
+
it("shows errors", () => {
- render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ render();
expect(screen.getByRole("alert")).toBeInTheDocument();
});
it("shows the correct error message", async () => {
- render({
- language,
- method,
- modeledMethods,
- isModelingInProgress,
- isProcessedByAutoModel,
- modelingStatus,
- onChange,
- });
+ render();
expect(
screen.getByText("Error: Duplicated classification"),