From b546f6eaa7fc1bfd8d07b8e1f7b52c74dddbea51 Mon Sep 17 00:00:00 2001 From: Takeshi Kimata <117462761+kimatata@users.noreply.github.com> Date: Fri, 22 Mar 2024 20:45:23 +0900 Subject: [PATCH] Delete test case --- backend/index.js | 2 ++ backend/routes/cases/delete.js | 25 ++++++++++++++ .../folders/[folderId]/cases/page.tsx | 33 ++++++++++++++++++- .../[folderId]/cases/test-case-table.tsx | 11 +++++-- 4 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 backend/routes/cases/delete.js diff --git a/backend/index.js b/backend/index.js index 173855f..e73d42a 100644 --- a/backend/index.js +++ b/backend/index.js @@ -54,10 +54,12 @@ const casesIndexRoute = require("./routes/cases/index")(sequelize); const casesShowRoute = require("./routes/cases/show")(sequelize); const casesNewRoute = require("./routes/cases/new")(sequelize); const casesEditRoute = require("./routes/cases/edit")(sequelize); +const casesDeleteRoute = require("./routes/cases/delete")(sequelize); app.use("/cases", casesIndexRoute); app.use("/cases", casesShowRoute); app.use("/cases", casesNewRoute); app.use("/cases", casesEditRoute); +app.use("/cases", casesDeleteRoute); // "/steps" const stepsNewRoute = require("./routes/steps/new")(sequelize); diff --git a/backend/routes/cases/delete.js b/backend/routes/cases/delete.js new file mode 100644 index 0000000..cce715f --- /dev/null +++ b/backend/routes/cases/delete.js @@ -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; +}; diff --git a/frontend/app/projects/[projectId]/folders/[folderId]/cases/page.tsx b/frontend/app/projects/[projectId]/folders/[folderId]/cases/page.tsx index 86cf0d7..dbe23b4 100644 --- a/frontend/app/projects/[projectId]/folders/[folderId]/cases/page.tsx +++ b/frontend/app/projects/[projectId]/folders/[folderId]/cases/page.tsx @@ -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({ params, }: { @@ -52,9 +73,19 @@ export default function Page({ fetchDataEffect(); }, []); + const handleDeleteCase = async (caseId: number) => { + await fetchDeleteCase(caseId); + const data = await fetchCases(url); + setCases(data); + }; + return ( <> - + ); } diff --git a/frontend/app/projects/[projectId]/folders/[folderId]/cases/test-case-table.tsx b/frontend/app/projects/[projectId]/folders/[folderId]/cases/test-case-table.tsx index 5d10c3f..b36c7ab 100644 --- a/frontend/app/projects/[projectId]/folders/[folderId]/cases/test-case-table.tsx +++ b/frontend/app/projects/[projectId]/folders/[folderId]/cases/test-case-table.tsx @@ -43,7 +43,13 @@ type Case = { 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(new Set([])); const [sortDescriptor, setSortDescriptor] = useState({ column: "id", @@ -94,8 +100,7 @@ export default function TestCaseTable({ projectId, cases }) { - Edit test case - + onDeleteCase(testCase.id)}> Delete test case