Delete test case
This commit is contained in:
@@ -54,10 +54,12 @@ const casesIndexRoute = require("./routes/cases/index")(sequelize);
|
|||||||
const casesShowRoute = require("./routes/cases/show")(sequelize);
|
const casesShowRoute = require("./routes/cases/show")(sequelize);
|
||||||
const casesNewRoute = require("./routes/cases/new")(sequelize);
|
const casesNewRoute = require("./routes/cases/new")(sequelize);
|
||||||
const casesEditRoute = require("./routes/cases/edit")(sequelize);
|
const casesEditRoute = require("./routes/cases/edit")(sequelize);
|
||||||
|
const casesDeleteRoute = require("./routes/cases/delete")(sequelize);
|
||||||
app.use("/cases", casesIndexRoute);
|
app.use("/cases", casesIndexRoute);
|
||||||
app.use("/cases", casesShowRoute);
|
app.use("/cases", casesShowRoute);
|
||||||
app.use("/cases", casesNewRoute);
|
app.use("/cases", casesNewRoute);
|
||||||
app.use("/cases", casesEditRoute);
|
app.use("/cases", casesEditRoute);
|
||||||
|
app.use("/cases", casesDeleteRoute);
|
||||||
|
|
||||||
// "/steps"
|
// "/steps"
|
||||||
const stepsNewRoute = require("./routes/steps/new")(sequelize);
|
const stepsNewRoute = require("./routes/steps/new")(sequelize);
|
||||||
|
|||||||
25
backend/routes/cases/delete.js
Normal file
25
backend/routes/cases/delete.js
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
const express = require("express");
|
||||||
|
const router = express.Router();
|
||||||
|
const defineCase = require("../../models/cases");
|
||||||
|
const { DataTypes } = require("sequelize");
|
||||||
|
|
||||||
|
module.exports = function (sequelize) {
|
||||||
|
const Case = defineCase(sequelize, DataTypes);
|
||||||
|
|
||||||
|
router.delete("/:caseId", async (req, res) => {
|
||||||
|
const caseId = req.params.caseId;
|
||||||
|
try {
|
||||||
|
const testcase = await Case.findByPk(caseId);
|
||||||
|
if (!testcase) {
|
||||||
|
return res.status(404).send("Case not found");
|
||||||
|
}
|
||||||
|
await testcase.destroy();
|
||||||
|
res.status(204).send();
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
res.status(500).send("Internal Server Error");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return router;
|
||||||
|
};
|
||||||
@@ -31,6 +31,27 @@ async function fetchCases(url) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function fetchDeleteCase(caseId: number) {
|
||||||
|
const fetchOptions = {
|
||||||
|
method: "DELETE",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const url = `${apiServer}/cases/${caseId}`;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await fetch(url, fetchOptions);
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error(`HTTP error! Status: ${response.status}`);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error deleting project:", error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export default function Page({
|
export default function Page({
|
||||||
params,
|
params,
|
||||||
}: {
|
}: {
|
||||||
@@ -52,9 +73,19 @@ export default function Page({
|
|||||||
fetchDataEffect();
|
fetchDataEffect();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
const handleDeleteCase = async (caseId: number) => {
|
||||||
|
await fetchDeleteCase(caseId);
|
||||||
|
const data = await fetchCases(url);
|
||||||
|
setCases(data);
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<TestCaseTable projectId={params.folderId} cases={cases}/>
|
<TestCaseTable
|
||||||
|
projectId={params.folderId}
|
||||||
|
cases={cases}
|
||||||
|
onDeleteCase={handleDeleteCase}
|
||||||
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,13 @@ type Case = {
|
|||||||
updatedAt: string;
|
updatedAt: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function TestCaseTable({ projectId, cases }) {
|
type Props = {
|
||||||
|
projectId: boolean;
|
||||||
|
cases: Case[];
|
||||||
|
onDeleteCase: (caseId: number) => void;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function TestCaseTable({ projectId, cases, onDeleteCase }: Props) {
|
||||||
const [selectedKeys, setSelectedKeys] = useState<Selection>(new Set([]));
|
const [selectedKeys, setSelectedKeys] = useState<Selection>(new Set([]));
|
||||||
const [sortDescriptor, setSortDescriptor] = useState<SortDescriptor>({
|
const [sortDescriptor, setSortDescriptor] = useState<SortDescriptor>({
|
||||||
column: "id",
|
column: "id",
|
||||||
@@ -94,8 +100,7 @@ export default function TestCaseTable({ projectId, cases }) {
|
|||||||
</Button>
|
</Button>
|
||||||
</DropdownTrigger>
|
</DropdownTrigger>
|
||||||
<DropdownMenu aria-label="test case actions">
|
<DropdownMenu aria-label="test case actions">
|
||||||
<DropdownItem>Edit test case</DropdownItem>
|
<DropdownItem className="text-danger" onClick={() => onDeleteCase(testCase.id)}>
|
||||||
<DropdownItem className="text-danger">
|
|
||||||
Delete test case
|
Delete test case
|
||||||
</DropdownItem>
|
</DropdownItem>
|
||||||
</DropdownMenu>
|
</DropdownMenu>
|
||||||
|
|||||||
Reference in New Issue
Block a user