Implemented test run editor's bulk test case selection

This commit is contained in:
Takeshi Kimata
2024-04-21 13:10:28 +09:00
parent 3eb36b7ad3
commit 8f4ca3d882
2 changed files with 32 additions and 22 deletions

View File

@@ -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({

View File

@@ -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>