From 1da19ed43c195e8dc783e6ac6000fe2e57f0f4f0 Mon Sep 17 00:00:00 2001 From: Takeshi Kimata <117462761+kimatata@users.noreply.github.com> Date: Sun, 21 Jul 2024 15:30:04 +0900 Subject: [PATCH] refactor: test run case status messages duplication --- frontend/config/selection.ts | 24 ++++++++++--------- frontend/messages/en.json | 2 +- frontend/messages/ja.json | 2 +- .../projects/[projectId]/home/ProjectHome.tsx | 14 +++++++---- .../projects/[projectId]/home/aggregate.ts | 6 ++--- .../projects/[projectId]/home/page.tsx | 18 +++++++------- .../[projectId]/runs/[runId]/RunEditor.tsx | 21 ++++++++++++---- .../runs/[runId]/RunPregressDonutChart.tsx | 8 +++---- .../runs/[runId]/TestCaseSelector.tsx | 12 ++++++---- .../[projectId]/runs/[runId]/page.tsx | 18 +++++++------- frontend/types/testRunCaseStatus.ts | 18 ++++++++++++++ frontend/types/testStatus.ts | 17 ------------- 12 files changed, 91 insertions(+), 69 deletions(-) create mode 100644 frontend/types/testRunCaseStatus.ts delete mode 100644 frontend/types/testStatus.ts diff --git a/frontend/config/selection.ts b/frontend/config/selection.ts index 2239feb..98bb76e 100644 --- a/frontend/config/selection.ts +++ b/frontend/config/selection.ts @@ -1,6 +1,6 @@ import { TestTypeType } from '@/types/testType'; import { PriorityType } from '@/types/priority'; -import { TestStatusType } from '@/types/testStatus'; +import { TestRunCaseStatusType } from '@/types/testRunCaseStatus'; const roles = [{ uid: 'administrator' }, { uid: 'user' }]; @@ -13,7 +13,18 @@ const locales = [ { code: 'ja', name: '日本語' }, ]; -const testRunCaseStatus: TestStatusType[] = [ +// The status of each test run +const testRunStatus = [ + { uid: 'new' }, + { uid: 'inProgress' }, + { uid: 'underReview' }, + { uid: 'rejected' }, + { uid: 'done' }, + { uid: 'closed' }, +]; + +// The status of each test case in test run +const testRunCaseStatus: TestRunCaseStatusType[] = [ { uid: 'untested', color: 'primary', @@ -57,15 +68,6 @@ const automationStatus = [ const templates = [{ uid: 'text' }, { uid: 'step' }]; -const testRunStatus = [ - { uid: 'new' }, - { uid: 'inProgress' }, - { uid: 'underReview' }, - { uid: 'rejected' }, - { uid: 'done' }, - { uid: 'closed' }, -]; - export { roles, memberRoles, diff --git a/frontend/messages/en.json b/frontend/messages/en.json index bd10a03..4aebf1f 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -1,5 +1,5 @@ { - "Status": { + "RunCaseStatus": { "untested": "Untested", "passed": "Passed", "failed": "Failed", diff --git a/frontend/messages/ja.json b/frontend/messages/ja.json index dc622af..37e11d2 100644 --- a/frontend/messages/ja.json +++ b/frontend/messages/ja.json @@ -1,5 +1,5 @@ { - "Status": { + "RunCaseStatus": { "untested": "未実行", "passed": "成功", "failed": "失敗", diff --git a/frontend/src/app/[locale]/projects/[projectId]/home/ProjectHome.tsx b/frontend/src/app/[locale]/projects/[projectId]/home/ProjectHome.tsx index 671f70a..102b568 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/home/ProjectHome.tsx +++ b/frontend/src/app/[locale]/projects/[projectId]/home/ProjectHome.tsx @@ -13,7 +13,7 @@ import { useTheme } from 'next-themes'; import TestTypesChart from './TestTypesDonutChart'; import TestPriorityChart from './TestPriorityDonutChart'; import TestProgressBarChart from './TestProgressColumnChart'; -import { TestStatusMessages } from '@/types/testStatus'; +import { TestRunCaseStatusMessages } from '@/types/testRunCaseStatus'; import { TestTypeMessages } from '@/types/testType'; import { PriorityMessages } from '@/types/priority'; @@ -45,12 +45,18 @@ async function fetchProject(jwt: string, projectId: number) { type Props = { projectId: string; messages: HomeMessages; - statusMessages: TestStatusMessages; + testRunCaseStatusMessages: TestRunCaseStatusMessages; testTypeMessages: TestTypeMessages; priorityMessages: PriorityMessages; }; -export function ProjectHome({ projectId, messages, statusMessages, testTypeMessages, priorityMessages }: Props) { +export function ProjectHome({ + projectId, + messages, + testRunCaseStatusMessages, + testTypeMessages, + priorityMessages, +}: Props) { const context = useContext(TokenContext); const { theme, setTheme } = useTheme(); const [project, setProject] = useState({ @@ -97,7 +103,7 @@ export function ProjectHome({ projectId, messages, statusMessages, testTypeMessa const priorityRet = aggregateTestPriority(project); setPriorityCounts([...priorityRet]); - const { series, categories } = aggregateProgress(project, statusMessages); + const { series, categories } = aggregateProgress(project, testRunCaseStatusMessages); setProgressSeries([...series]); setProgressCategories([...categories]); } diff --git a/frontend/src/app/[locale]/projects/[projectId]/home/aggregate.ts b/frontend/src/app/[locale]/projects/[projectId]/home/aggregate.ts index c2630f5..474c168 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/home/aggregate.ts +++ b/frontend/src/app/[locale]/projects/[projectId]/home/aggregate.ts @@ -1,6 +1,6 @@ import { ProjectType } from '@/types/project'; import { testTypes, priorities, testRunCaseStatus } from '@/config/selection'; -import { TestStatusMessages } from '@/types/testStatus'; +import { TestRunCaseStatusMessages } from '@/types/testRunCaseStatus'; // aggregate folder, case, run mum function aggregateBasicInfo(project: ProjectType) { @@ -50,9 +50,9 @@ function aggregateTestPriority(project: ProjectType) { return result; } -function aggregateProgress(project: ProjectType, statusMessages: TestStatusMessages) { +function aggregateProgress(project: ProjectType, testRunCaseStatusMessages: TestRunCaseStatusMessages) { let series = testRunCaseStatus.map((status) => { - return { name: statusMessages[status.uid], data: [] }; + return { name: testRunCaseStatusMessages[status.uid], data: [] }; }); let categories = []; diff --git a/frontend/src/app/[locale]/projects/[projectId]/home/page.tsx b/frontend/src/app/[locale]/projects/[projectId]/home/page.tsx index 116fccd..895d758 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/home/page.tsx +++ b/frontend/src/app/[locale]/projects/[projectId]/home/page.tsx @@ -2,7 +2,7 @@ import { ProjectHome } from './ProjectHome'; import { useTranslations } from 'next-intl'; import { PriorityMessages } from '@/types/priority'; import { TestTypeMessages } from '@/types/testType'; -import { TestStatusMessages } from '@/types/testStatus'; +import { TestRunCaseStatusMessages } from '@/types/testRunCaseStatus'; export type HomeMessages = { folders: string; @@ -26,13 +26,13 @@ export default function Page({ params }: { params: { projectId: string } }) { byPriority: t('by_priority'), }; - const st = useTranslations('Status'); - const statusMessages: TestStatusMessages = { - untested: st('untested'), - passed: st('passed'), - failed: st('failed'), - retest: st('retest'), - skipped: st('skipped'), + const rcst = useTranslations('RunCaseStatus'); + const testRunCaseStatusMessages: TestRunCaseStatusMessages = { + untested: rcst('untested'), + passed: rcst('passed'), + failed: rcst('failed'), + retest: rcst('retest'), + skipped: rcst('skipped'), }; const tt = useTranslations('Type'); @@ -65,7 +65,7 @@ export default function Page({ params }: { params: { projectId: string } }) { 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 9dbe7cb..320108c 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/RunEditor.tsx +++ b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/RunEditor.tsx @@ -38,7 +38,7 @@ import { TokenContext } from '@/utils/TokenProvider'; import { useTheme } from 'next-themes'; import { useFormGuard } from '@/utils/formGuard'; import { PriorityMessages } from '@/types/priority'; -import { TestStatusMessages } from '@/types/testStatus'; +import { TestRunCaseStatusMessages } from '@/types/testRunCaseStatus'; const defaultTestRun = { id: 0, @@ -55,12 +55,19 @@ type Props = { projectId: string; runId: string; messages: RunMessages; - statusMessages: TestStatusMessages; + testRunCaseStatusMessages: TestRunCaseStatusMessages; priorityMessages: PriorityMessages; locale: string; }; -export default function RunEditor({ projectId, runId, messages, statusMessages, priorityMessages, locale }: Props) { +export default function RunEditor({ + projectId, + runId, + messages, + testRunCaseStatusMessages, + priorityMessages, + locale, +}: Props) { const context = useContext(TokenContext); const { theme, setTheme } = useTheme(); const [testRun, setTestRun] = useState(defaultTestRun); @@ -206,7 +213,11 @@ export default function RunEditor({ projectId, runId, messages, statusMessages, - +
@@ -318,7 +329,7 @@ export default function RunEditor({ projectId, runId, messages, statusMessages, onIncludeCase={(includeTestId) => handleIncludeExcludeCase(true, includeTestId)} onExcludeCase={(excludeCaseId) => handleIncludeExcludeCase(false, excludeCaseId)} messages={messages} - statusMessages={statusMessages} + testRunCaseStatusMessages={testRunCaseStatusMessages} priorityMessages={priorityMessages} />
diff --git a/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/RunPregressDonutChart.tsx b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/RunPregressDonutChart.tsx index b7b8831..6c3f0a2 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/RunPregressDonutChart.tsx +++ b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/RunPregressDonutChart.tsx @@ -3,16 +3,16 @@ import { useState, useEffect } from 'react'; import dynamic from 'next/dynamic'; import { testRunCaseStatus } from '@/config/selection'; import { RunStatusCountType } from '@/types/run'; -import { TestStatusMessages } from '@/types/testStatus'; +import { TestRunCaseStatusMessages } from '@/types/testRunCaseStatus'; const Chart = dynamic(() => import('react-apexcharts'), { ssr: false }); type Props = { statusCounts: RunStatusCountType[]; - statusMessages: TestStatusMessages; + testRunCaseStatusMessages: TestRunCaseStatusMessages; theme: string | undefined; }; -export default function RunProgressDounut({ statusCounts, statusMessages, theme }: Props) { +export default function RunProgressDounut({ statusCounts, testRunCaseStatusMessages, theme }: Props) { const [chartData, setChartData] = useState({ series: [], options: { @@ -29,7 +29,7 @@ export default function RunProgressDounut({ statusCounts, statusMessages, theme return found ? found.count : 0; }); - const labels = testRunCaseStatus.map((entry) => statusMessages[entry.uid]); + const labels = testRunCaseStatus.map((entry) => testRunCaseStatusMessages[entry.uid]); const colors = testRunCaseStatus.map((entry) => entry.chartColor); const legend = { labels: { diff --git a/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/TestCaseSelector.tsx b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/TestCaseSelector.tsx index 88bdb52..7d8f0d6 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/TestCaseSelector.tsx +++ b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/TestCaseSelector.tsx @@ -32,7 +32,7 @@ import { RunMessages } from '@/types/run'; import TestCaseDetailDialog from './TestCaseDetailDialog'; import { PriorityMessages } from '@/types/priority'; import TestCasePriority from '@/components/TestCasePriority'; -import { TestStatusMessages } from '@/types/testStatus'; +import { TestRunCaseStatusMessages } from '@/types/testRunCaseStatus'; type Props = { cases: CaseType[]; @@ -43,7 +43,7 @@ type Props = { onIncludeCase: (includeCaseId: number) => {}; onExcludeCase: (excludeCaseId: number) => {}; messages: RunMessages; - statusMessages: TestStatusMessages; + testRunCaseStatusMessages: TestRunCaseStatusMessages; priorityMessages: PriorityMessages; }; @@ -56,7 +56,7 @@ export default function TestCaseSelector({ onIncludeCase, onExcludeCase, messages, - statusMessages, + testRunCaseStatusMessages, priorityMessages, }: Props) { const headerColumns = [ @@ -160,7 +160,9 @@ export default function TestCaseSelector({ startContent={isIncluded && renderStatusIcon(testRunCaseStatus[runStatus].uid)} endContent={isIncluded && } > - {isIncluded && statusMessages[testRunCaseStatus[runStatus].uid]} + + {isIncluded && testRunCaseStatusMessages[testRunCaseStatus[runStatus].uid]} + @@ -170,7 +172,7 @@ export default function TestCaseSelector({ startContent={renderStatusIcon(runCaseStatus.uid)} onPress={() => onChangeStatus(testCase.id, index)} > - {statusMessages[runCaseStatus.uid]} + {testRunCaseStatusMessages[runCaseStatus.uid]} ))} diff --git a/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/page.tsx b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/page.tsx index efcd317..c53f855 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/page.tsx +++ b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/page.tsx @@ -2,7 +2,7 @@ import RunEditor from './RunEditor'; import { useTranslations } from 'next-intl'; import { RunMessages } from '@/types/run'; import { PriorityMessages } from '@/types/priority'; -import { TestStatusMessages } from '@/types/testStatus'; +import { TestRunCaseStatusMessages } from '@/types/testRunCaseStatus'; export default function Page({ params }: { params: { projectId: string; runId: string; locale: string } }) { const t = useTranslations('Run'); @@ -38,13 +38,13 @@ export default function Page({ params }: { params: { projectId: string; runId: s close: t('close'), }; - const st = useTranslations('Status'); - const statusMessages: TestStatusMessages = { - untested: st('untested'), - passed: st('passed'), - failed: st('failed'), - retest: st('retest'), - skipped: st('skipped'), + const rcst = useTranslations('RunCaseStatus'); + const testRunCaseStatusMessages: TestRunCaseStatusMessages = { + untested: rcst('untested'), + passed: rcst('passed'), + failed: rcst('failed'), + retest: rcst('retest'), + skipped: rcst('skipped'), }; const pt = useTranslations('Priority'); @@ -60,7 +60,7 @@ export default function Page({ params }: { params: { projectId: string; runId: s projectId={params.projectId} runId={params.runId} messages={messages} - statusMessages={statusMessages} + testRunCaseStatusMessages={testRunCaseStatusMessages} priorityMessages={priorityMessages} locale={params.locale} /> diff --git a/frontend/types/testRunCaseStatus.ts b/frontend/types/testRunCaseStatus.ts new file mode 100644 index 0000000..f370963 --- /dev/null +++ b/frontend/types/testRunCaseStatus.ts @@ -0,0 +1,18 @@ +// The status of each test case in test run +type TestRunCaseStatusUidType = 'untested' | 'passed' | 'failed' | 'retest' | 'skipped'; + +type TestRunCaseStatusType = { + uid: TestRunCaseStatusUidType; + color: string; + chartColor: string; +}; + +type TestRunCaseStatusMessages = { + untested: string; + passed: string; + failed: string; + retest: string; + skipped: string; +}; + +export type { TestRunCaseStatusUidType, TestRunCaseStatusType, TestRunCaseStatusMessages }; diff --git a/frontend/types/testStatus.ts b/frontend/types/testStatus.ts deleted file mode 100644 index bf7a247..0000000 --- a/frontend/types/testStatus.ts +++ /dev/null @@ -1,17 +0,0 @@ -type TestStatusUidType = 'untested' | 'passed' | 'failed' | 'retest' | 'skipped'; - -type TestStatusType = { - uid: TestStatusUidType; - color: string; - chartColor: string; -}; - -type TestStatusMessages = { - untested: string; - passed: string; - failed: string; - retest: string; - skipped: string; -}; - -export type { TestStatusUidType, TestStatusType, TestStatusMessages };