Implemented test run editor's bulk test case selection
This commit is contained in:
@@ -20,7 +20,7 @@ module.exports = function (sequelize) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (existingRunCases.length === 0) {
|
if (existingRunCases.length === 0) {
|
||||||
return res.status(400).send("No records found to delete");
|
return res.status(200).send("No records found to delete");
|
||||||
}
|
}
|
||||||
|
|
||||||
await RunCase.destroy({
|
await RunCase.destroy({
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ import {
|
|||||||
createRunCase,
|
createRunCase,
|
||||||
bulkCreateRunCases,
|
bulkCreateRunCases,
|
||||||
deleteRunCase,
|
deleteRunCase,
|
||||||
bulkDeleteRunCases
|
bulkDeleteRunCases,
|
||||||
} from "../runsControl";
|
} from "../runsControl";
|
||||||
import { fetchFolders } from "../../folders/foldersControl";
|
import { fetchFolders } from "../../folders/foldersControl";
|
||||||
import { fetchCases } from "../../folders/[folderId]/cases/caseControl";
|
import { fetchCases } from "../../folders/[folderId]/cases/caseControl";
|
||||||
@@ -121,11 +121,18 @@ export default function RunEditor({ projectId, runId }: Props) {
|
|||||||
isInclude: boolean,
|
isInclude: boolean,
|
||||||
clickedTestCaseId: number
|
clickedTestCaseId: number
|
||||||
) => {
|
) => {
|
||||||
let createdRunCase: RunCaseType;
|
|
||||||
if (isInclude) {
|
if (isInclude) {
|
||||||
createdRunCase = await createRunCase(runId, clickedTestCaseId);
|
const createdRunCase = await createRunCase(runId, clickedTestCaseId);
|
||||||
|
setRunCases((prevRunCases) => {
|
||||||
|
return [...prevRunCases, createdRunCase];
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
await deleteRunCase(runId, clickedTestCaseId);
|
await deleteRunCase(runId, clickedTestCaseId);
|
||||||
|
setRunCases((prevRunCases) => {
|
||||||
|
return prevRunCases.filter(
|
||||||
|
(runCase) => runCase.caseId !== clickedTestCaseId
|
||||||
|
);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
setTestCases((prevTestCases) => {
|
setTestCases((prevTestCases) => {
|
||||||
@@ -136,27 +143,16 @@ export default function RunEditor({ projectId, runId }: Props) {
|
|||||||
return testCase;
|
return testCase;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
if (isInclude) {
|
|
||||||
setRunCases((prevRunCases) => {
|
|
||||||
return [...prevRunCases, createdRunCase];
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
setRunCases((prevRunCases) => {
|
|
||||||
return prevRunCases.filter(
|
|
||||||
(runCase) => runCase.caseId !== clickedTestCaseId
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const onIncludeExcludeClick = async (isInclude: boolean) => {
|
const handleBulkIncludeExcludeCases = async (isInclude: boolean) => {
|
||||||
let keys = [];
|
let keys: number[] = [];
|
||||||
if (selectedKeys === "all") {
|
if (selectedKeys === "all") {
|
||||||
keys = testcases.map((item) => item.id);
|
keys = testcases.map((item) => item.id);
|
||||||
} else {
|
} else {
|
||||||
keys = testcases
|
keys = Array.from(selectedKeys).map(Number);
|
||||||
}
|
}
|
||||||
|
console.log(keys)
|
||||||
|
|
||||||
const runCaseInfo: RunCaseInfoType[] = keys.map((caseId) => ({
|
const runCaseInfo: RunCaseInfoType[] = keys.map((caseId) => ({
|
||||||
runId: runId,
|
runId: runId,
|
||||||
@@ -164,11 +160,25 @@ export default function RunEditor({ projectId, runId }: Props) {
|
|||||||
}));
|
}));
|
||||||
if (isInclude) {
|
if (isInclude) {
|
||||||
const createdRunCases = await bulkCreateRunCases(runCaseInfo);
|
const createdRunCases = await bulkCreateRunCases(runCaseInfo);
|
||||||
console.log(createdRunCases)
|
setRunCases((prevRunCases) => [...prevRunCases, ...createdRunCases]);
|
||||||
} else {
|
} else {
|
||||||
await bulkDeleteRunCases(runCaseInfo);
|
await bulkDeleteRunCases(runCaseInfo);
|
||||||
|
setRunCases((prevRunCases) => {
|
||||||
|
return prevRunCases.filter((runCase) => {
|
||||||
|
return !runCaseInfo.some((info) => info.caseId === runCase.caseId);
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setTestCases((prevTestCases) => {
|
||||||
|
return prevTestCases.map((testCase) => {
|
||||||
|
const isCaseIncluded = isInclude
|
||||||
|
? keys.includes(testCase.id)
|
||||||
|
: !keys.includes(testCase.id);
|
||||||
|
return { ...testCase, isIncluded: isCaseIncluded };
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
setSelectedKeys(new Set([]));
|
setSelectedKeys(new Set([]));
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -275,13 +285,13 @@ export default function RunEditor({ projectId, runId }: Props) {
|
|||||||
<DropdownMenu aria-label="test case select actions">
|
<DropdownMenu aria-label="test case select actions">
|
||||||
<DropdownItem
|
<DropdownItem
|
||||||
startContent={<CopyPlus size={16} />}
|
startContent={<CopyPlus size={16} />}
|
||||||
onClick={() => onIncludeExcludeClick(true)}
|
onClick={() => handleBulkIncludeExcludeCases(true)}
|
||||||
>
|
>
|
||||||
Include selected cases in run
|
Include selected cases in run
|
||||||
</DropdownItem>
|
</DropdownItem>
|
||||||
<DropdownItem
|
<DropdownItem
|
||||||
startContent={<CopyMinus size={16} />}
|
startContent={<CopyMinus size={16} />}
|
||||||
onClick={() => onIncludeExcludeClick(false)}
|
onClick={() => handleBulkIncludeExcludeCases(false)}
|
||||||
>
|
>
|
||||||
Exclude selected cases from run
|
Exclude selected cases from run
|
||||||
</DropdownItem>
|
</DropdownItem>
|
||||||
|
|||||||
Reference in New Issue
Block a user