Delete test case

This commit is contained in:
Takeshi Kimata
2024-03-22 20:45:23 +09:00
parent 742e0ac1f7
commit b546f6eaa7
4 changed files with 67 additions and 4 deletions

View File

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

View 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;
};

View File

@@ -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}
/>
</> </>
); );
} }

View File

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