diff --git a/backend/routes/cases/indexByProjectId.js b/backend/routes/cases/indexByProjectId.js index 4bc883c..c630441 100644 --- a/backend/routes/cases/indexByProjectId.js +++ b/backend/routes/cases/indexByProjectId.js @@ -25,41 +25,56 @@ export default function (sequelize) { RunCase.belongsTo(Case, { foreignKey: 'caseId' }); const { verifySignedIn } = authMiddleware(sequelize); const { verifyProjectVisibleFromProjectId } = visibilityMiddleware(sequelize); + const { verifyProjectVisibleFromRunId } = visibilityMiddleware(sequelize); - router.get('/byproject', verifySignedIn, verifyProjectVisibleFromProjectId, async (req, res) => { - const { projectId } = req.query; + router.get( + '/byproject', + verifySignedIn, + verifyProjectVisibleFromProjectId, + verifyProjectVisibleFromRunId, + async (req, res) => { + const { projectId, runId } = req.query; - if (!projectId) { - return res.status(400).json({ error: 'projectId is required' }); - } + if (!projectId) { + return res.status(400).json({ error: 'projectId is required' }); + } - try { - const cases = await Case.findAll({ - include: [ - { - model: Folder, - where: { - projectId: projectId, + if (!runId) { + return res.status(400).json({ error: 'runId is required' }); + } + + try { + const cases = await Case.findAll({ + include: [ + { + model: Folder, + where: { + projectId: projectId, + }, + attributes: [], }, - attributes: [], - }, - { - model: RunCase, - attributes: ['id', 'runId', 'status'], - }, - { - model: Tags, - attributes: ['id', 'name'], - through: { attributes: [] }, - }, - ], - }); - res.json(cases); - } catch (error) { - console.error(error); - res.status(500).send('Internal Server Error'); + { + model: RunCase, + attributes: ['id', 'runId', 'status'], + required: false, + where: { + runId: runId, + }, + }, + { + model: Tags, + attributes: ['id', 'name'], + through: { attributes: [] }, + }, + ], + }); + res.json(cases); + } catch (error) { + console.error(error); + res.status(500).send('Internal Server Error'); + } } - }); + ); return router; } diff --git a/backend/routes/runs/new.js b/backend/routes/runs/new.js index 2ed61ed..6127245 100644 --- a/backend/routes/runs/new.js +++ b/backend/routes/runs/new.js @@ -1,7 +1,11 @@ import express from 'express'; const router = express.Router(); import { DataTypes } from 'sequelize'; +import defineProject from '../../models/projects.js'; +import defineFolder from '../../models/folders.js'; import defineRun from '../../models/runs.js'; +import defineRunCase from '../../models/runCases.js'; +import defineCase from '../../models/cases.js'; import authMiddleware from '../../middleware/auth.js'; import editableMiddleware from '../../middleware/verifyEditable.js'; @@ -9,6 +13,15 @@ export default function (sequelize) { const { verifySignedIn } = authMiddleware(sequelize); const { verifyProjectReporterFromProjectId } = editableMiddleware(sequelize); const Run = defineRun(sequelize, DataTypes); + const RunCase = defineRunCase(sequelize, DataTypes); + const Case = defineCase(sequelize, DataTypes); + const Project = defineProject(sequelize, DataTypes); + const Folder = defineFolder(sequelize, DataTypes); + Project.hasMany(Folder, { foreignKey: 'projectId' }); + Folder.hasMany(Case, { foreignKey: 'folderId' }); + Folder.belongsTo(Project, { foreignKey: 'projectId' }); + Case.belongsTo(Folder, { foreignKey: 'folderId' }); + Case.hasMany(RunCase, { foreignKey: 'caseId' }); router.post('/', verifySignedIn, verifyProjectReporterFromProjectId, async (req, res) => { try { diff --git a/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/RunEditor.tsx b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/RunEditor.tsx index cc311e0..113af19 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/RunEditor.tsx +++ b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/RunEditor.tsx @@ -112,7 +112,7 @@ export default function RunEditor({ }; const initTestCases = async () => { - const casesData = await fetchProjectCases(tokenContext.token.access_token, Number(projectId)); + const casesData = await fetchProjectCases(tokenContext.token.access_token, Number(projectId), Number(runId)); casesData.forEach((testCase: CaseType) => { if (testCase.RunCases && testCase.RunCases.length > 0) { testCase.RunCases[0].editState = 'notChanged'; diff --git a/frontend/src/app/[locale]/projects/[projectId]/runs/runsControl.ts b/frontend/src/app/[locale]/projects/[projectId]/runs/runsControl.ts index ca78ba0..dd1c2ee 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/runs/runsControl.ts +++ b/frontend/src/app/[locale]/projects/[projectId]/runs/runsControl.ts @@ -315,8 +315,8 @@ async function updateRunCases(jwt: string, runId: number, testCases: CaseType[]) } } -async function fetchProjectCases(jwt: string, projectId: number) { - const url = `${apiServer}/cases/byproject?projectId=${projectId}`; +async function fetchProjectCases(jwt: string, projectId: number, runId: number) { + const url = `${apiServer}/cases/byproject?projectId=${projectId}&runId=${runId}`; try { const response = await fetch(url, {