-
Notifications
You must be signed in to change notification settings - Fork 67
/
TestSuiteCard.tsx
104 lines (94 loc) 路 3.42 KB
/
TestSuiteCard.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import {DownOutlined, RightOutlined} from '@ant-design/icons';
import {useMemo} from 'react';
import CreateButton from 'components/CreateButton';
import TestSuiteRunCard from 'components/RunCard/TestSuiteRunCard';
import TracetestAPI from 'redux/apis/Tracetest';
import {ResourceType} from 'types/Resource.type';
import TestSuite from 'models/TestSuite.model';
import TestSuiteRun from 'models/TestSuiteRun.model';
import * as S from './ResourceCard.styled';
import ResourceCardActions from './ResourceCardActions';
import ResourceCardRuns from './ResourceCardRuns';
import ResourceCardSummary from './ResourceCardSummary';
import useRuns from './useRuns';
const {useLazyGetTestSuiteRunsQuery} = TracetestAPI.instance;
interface IProps {
onEdit(id: string, lastRunId: number, type: ResourceType): void;
onDelete(id: string, name: string, type: ResourceType): void;
onRun(testSuite: TestSuite, type: ResourceType): void;
onDuplicate(testSuite: TestSuite): void;
onViewAll(id: string, type: ResourceType): void;
testSuite: TestSuite;
}
const TestSuiteCard = ({
onEdit,
onDelete,
onRun,
onDuplicate,
onViewAll,
testSuite: {id: testSuiteId, summary, name, description},
testSuite,
}: IProps) => {
const queryParams = useMemo(() => ({take: 5, testSuiteId}), [testSuiteId]);
const {isCollapsed, isLoading, list, onClick} = useRuns<TestSuiteRun, {testSuiteId: string}>(
useLazyGetTestSuiteRunsQuery,
queryParams
);
const shouldEdit = summary.hasRuns;
const lastRunId = summary.runs; // assume the total of runs as the last run
return (
<S.Container $type={ResourceType.TestSuite}>
<S.TestContainer onClick={onClick}>
{isCollapsed ? <RightOutlined data-cy={`collapse-testsuite-${testSuiteId}`} /> : <DownOutlined />}
<S.Box $type={ResourceType.TestSuite}>
<S.BoxTitle level={2}>{summary.runs}</S.BoxTitle>
</S.Box>
<S.TitleContainer>
<S.Title level={3}>{name}</S.Title>
<S.Text>{description}</S.Text>
</S.TitleContainer>
<ResourceCardSummary summary={summary} />
<S.Row $gap={12}>
<CreateButton
data-cy={`testsuite-run-button-${testSuiteId}`}
ghost
onClick={event => {
event.stopPropagation();
onRun(testSuite, ResourceType.TestSuite);
}}
type="primary"
>
Run
</CreateButton>
<ResourceCardActions
id={testSuiteId}
shouldEdit={shouldEdit}
onDelete={() => onDelete(testSuiteId, name, ResourceType.TestSuite)}
onEdit={() => onEdit(testSuiteId, lastRunId, ResourceType.TestSuite)}
onDuplicate={() => onDuplicate(testSuite)}
/>
</S.Row>
</S.TestContainer>
<ResourceCardRuns
hasMoreRuns={list.length === 5}
hasRuns={Boolean(list.length)}
isCollapsed={isCollapsed}
isLoading={isLoading}
resourcePath={`/testsuite/${testSuiteId}`}
onViewAll={() => onViewAll(testSuiteId, ResourceType.TestSuite)}
>
<S.RunsListContainer>
{list.map(run => (
<TestSuiteRunCard
key={run.id}
linkTo={`/testsuite/${testSuiteId}/run/${run.id}`}
run={run}
testSuiteId={testSuiteId}
/>
))}
</S.RunsListContainer>
</ResourceCardRuns>
</S.Container>
);
};
export default TestSuiteCard;