feat(html-reporter): pr feedback

This commit is contained in:
Kuba Janik 2024-07-23 12:24:52 +02:00
parent 724725bf68
commit 3073f96a8a
6 changed files with 15 additions and 19 deletions

View file

@ -28,7 +28,7 @@ import { MetadataView } from './metadataView';
import { TestCaseView } from './testCaseView'; import { TestCaseView } from './testCaseView';
import { TestFilesView } from './testFilesView'; import { TestFilesView } from './testFilesView';
import './theme.css'; import './theme.css';
import { useSearchParams } from './use-search-params'; import { useSearchParams } from './useSearchParams';
declare global { declare global {
interface Window { interface Window {
@ -47,11 +47,10 @@ export const ReportView: React.FC<{
const [expandedFiles, setExpandedFiles] = React.useState<Map<string, boolean>>(new Map()); const [expandedFiles, setExpandedFiles] = React.useState<Map<string, boolean>>(new Map());
const [filterText, setFilterText] = React.useState(searchParams.get('q') || ''); const [filterText, setFilterText] = React.useState(searchParams.get('q') || '');
const reportData = report?.json();
const filter = React.useMemo(() => Filter.parse(filterText), [filterText]); const filter = React.useMemo(() => Filter.parse(filterText), [filterText]);
const filteredFiles = React.useMemo(() => { const filteredFiles = React.useMemo(() => {
const files = reportData?.files ?? []; const files = report?.json().files ?? [];
return files return files
.map(file => { .map(file => {
@ -59,21 +58,21 @@ export const ReportView: React.FC<{
return { ...file, tests }; return { ...file, tests };
}) })
.filter(file => file.tests.length !== 0); .filter(file => file.tests.length !== 0);
}, [filter, reportData?.files]); }, [filter, report]);
const filteredStats = React.useMemo(() => computeStats(filteredFiles), [filteredFiles]); const filteredStats = React.useMemo(() => computeStats(filteredFiles), [filteredFiles]);
return <div className='htmlreport vbox px-4 pb-4'> return <div className='htmlreport vbox px-4 pb-4'>
<main> <main>
{reportData && <HeaderView stats={reportData.stats} filterText={filterText} setFilterText={setFilterText}></HeaderView>} {report?.json() && <HeaderView stats={report?.json().stats} filterText={filterText} setFilterText={setFilterText}></HeaderView>}
{reportData?.metadata && <MetadataView {...reportData.metadata as Metainfo} />} {report?.json().metadata && <MetadataView {...report.json().metadata as Metainfo} />}
<Route predicate={testFilesRoutePredicate}> <Route predicate={testFilesRoutePredicate}>
<TestFilesView <TestFilesView
report={reportData} report={report?.json()}
filter={filter} filter={filter}
expandedFiles={expandedFiles} expandedFiles={expandedFiles}
setExpandedFiles={setExpandedFiles} setExpandedFiles={setExpandedFiles}
projectNames={reportData?.projectNames ?? []} projectNames={report?.json().projectNames ?? []}
filteredStats={filteredStats} filteredStats={filteredStats}
filteredFiles={filteredFiles} filteredFiles={filteredFiles}
/> />
@ -83,7 +82,6 @@ export const ReportView: React.FC<{
<TestCaseViewLoader <TestCaseViewLoader
report={report} report={report}
filteredFiles={filteredFiles} filteredFiles={filteredFiles}
filter={filter}
/> />
)} )}
</Route> </Route>
@ -94,8 +92,7 @@ export const ReportView: React.FC<{
const TestCaseViewLoader: React.FC<{ const TestCaseViewLoader: React.FC<{
report: LoadedReport, report: LoadedReport,
filteredFiles: TestFileSummary[], filteredFiles: TestFileSummary[],
filter: Filter }> = ({ report, filteredFiles }) => {
}> = ({ report, filteredFiles, filter }) => {
const searchParams = useSearchParams(); const searchParams = useSearchParams();
const [test, setTest] = React.useState<TestCase | undefined>(); const [test, setTest] = React.useState<TestCase | undefined>();
const testId = searchParams.get('testId') ?? ''; const testId = searchParams.get('testId') ?? '';

View file

@ -50,8 +50,8 @@
.test-case-navigation { .test-case-navigation {
display: flex; display: flex;
align-items: center;
gap: 8px; gap: 8px;
padding-top: 8px;
} }
.test-case-location, .test-case-location,
@ -65,6 +65,7 @@
flex: none; flex: none;
align-items: center; align-items: center;
padding: 0 8px; padding: 0 8px;
height: 16px;
} }
.test-case-annotation { .test-case-annotation {

View file

@ -26,7 +26,7 @@ import { TestResultView } from './testResultView';
import { linkifyText } from './renderUtils'; import { linkifyText } from './renderUtils';
import { hashStringToInt, msToString } from './utils'; import { hashStringToInt, msToString } from './utils';
import * as icons from './icons'; import * as icons from './icons';
import { useSearchParams } from './use-search-params'; import { useSearchParams } from './useSearchParams';
export const TestCaseView: React.FC<{ export const TestCaseView: React.FC<{
projectNames: string[], projectNames: string[],

View file

@ -18,20 +18,19 @@ import type { HTMLReport, TestCaseSummary, TestFileSummary } from './types';
import * as React from 'react'; import * as React from 'react';
import { hashStringToInt, msToString } from './utils'; import { hashStringToInt, msToString } from './utils';
import { Chip } from './chip'; import { Chip } from './chip';
import { filterWithToken, type Filter } from './filter'; import { filterWithToken } from './filter';
import { generateTraceUrl, Link, navigate, ProjectLink } from './links'; import { generateTraceUrl, Link, navigate, ProjectLink } from './links';
import { statusIcon } from './statusIcon'; import { statusIcon } from './statusIcon';
import './testFileView.css'; import './testFileView.css';
import { video, image, trace } from './icons'; import { video, image, trace } from './icons';
import { useSearchParams } from './use-search-params'; import { useSearchParams } from './useSearchParams';
export const TestFileView: React.FC<React.PropsWithChildren<{ export const TestFileView: React.FC<React.PropsWithChildren<{
report: HTMLReport; report: HTMLReport;
file: TestFileSummary; file: TestFileSummary;
isFileExpanded: (fileId: string) => boolean; isFileExpanded: (fileId: string) => boolean;
setFileExpanded: (fileId: string, expanded: boolean) => void; setFileExpanded: (fileId: string, expanded: boolean) => void;
filter: Filter; }>> = ({ file, report, isFileExpanded, setFileExpanded }) => {
}>> = ({ file, report, isFileExpanded, setFileExpanded, filter }) => {
const searchParams = useSearchParams(); const searchParams = useSearchParams();
const q = searchParams.get('q') ?? ''; const q = searchParams.get('q') ?? '';

View file

@ -68,8 +68,7 @@ export const TestFilesView: React.FC<{
const newExpanded = new Map(expandedFiles); const newExpanded = new Map(expandedFiles);
newExpanded.set(fileId, expanded); newExpanded.set(fileId, expanded);
setExpandedFiles(newExpanded); setExpandedFiles(newExpanded);
}} }}>
filter={filter}>
</TestFileView>; </TestFileView>;
})} })}
</>; </>;