@cypress-design/react-testresult 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +6 -0
- package/CHANGELOG.md +10 -0
- package/ReadMe.md +75 -0
- package/TestResult.tsx +142 -0
- package/TestResultReact.cy.tsx +92 -0
- package/dist/TestResult.d.ts +9 -0
- package/dist/TestResult.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.es.mjs +843 -0
- package/dist/index.es.mjs.map +1 -0
- package/dist/index.umd.js +864 -0
- package/dist/index.umd.js.map +1 -0
- package/index.ts +1 -0
- package/package.json +31 -0
- package/rollup.config.mjs +3 -0
- package/tsconfig.build.json +8 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
$ yarn build:module && yarn build:types
|
|
2
|
+
$ rollup -c ./rollup.config.mjs
|
|
3
|
+
[36m
|
|
4
|
+
[1m./index.ts[22m → [1m./dist/index.umd.js, ./dist/index.es.mjs[22m...[39m
|
|
5
|
+
[32mcreated [1m./dist/index.umd.js, ./dist/index.es.mjs[22m in [1m5.2s[22m[39m
|
|
6
|
+
$ tsc --project ./tsconfig.build.json
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# @cypress-design/react-testresult
|
|
2
|
+
|
|
3
|
+
## 0.0.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#366](https://github.com/cypress-io/cypress-design/pull/366) [`3a48cc3`](https://github.com/cypress-io/cypress-design/commit/3a48cc327666f1a3b067263a24dd13a3ba1f3b1e) Thanks [@ryanjwilke](https://github.com/ryanjwilke)! - create the component
|
|
8
|
+
|
|
9
|
+
- Updated dependencies [[`3a48cc3`](https://github.com/cypress-io/cypress-design/commit/3a48cc327666f1a3b067263a24dd13a3ba1f3b1e)]:
|
|
10
|
+
- @cypress-design/constants-testresult@0.0.2
|
package/ReadMe.md
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# TestResult
|
|
2
|
+
|
|
3
|
+
## Install
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npm install @cypress-design/react-testresult
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
or with yarn
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
yarn add @cypress-design/react-testresult
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import TestResult from '@cypress-design/react-testresult'
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
```tsx live
|
|
22
|
+
import { useState } from 'react'
|
|
23
|
+
import TestResult from '@cypress-design/react-testresult'
|
|
24
|
+
import Button from '@cypress-design/react-button'
|
|
25
|
+
import {
|
|
26
|
+
IconActionTestReplay,
|
|
27
|
+
IconChevronRightSmall,
|
|
28
|
+
} from '@cypress-design/react-icon'
|
|
29
|
+
|
|
30
|
+
export const Demo = () => {
|
|
31
|
+
const [toggled, setToggled] = useState(false)
|
|
32
|
+
return (
|
|
33
|
+
<div className="bg-white p-2">
|
|
34
|
+
<TestResult
|
|
35
|
+
status="passed"
|
|
36
|
+
names={['<TestResults />', 'playground']}
|
|
37
|
+
flaky
|
|
38
|
+
modified
|
|
39
|
+
added
|
|
40
|
+
groups={
|
|
41
|
+
toggled
|
|
42
|
+
? ['Chrome', 'Firefox'].map((group) => (
|
|
43
|
+
<div className="px-[16px] py-[8px] border border-gray-100 flex">
|
|
44
|
+
<span className="flex-1">{group}</span>
|
|
45
|
+
<Button
|
|
46
|
+
variant="outline-light"
|
|
47
|
+
size="32"
|
|
48
|
+
className="!px-[8px] @lg/test-result:!px-[12px] h-[32px]"
|
|
49
|
+
>
|
|
50
|
+
<IconActionTestReplay />
|
|
51
|
+
<span className="hidden @lg/test-result:inline ml-[8px]">
|
|
52
|
+
Test Replay
|
|
53
|
+
</span>
|
|
54
|
+
</Button>
|
|
55
|
+
</div>
|
|
56
|
+
))
|
|
57
|
+
: null
|
|
58
|
+
}
|
|
59
|
+
>
|
|
60
|
+
<Button
|
|
61
|
+
variant="outline-light"
|
|
62
|
+
size="32"
|
|
63
|
+
className="!px-[8px] hidden @xl/test-result:inline-block h-[32px]"
|
|
64
|
+
onClick={() => setToggled(!toggled)}
|
|
65
|
+
>
|
|
66
|
+
<IconChevronRightSmall
|
|
67
|
+
stroke-color="gray-500"
|
|
68
|
+
className={`${toggled ? 'rotate-90' : ''} transform transition-transform`}
|
|
69
|
+
/>
|
|
70
|
+
</Button>
|
|
71
|
+
</TestResult>
|
|
72
|
+
</div>
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
```
|
package/TestResult.tsx
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import * as React from 'react'
|
|
2
|
+
import clsx from 'clsx'
|
|
3
|
+
import {
|
|
4
|
+
classes,
|
|
5
|
+
type TestResultData,
|
|
6
|
+
} from '@cypress-design/constants-testresult'
|
|
7
|
+
import StatusIcon from '@cypress-design/react-statusicon'
|
|
8
|
+
import {
|
|
9
|
+
IconChevronRightSmall,
|
|
10
|
+
IconStatusFlaky,
|
|
11
|
+
IconDocumentModifiedSquareDot,
|
|
12
|
+
IconDocumentAddedSquarePlus,
|
|
13
|
+
} from '@cypress-design/react-icon'
|
|
14
|
+
|
|
15
|
+
export interface TestResultProps extends TestResultData {
|
|
16
|
+
className?: string
|
|
17
|
+
groups?: React.ReactNode
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const TestResult: React.FC<
|
|
21
|
+
TestResultProps & React.HTMLProps<HTMLDivElement>
|
|
22
|
+
> = ({
|
|
23
|
+
status,
|
|
24
|
+
names,
|
|
25
|
+
flaky,
|
|
26
|
+
modified,
|
|
27
|
+
added,
|
|
28
|
+
className,
|
|
29
|
+
groups,
|
|
30
|
+
children,
|
|
31
|
+
...rest
|
|
32
|
+
}) => {
|
|
33
|
+
return (
|
|
34
|
+
<div
|
|
35
|
+
data-cy="cd-tr-container"
|
|
36
|
+
{...rest}
|
|
37
|
+
className={clsx(classes.container, className)}
|
|
38
|
+
>
|
|
39
|
+
<div data-cy="cd-tr-row" className={classes.row}>
|
|
40
|
+
<div data-cy="cd-tr-list" className={classes.list}>
|
|
41
|
+
<div data-cy="cd-tr-icon" className={classes.icon}>
|
|
42
|
+
<StatusIcon
|
|
43
|
+
size="16"
|
|
44
|
+
variant="solid"
|
|
45
|
+
status={status}
|
|
46
|
+
className={classes.status_icon}
|
|
47
|
+
/>
|
|
48
|
+
</div>
|
|
49
|
+
<div
|
|
50
|
+
data-cy="cd-tr-name-container-column"
|
|
51
|
+
className={classes.name.container.column}
|
|
52
|
+
>
|
|
53
|
+
{names.slice(0, -1).length > 0 && (
|
|
54
|
+
<div
|
|
55
|
+
data-cy="cd-tr-name-container-describes"
|
|
56
|
+
className={classes.name.container.describes}
|
|
57
|
+
>
|
|
58
|
+
{names.slice(0, -1).map((name, index) => (
|
|
59
|
+
<React.Fragment key={index}>
|
|
60
|
+
<div
|
|
61
|
+
data-cy="cd-tr-name-item"
|
|
62
|
+
className={clsx({
|
|
63
|
+
[classes.name.item.base]: true,
|
|
64
|
+
[classes.name.item.first]:
|
|
65
|
+
names.length >= 2 && index === 0,
|
|
66
|
+
[classes.name.item.middle]:
|
|
67
|
+
names.length >= 2 &&
|
|
68
|
+
index > 0 &&
|
|
69
|
+
index < names.length - 1,
|
|
70
|
+
})}
|
|
71
|
+
>
|
|
72
|
+
<span
|
|
73
|
+
data-cy="cd-tr-name-item-text"
|
|
74
|
+
className={classes.name.item.text.base}
|
|
75
|
+
>
|
|
76
|
+
{name}
|
|
77
|
+
</span>
|
|
78
|
+
</div>
|
|
79
|
+
{index < names.length - 1 && (
|
|
80
|
+
<div
|
|
81
|
+
data-cy="cd-tr-chevron"
|
|
82
|
+
className={classes.chevron.container}
|
|
83
|
+
>
|
|
84
|
+
<IconChevronRightSmall
|
|
85
|
+
strokeColor="gray-200"
|
|
86
|
+
className="mt-[2px]"
|
|
87
|
+
/>
|
|
88
|
+
</div>
|
|
89
|
+
)}
|
|
90
|
+
</React.Fragment>
|
|
91
|
+
))}
|
|
92
|
+
</div>
|
|
93
|
+
)}
|
|
94
|
+
<div
|
|
95
|
+
data-cy="cd-tr-name-container-it"
|
|
96
|
+
className={classes.name.container.it}
|
|
97
|
+
>
|
|
98
|
+
<span
|
|
99
|
+
data-cy="cd-tr-name-item-text"
|
|
100
|
+
className={[
|
|
101
|
+
classes.name.item.text.base,
|
|
102
|
+
classes.name.item.text.it,
|
|
103
|
+
].join(' ')}
|
|
104
|
+
>
|
|
105
|
+
{names.at(-1)}
|
|
106
|
+
</span>
|
|
107
|
+
{(flaky || modified || added) && (
|
|
108
|
+
<div
|
|
109
|
+
data-cy="cd-tr-attributes"
|
|
110
|
+
className={classes.attribute.container}
|
|
111
|
+
>
|
|
112
|
+
{flaky && <IconStatusFlaky data-cy="cd-tr-flaky" />}
|
|
113
|
+
{modified && (
|
|
114
|
+
<IconDocumentModifiedSquareDot data-cy="cd-tr-modified" />
|
|
115
|
+
)}
|
|
116
|
+
{added && (
|
|
117
|
+
<IconDocumentAddedSquarePlus data-cy="cd-tr-added" />
|
|
118
|
+
)}
|
|
119
|
+
</div>
|
|
120
|
+
)}
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
{children ? (
|
|
124
|
+
<div data-cy="cd-tr-actions" className={classes.button.container}>
|
|
125
|
+
{children}
|
|
126
|
+
</div>
|
|
127
|
+
) : null}
|
|
128
|
+
</div>
|
|
129
|
+
{groups ? (
|
|
130
|
+
<div
|
|
131
|
+
data-cy="cd-tr-group-container"
|
|
132
|
+
className={classes.group.container}
|
|
133
|
+
>
|
|
134
|
+
{groups}
|
|
135
|
+
</div>
|
|
136
|
+
) : null}
|
|
137
|
+
</div>
|
|
138
|
+
</div>
|
|
139
|
+
)
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export default TestResult
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/// <reference types="cypress" />
|
|
2
|
+
|
|
3
|
+
import * as React from 'react'
|
|
4
|
+
import { mount } from 'cypress/react18'
|
|
5
|
+
import TestResult from './TestResult'
|
|
6
|
+
import {
|
|
7
|
+
TestResultData,
|
|
8
|
+
TestResults,
|
|
9
|
+
} from '@cypress-design/constants-testresult'
|
|
10
|
+
import Button from '@cypress-design/react-button'
|
|
11
|
+
import {
|
|
12
|
+
IconActionTestReplay,
|
|
13
|
+
IconChevronRightSmall,
|
|
14
|
+
} from '@cypress-design/react-icon'
|
|
15
|
+
import assertions from '../assertions'
|
|
16
|
+
import clsx from 'clsx'
|
|
17
|
+
|
|
18
|
+
const TestResultSut = (result: TestResultData & { groups?: string[] }) => {
|
|
19
|
+
const [showGroupBox, setShowGroupBox] = React.useState(false)
|
|
20
|
+
return (
|
|
21
|
+
<TestResult
|
|
22
|
+
{...result}
|
|
23
|
+
groups={
|
|
24
|
+
showGroupBox ? (
|
|
25
|
+
<div className="flex flex-col">
|
|
26
|
+
{result.groups?.map((group, index) => (
|
|
27
|
+
<div
|
|
28
|
+
key={group + index}
|
|
29
|
+
className="px-[16px] py-[12px] border border-gray-100 flex mb-[-1px] h-[56px]"
|
|
30
|
+
>
|
|
31
|
+
<span className="flex-1">{group}</span>
|
|
32
|
+
<Button
|
|
33
|
+
variant="outline-light"
|
|
34
|
+
size="32"
|
|
35
|
+
className="!px-[8px] @lg/test-result:!px-[12px] h-[32px]"
|
|
36
|
+
>
|
|
37
|
+
<IconActionTestReplay />
|
|
38
|
+
<span className="hidden @lg/test-result:inline ml-[8px]">
|
|
39
|
+
Test Replay
|
|
40
|
+
</span>
|
|
41
|
+
</Button>
|
|
42
|
+
</div>
|
|
43
|
+
))}
|
|
44
|
+
</div>
|
|
45
|
+
) : null
|
|
46
|
+
}
|
|
47
|
+
onClick={() => (result.groups ? setShowGroupBox(!showGroupBox) : null)}
|
|
48
|
+
>
|
|
49
|
+
{result.groups ? null : (
|
|
50
|
+
<Button
|
|
51
|
+
variant="outline-light"
|
|
52
|
+
size="32"
|
|
53
|
+
className="!px-[8px] @lg/test-result:!px-[12px]"
|
|
54
|
+
>
|
|
55
|
+
<IconActionTestReplay />
|
|
56
|
+
<span className="hidden @lg/test-result:inline ml-[8px]">
|
|
57
|
+
Test Replay
|
|
58
|
+
</span>
|
|
59
|
+
</Button>
|
|
60
|
+
)}
|
|
61
|
+
<Button
|
|
62
|
+
variant="outline-light"
|
|
63
|
+
size="32"
|
|
64
|
+
className="!px-[8px] hidden @xl/test-result:inline-block"
|
|
65
|
+
onClick={() => (result.groups ? setShowGroupBox(!showGroupBox) : null)}
|
|
66
|
+
>
|
|
67
|
+
<span className="sr-only">Expand Group</span>
|
|
68
|
+
<IconChevronRightSmall
|
|
69
|
+
stroke-color="gray-500"
|
|
70
|
+
className={clsx({
|
|
71
|
+
'transition-transform transform': true,
|
|
72
|
+
'rotate-90': showGroupBox,
|
|
73
|
+
})}
|
|
74
|
+
/>
|
|
75
|
+
</Button>
|
|
76
|
+
</TestResult>
|
|
77
|
+
)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
describe('<TestResult/>', () => {
|
|
81
|
+
function mountStory() {
|
|
82
|
+
mount(
|
|
83
|
+
<div className="p-[16px]">
|
|
84
|
+
{TestResults.map((result) => (
|
|
85
|
+
<TestResultSut {...result} key={result.id} />
|
|
86
|
+
))}
|
|
87
|
+
</div>,
|
|
88
|
+
)
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
assertions(mountStory)
|
|
92
|
+
})
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type TestResultData } from '@cypress-design/constants-testresult';
|
|
3
|
+
export interface TestResultProps extends TestResultData {
|
|
4
|
+
className?: string;
|
|
5
|
+
groups?: React.ReactNode;
|
|
6
|
+
}
|
|
7
|
+
export declare const TestResult: React.FC<TestResultProps & React.HTMLProps<HTMLDivElement>>;
|
|
8
|
+
export default TestResult;
|
|
9
|
+
//# sourceMappingURL=TestResult.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestResult.d.ts","sourceRoot":"./","sources":["TestResult.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,sCAAsC,CAAA;AAS7C,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACzB;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAC/B,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAuHlD,CAAA;AAED,eAAe,UAAU,CAAA"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"./","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
|