@nypl/design-system-react-components 0.25.2 → 0.25.6

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.
Files changed (238) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/README.md +47 -11
  3. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +4 -0
  4. package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +1 -0
  5. package/dist/components/Button/Button.d.ts +9 -8
  6. package/dist/components/Button/ButtonTypes.d.ts +2 -1
  7. package/dist/components/Card/Card.d.ts +36 -52
  8. package/dist/components/Card/CardTypes.d.ts +0 -15
  9. package/dist/components/Checkbox/Checkbox.d.ts +8 -9
  10. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +2 -2
  11. package/dist/components/DatePicker/DatePicker.d.ts +36 -36
  12. package/dist/components/Fieldset/Fieldset.d.ts +25 -0
  13. package/dist/components/HelperErrorText/HelperErrorText.d.ts +4 -0
  14. package/dist/components/HorizontalRule/HorizontalRule.d.ts +10 -3
  15. package/dist/components/Icons/Icon.d.ts +4 -0
  16. package/dist/components/Icons/IconSvgs.d.ts +11 -0
  17. package/dist/components/Icons/IconTypes.d.ts +11 -0
  18. package/dist/components/Image/Image.d.ts +19 -9
  19. package/dist/components/Image/ImageTypes.d.ts +20 -0
  20. package/dist/components/Link/Link.d.ts +4 -0
  21. package/dist/components/List/List.d.ts +7 -1
  22. package/dist/components/Notification/Notification.d.ts +6 -4
  23. package/dist/components/Pagination/Pagination.d.ts +16 -13
  24. package/dist/components/Pagination/Pagination.stories.d.ts +2 -0
  25. package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +29 -0
  26. package/dist/components/ProgressIndicator/ProgressIndicatorTypes.d.ts +8 -0
  27. package/dist/components/RadioGroup/RadioGroup.d.ts +2 -2
  28. package/dist/components/SearchBar/SearchBar.d.ts +3 -3
  29. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +18 -14
  30. package/dist/components/Slider/Slider.d.ts +57 -0
  31. package/dist/components/Tabs/Tabs.d.ts +1 -1
  32. package/dist/components/TextInput/TextInput.d.ts +10 -0
  33. package/dist/design-system-react-components.cjs.development.js +3058 -936
  34. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  35. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  36. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  37. package/dist/design-system-react-components.esm.js +3049 -921
  38. package/dist/design-system-react-components.esm.js.map +1 -1
  39. package/dist/index.d.ts +12 -6
  40. package/dist/resources.scss +180 -170
  41. package/dist/styles.css +1 -1
  42. package/dist/theme/components/breadcrumb.d.ts +9 -0
  43. package/dist/theme/components/button.d.ts +22 -8
  44. package/dist/theme/components/card.d.ts +168 -0
  45. package/dist/theme/components/checkbox.d.ts +5 -1
  46. package/dist/theme/components/checkboxGroup.d.ts +12 -0
  47. package/dist/theme/components/datePicker.d.ts +16 -0
  48. package/dist/theme/components/fieldset.d.ts +27 -0
  49. package/dist/theme/components/global.d.ts +23 -13
  50. package/dist/theme/components/globalMixins.d.ts +9 -1
  51. package/dist/theme/components/heading.d.ts +5 -0
  52. package/dist/theme/components/image.d.ts +31 -0
  53. package/dist/theme/components/label.d.ts +5 -3
  54. package/dist/theme/components/link.d.ts +4 -0
  55. package/dist/theme/components/list.d.ts +5 -1
  56. package/dist/theme/components/notification.d.ts +4 -14
  57. package/dist/theme/components/pagination.d.ts +19 -0
  58. package/dist/theme/components/progressIndicator.d.ts +50 -0
  59. package/dist/theme/components/radioGroup.d.ts +12 -0
  60. package/dist/theme/components/select.d.ts +11 -2
  61. package/dist/theme/components/skeletonLoader.d.ts +98 -0
  62. package/dist/theme/components/slider.d.ts +51 -0
  63. package/dist/theme/components/textInput.d.ts +8 -0
  64. package/dist/theme/foundations/breakpoints.d.ts +8 -8
  65. package/dist/theme/foundations/global.d.ts +6 -1
  66. package/package.json +72 -84
  67. package/src/__tests__/setup.ts +2 -2
  68. package/src/components/Accordion/Accordion.stories.mdx +39 -42
  69. package/src/components/Autosuggest/Autosuggest.stories.mdx +3 -3
  70. package/src/components/Autosuggest/Autosuggest.stories.tsx +1 -0
  71. package/src/components/Autosuggest/_Autosuggest.scss +5 -5
  72. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +24 -8
  73. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +33 -0
  74. package/src/components/Breadcrumbs/Breadcrumbs.tsx +5 -1
  75. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +1 -0
  76. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +298 -1
  77. package/src/components/Button/Button.stories.mdx +15 -10
  78. package/src/components/Button/Button.test.tsx +21 -7
  79. package/src/components/Button/Button.tsx +18 -33
  80. package/src/components/Button/ButtonTypes.tsx +1 -0
  81. package/src/components/Button/__snapshots__/Button.test.tsx.snap +41 -10
  82. package/src/components/Card/Card.stories.mdx +296 -259
  83. package/src/components/Card/Card.test.tsx +156 -84
  84. package/src/components/Card/Card.tsx +195 -145
  85. package/src/components/Card/CardTypes.tsx +0 -17
  86. package/src/components/Card/__snapshots__/Card.test.tsx.snap +410 -0
  87. package/src/components/CardEdition/CardEdition.stories.tsx +15 -47
  88. package/src/components/CardEdition/_CardEdition.scss +22 -23
  89. package/src/components/Chakra/Box.stories.mdx +14 -15
  90. package/src/components/Chakra/Center.stories.mdx +15 -8
  91. package/src/components/Chakra/Grid.stories.mdx +16 -7
  92. package/src/components/Chakra/Stack.stories.mdx +35 -18
  93. package/src/components/Checkbox/Checkbox.stories.mdx +33 -11
  94. package/src/components/Checkbox/Checkbox.test.tsx +30 -3
  95. package/src/components/Checkbox/Checkbox.tsx +27 -27
  96. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +90 -2
  97. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +82 -2
  98. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +1 -1
  99. package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -15
  100. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +44 -80
  101. package/src/components/DatePicker/DatePicker.stories.mdx +163 -62
  102. package/src/components/DatePicker/DatePicker.test.tsx +248 -65
  103. package/src/components/DatePicker/DatePicker.tsx +158 -130
  104. package/src/components/DatePicker/_DatePicker.scss +33 -67
  105. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +818 -0
  106. package/src/components/Fieldset/Fieldset.stories.mdx +55 -0
  107. package/src/components/Fieldset/Fieldset.test.tsx +125 -0
  108. package/src/components/Fieldset/Fieldset.tsx +52 -0
  109. package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +68 -0
  110. package/src/components/Form/Form.stories.mdx +4 -5
  111. package/src/components/Form/Form.tsx +1 -0
  112. package/src/components/Grid/SimpleGrid.stories.mdx +32 -39
  113. package/src/components/Grid/SimpleGrid.test.tsx +4 -4
  114. package/src/components/Heading/Heading.stories.mdx +3 -4
  115. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +1 -1
  116. package/src/components/HelperErrorText/HelperErrorText.tsx +5 -1
  117. package/src/components/Hero/HeroTypes.tsx +1 -0
  118. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +7 -7
  119. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +6 -5
  120. package/src/components/HorizontalRule/HorizontalRule.test.tsx +17 -0
  121. package/src/components/HorizontalRule/HorizontalRule.tsx +21 -4
  122. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +5 -5
  123. package/src/components/Icons/Icon.stories.mdx +11 -3
  124. package/src/components/Icons/Icon.test.tsx +18 -0
  125. package/src/components/Icons/Icon.tsx +6 -0
  126. package/src/components/Icons/IconSvgs.tsx +22 -0
  127. package/src/components/Icons/IconTypes.tsx +11 -0
  128. package/src/components/Image/Image.stories.mdx +220 -0
  129. package/src/components/Image/Image.test.tsx +131 -29
  130. package/src/components/Image/Image.tsx +84 -56
  131. package/src/components/Image/ImageTypes.ts +22 -0
  132. package/src/components/Image/__snapshots__/Image.test.tsx.snap +190 -0
  133. package/src/components/Input/Input.stories.tsx +20 -64
  134. package/src/components/Input/_Input.scss +23 -14
  135. package/src/components/Link/Link.tsx +4 -1
  136. package/src/components/List/List.stories.mdx +1 -1
  137. package/src/components/List/List.tsx +11 -4
  138. package/src/components/Modal/Modal.stories.mdx +3 -3
  139. package/src/components/Modal/_Modal.scss +2 -2
  140. package/src/components/Notification/Notification.stories.mdx +1 -3
  141. package/src/components/Notification/Notification.tsx +24 -9
  142. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +2 -0
  143. package/src/components/Pagination/Pagination.stories.mdx +26 -27
  144. package/src/components/Pagination/Pagination.stories.tsx +11 -16
  145. package/src/components/Pagination/Pagination.test.tsx +276 -146
  146. package/src/components/Pagination/Pagination.tsx +174 -154
  147. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +285 -0
  148. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +292 -0
  149. package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +225 -0
  150. package/src/components/ProgressIndicator/ProgressIndicator.tsx +126 -0
  151. package/src/components/ProgressIndicator/ProgressIndicatorTypes.ts +8 -0
  152. package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +357 -0
  153. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +3 -0
  154. package/src/components/RadioGroup/RadioGroup.stories.mdx +3 -4
  155. package/src/components/RadioGroup/RadioGroup.tsx +11 -16
  156. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +39 -71
  157. package/src/components/SearchBar/SearchBar.Test.tsx +66 -21
  158. package/src/components/SearchBar/SearchBar.stories.mdx +114 -10
  159. package/src/components/SearchBar/SearchBar.tsx +15 -5
  160. package/src/components/Select/SelectTypes.tsx +1 -0
  161. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +28 -59
  162. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +97 -177
  163. package/src/components/SkeletonLoader/SkeletonLoader.tsx +74 -71
  164. package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +739 -0
  165. package/src/components/Slider/Slider.stories.mdx +529 -0
  166. package/src/components/Slider/Slider.test.tsx +653 -0
  167. package/src/components/Slider/Slider.tsx +303 -0
  168. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +1946 -0
  169. package/src/components/StyleGuide/Bidirectionality.stories.mdx +1 -1
  170. package/src/components/StyleGuide/Breakpoints.stories.mdx +21 -7
  171. package/src/components/StyleGuide/Buttons.stories.mdx +69 -15
  172. package/src/components/StyleGuide/ColorCard.tsx +0 -1
  173. package/src/components/StyleGuide/DesignTokens.stories.mdx +170 -0
  174. package/src/components/StyleGuide/Iconography.stories.mdx +51 -62
  175. package/src/components/Tabs/Tabs.tsx +5 -5
  176. package/src/components/Template/Template.stories.mdx +11 -16
  177. package/src/components/TextInput/TextInput.stories.mdx +1 -1
  178. package/src/components/TextInput/TextInput.tsx +23 -6
  179. package/src/components/TextInput/TextInputTypes.tsx +2 -0
  180. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +2 -3
  181. package/src/docs/Chakra.stories.mdx +2 -2
  182. package/src/index.ts +20 -12
  183. package/src/resources.scss +5 -5
  184. package/src/styles/base/{_02-breakpoints.scss → _01-breakpoints.scss} +9 -10
  185. package/src/styles/base/{_03-mixins.scss → _02-mixins.scss} +16 -5
  186. package/src/styles/base/{_04-base.scss → _03-base.scss} +7 -2
  187. package/src/styles/base/{_05-focus.scss → _04-focus.scss} +0 -15
  188. package/src/styles/base/_place-holder.scss +14 -3
  189. package/src/styles/{03-space → space}/_space-inline.scss +14 -14
  190. package/src/styles/{03-space → space}/_space-inset.scss +10 -10
  191. package/src/styles/space/_space-stack.scss +116 -0
  192. package/src/styles.scss +13 -55
  193. package/src/theme/components/breadcrumb.ts +10 -0
  194. package/src/theme/components/button.ts +18 -12
  195. package/src/theme/components/card.ts +174 -0
  196. package/src/theme/components/checkbox.ts +7 -2
  197. package/src/theme/components/checkboxGroup.ts +8 -0
  198. package/src/theme/components/datePicker.ts +17 -0
  199. package/src/theme/components/fieldset.ts +18 -0
  200. package/src/theme/components/global.ts +26 -15
  201. package/src/theme/components/globalMixins.ts +9 -1
  202. package/src/theme/components/heading.ts +5 -0
  203. package/src/theme/components/image.ts +116 -0
  204. package/src/theme/components/label.ts +3 -10
  205. package/src/theme/components/link.ts +4 -0
  206. package/src/theme/components/list.ts +6 -3
  207. package/src/theme/components/notification.ts +12 -14
  208. package/src/theme/components/pagination.ts +20 -0
  209. package/src/theme/components/progressIndicator.ts +62 -0
  210. package/src/theme/components/radioGroup.ts +8 -0
  211. package/src/theme/components/select.ts +5 -2
  212. package/src/theme/components/skeletonLoader.ts +107 -0
  213. package/src/theme/components/slider.ts +79 -0
  214. package/src/theme/components/textInput.ts +2 -0
  215. package/src/theme/foundations/breakpoints.ts +8 -8
  216. package/src/theme/foundations/global.ts +6 -1
  217. package/src/theme/index.ts +22 -4
  218. package/src/utils/componentCategories.ts +4 -3
  219. package/dist/components/Image/Image.stories.d.ts +0 -18
  220. package/dist/theme/components/customCheckboxGroup.d.ts +0 -18
  221. package/dist/theme/components/customRadioGroup.d.ts +0 -18
  222. package/src/components/Button/_Button.scss +0 -32
  223. package/src/components/Card/_Card.scss +0 -308
  224. package/src/components/Image/Image.stories.tsx +0 -54
  225. package/src/components/Image/_Image.scss +0 -38
  226. package/src/components/Pagination/_Pagination.scss +0 -40
  227. package/src/components/SkeletonLoader/_SkeletonLoader.scss +0 -142
  228. package/src/styles/01-colors/_colors-brand.scss +0 -62
  229. package/src/styles/01-colors/_colors-utility.scss +0 -67
  230. package/src/styles/02-typography/_type-scale.css +0 -11
  231. package/src/styles/02-typography/_type-weight.css +0 -7
  232. package/src/styles/02-typography/_typefaces.css +0 -4
  233. package/src/styles/03-space/_space-stack.scss +0 -116
  234. package/src/styles/03-space/_space.css +0 -30
  235. package/src/styles/base/_card-grid.scss +0 -77
  236. package/src/styles/base/_typography.scss +0 -11
  237. package/src/theme/components/customCheckboxGroup.ts +0 -12
  238. package/src/theme/components/customRadioGroup.ts +0 -12
@@ -1,6 +1,7 @@
1
1
  import * as React from "react";
2
2
  import { render, screen } from "@testing-library/react";
3
3
  import { axe } from "jest-axe";
4
+ import renderer from "react-test-renderer";
4
5
 
5
6
  import Card, { CardHeading, CardContent, CardActions } from "./Card";
6
7
  import Link from "../Link/Link";
@@ -25,9 +26,34 @@ describe("Card Accessibility", () => {
25
26
  <CardContent>middle column content</CardContent>
26
27
  <CardActions>
27
28
  <Button
28
- onClick={function () {
29
- console.log(this);
30
- }}
29
+ onClick={() => {}}
30
+ id="button1"
31
+ buttonType={ButtonTypes.Primary}
32
+ type="submit"
33
+ >
34
+ Example CTA
35
+ </Button>
36
+ </CardActions>
37
+ </Card>
38
+ );
39
+ expect(await axe(container)).toHaveNoViolations();
40
+ });
41
+
42
+ it("passes axe accessibility test for the full-click feature", async () => {
43
+ const { container } = render(
44
+ <Card
45
+ id="cardID"
46
+ imageSrc="https://placeimg.com/400/200/arch"
47
+ imageAlt="Alt text"
48
+ mainActionLink="http://nypl.org"
49
+ >
50
+ <CardHeading level={HeadingLevels.Three} id="heading1">
51
+ The Card Heading
52
+ </CardHeading>
53
+ <CardContent>middle column content</CardContent>
54
+ <CardActions>
55
+ <Button
56
+ onClick={() => {}}
31
57
  id="button1"
32
58
  buttonType={ButtonTypes.Primary}
33
59
  type="submit"
@@ -44,7 +70,7 @@ describe("Card Accessibility", () => {
44
70
  describe("Card", () => {
45
71
  const regularCard = (
46
72
  <Card
47
- id="cardID"
73
+ id="regularCard"
48
74
  imageSrc="https://placeimg.com/400/200/arch"
49
75
  imageAlt="Alt text"
50
76
  >
@@ -54,9 +80,7 @@ describe("Card", () => {
54
80
  <CardContent>middle column content</CardContent>
55
81
  <CardActions>
56
82
  <Button
57
- onClick={function () {
58
- console.log(this);
59
- }}
83
+ onClick={() => {}}
60
84
  id="button1"
61
85
  buttonType={ButtonTypes.Primary}
62
86
  type="submit"
@@ -68,7 +92,7 @@ describe("Card", () => {
68
92
  );
69
93
  const cardWithExtendedStyles = (
70
94
  <Card
71
- id="card#1"
95
+ id="cardWithExtendedStyles"
72
96
  className="edition-card"
73
97
  imageSrc="https://placeimg.com/300/400/arch"
74
98
  imageAlt="Alt text"
@@ -85,27 +109,24 @@ describe("Card", () => {
85
109
  </div>
86
110
  </CardContent>
87
111
  <CardActions>
88
- <div className="edition-card-actions">
89
- <Link type={LinkTypes.Button} href="blah">
90
- Read Online
91
- </Link>
92
- <div className="edition-card__download">
93
- <Link href="#url" type={LinkTypes.Action}>
94
- <Icon
95
- name={IconNames.Download}
96
- align={IconAlign.Left}
97
- iconRotation={IconRotationTypes.Rotate0}
98
- />
99
- Download
100
- </Link>
101
- </div>
102
- </div>
112
+ <Link id="link-online" href="online" type={LinkTypes.Button}>
113
+ Read Online
114
+ </Link>
115
+ <Link id="link-icon" href="#url" type={LinkTypes.Action}>
116
+ <Icon
117
+ id="icon-cardWithExtendedStyles"
118
+ name={IconNames.Download}
119
+ align={IconAlign.Left}
120
+ iconRotation={IconRotationTypes.Rotate0}
121
+ />
122
+ Download
123
+ </Link>
103
124
  </CardActions>
104
125
  </Card>
105
126
  );
106
127
  const cardWithNoCTAs = (
107
128
  <Card
108
- id="card#1"
129
+ id="cardWithNoCTAs"
109
130
  className="edition-card"
110
131
  imageSrc="https://placeimg.com/300/400/arch"
111
132
  imageAlt="Alt text"
@@ -114,15 +135,15 @@ describe("Card", () => {
114
135
  The Card Heading
115
136
  </CardHeading>
116
137
  <CardContent>
117
- <div>Published in New York by Random House</div>
118
- <div>Written in English</div>
119
- <div>Under Creative Commons License</div>
138
+ <p>Published in New York by Random House</p>
139
+ <p>Written in English</p>
140
+ <p>Under Creative Commons License</p>
120
141
  </CardContent>
121
142
  </Card>
122
143
  );
123
144
  const cardWithNoContent = (
124
145
  <Card
125
- id="card#1"
146
+ id="cardWithNoContent"
126
147
  className="edition-card"
127
148
  imageSrc="https://placeimg.com/300/400/arch"
128
149
  imageAlt="Alt text"
@@ -135,26 +156,23 @@ describe("Card", () => {
135
156
  The Card Heading
136
157
  </CardHeading>
137
158
  <CardActions>
138
- <div className="edition-card-actions">
139
- <Link type={LinkTypes.Button} href="blah">
140
- Read Online
141
- </Link>
142
- <div className="edition-card__download">
143
- <Link href="#url" type={LinkTypes.Action}>
144
- <Icon
145
- name={IconNames.Download}
146
- align={IconAlign.Left}
147
- iconRotation={IconRotationTypes.Rotate0}
148
- />
149
- Download
150
- </Link>
151
- </div>
152
- </div>
159
+ <Link id="link-online" href="online" type={LinkTypes.Button}>
160
+ Read Online
161
+ </Link>
162
+ <Link id="link-icon" href="#url" type={LinkTypes.Action}>
163
+ <Icon
164
+ id="icon-cardWithNoContent"
165
+ name={IconNames.Download}
166
+ align={IconAlign.Left}
167
+ iconRotation={IconRotationTypes.Rotate0}
168
+ />
169
+ Download
170
+ </Link>
153
171
  </CardActions>
154
172
  </Card>
155
173
  );
156
174
  const cardWithNoImage = (
157
- <Card id="card#1" className="edition-card">
175
+ <Card id="cardWithNoImage" className="edition-card">
158
176
  <CardHeading
159
177
  level={HeadingLevels.Two}
160
178
  id="editioncardheading1"
@@ -164,71 +182,125 @@ describe("Card", () => {
164
182
  </CardHeading>
165
183
  <CardContent>middle column content</CardContent>
166
184
  <CardActions>
167
- <div className="edition-card-actions">
168
- <Link type={LinkTypes.Button} href="blah">
169
- Read Online
170
- </Link>
171
- <div className="edition-card__download">
172
- <Link href="#url" type={LinkTypes.Action}>
173
- <Icon
174
- name={IconNames.Download}
175
- align={IconAlign.Left}
176
- iconRotation={IconRotationTypes.Rotate0}
177
- />
178
- Download
179
- </Link>
180
- </div>
181
- </div>
185
+ <Link id="link-online" href="online" type={LinkTypes.Button}>
186
+ Read Online
187
+ </Link>
188
+ <Link id="link-icon" href="#url" type={LinkTypes.Action}>
189
+ <Icon
190
+ id="icon-cardWithNoImage"
191
+ name={IconNames.Download}
192
+ align={IconAlign.Left}
193
+ iconRotation={IconRotationTypes.Rotate0}
194
+ />
195
+ Download
196
+ </Link>
197
+ </CardActions>
198
+ </Card>
199
+ );
200
+ const cardFullClick = () => (
201
+ <Card
202
+ id="fullclick"
203
+ imageSrc="https://placeimg.com/400/200/arch"
204
+ imageAlt="Alt text"
205
+ mainActionLink="http://nypl.org"
206
+ >
207
+ <CardHeading level={HeadingLevels.Three} id="heading1">
208
+ The Card Heading
209
+ </CardHeading>
210
+ <CardContent>middle column content</CardContent>
211
+ <CardActions>
212
+ <Button
213
+ onClick={() => {}}
214
+ id="button1"
215
+ buttonType={ButtonTypes.Primary}
216
+ type="submit"
217
+ >
218
+ Example CTA
219
+ </Button>
182
220
  </CardActions>
183
221
  </Card>
184
222
  );
185
223
  let container;
186
224
 
187
- it("Generates a Card with a header, image, content, and CTAs", () => {
225
+ it("renders a Card with a header, image, content, and CTAs", () => {
188
226
  const utils = render(regularCard);
189
227
  container = utils.container;
190
- expect(container.querySelector(".chakra-heading")).toBeInTheDocument();
191
- expect(container.querySelector(".card__image")).toBeInTheDocument();
192
- expect(container.querySelector(".card-content")).toBeInTheDocument();
193
- expect(container.querySelector(".card-actions")).toBeInTheDocument();
228
+
229
+ expect(container.querySelector("h3")).toBeInTheDocument();
230
+ expect(screen.getByText("The Card Heading")).toBeInTheDocument();
231
+ expect(screen.getByRole("img")).toBeInTheDocument();
232
+ expect(screen.getByText("middle column content")).toBeInTheDocument();
233
+ expect(screen.getByText("Example CTA")).toBeInTheDocument();
194
234
  });
195
235
 
196
- it("Generates a Card with variable data", () => {
236
+ it("renders a Card with variable data", () => {
197
237
  const utils = render(cardWithExtendedStyles);
198
238
  container = utils.container;
199
239
 
200
240
  expect(container.querySelector("h2")).toBeInTheDocument();
201
- expect(container.querySelector(".card-content")).toBeInTheDocument();
241
+ expect(screen.getByText("The Card Heading")).toBeInTheDocument();
242
+ expect(screen.getByRole("img")).toBeInTheDocument();
243
+ expect(
244
+ screen.getByText(/Published in New York by Random House/i)
245
+ ).toBeInTheDocument();
246
+ expect(screen.getByText(/Read Online/i)).toBeInTheDocument();
202
247
  expect(screen.getAllByRole("link")).toHaveLength(2);
203
248
  });
204
249
 
205
250
  it("Generates a card without a CTA block if one isn't provided", () => {
206
- const utils = render(cardWithNoCTAs);
207
- container = utils.container;
251
+ render(cardWithNoCTAs);
208
252
 
209
- expect(container.querySelector(".chakra-heading")).toBeInTheDocument();
210
- expect(container.querySelector(".card__image")).toBeInTheDocument();
211
- expect(container.querySelector(".card-content")).toBeInTheDocument();
212
- expect(container.querySelector(".card-actions")).not.toBeInTheDocument();
253
+ expect(screen.getByText("The Card Heading")).toBeInTheDocument();
254
+ expect(screen.getByRole("img")).toBeInTheDocument();
255
+ expect(
256
+ screen.getByText(/Published in New York by Random House/i)
257
+ ).toBeInTheDocument();
258
+ expect(screen.queryByText(/Read Online/i)).not.toBeInTheDocument();
259
+ expect(screen.queryAllByRole("link")).toHaveLength(0);
213
260
  });
214
261
 
215
262
  it("Generates a card without a content block if one isn't provided", () => {
216
- const utils = render(cardWithNoContent);
217
- container = utils.container;
263
+ render(cardWithNoContent);
218
264
 
219
- expect(container.querySelector(".chakra-heading")).toBeInTheDocument();
220
- expect(container.querySelector(".card__image")).toBeInTheDocument();
221
- expect(container.querySelector(".card-content")).not.toBeInTheDocument();
222
- expect(container.querySelector(".card-actions")).toBeInTheDocument();
265
+ expect(screen.getByText("The Card Heading")).toBeInTheDocument();
266
+ expect(screen.getByRole("img")).toBeInTheDocument();
267
+ expect(
268
+ screen.queryByText(/Published in New York by Random House/i)
269
+ ).not.toBeInTheDocument();
270
+ expect(screen.getByText(/Read Online/i)).toBeInTheDocument();
271
+ expect(screen.getAllByRole("link")).toHaveLength(3);
223
272
  });
224
273
 
225
274
  it("Generates a card without an image block if no image is provided", () => {
226
- const utils = render(cardWithNoImage);
227
- container = utils.container;
275
+ render(cardWithNoImage);
276
+
277
+ expect(screen.getByText("The Card Heading")).toBeInTheDocument();
278
+ expect(screen.queryByRole("img")).not.toBeInTheDocument();
279
+ expect(screen.getByText("middle column content")).toBeInTheDocument();
280
+ expect(screen.getByText(/Read Online/i)).toBeInTheDocument();
281
+ });
282
+
283
+ it("Generates a card without an image block if no image is provided", () => {
284
+ render(cardFullClick());
285
+
286
+ expect(screen.getAllByRole("link")[0]).toHaveAttribute(
287
+ "href",
288
+ "http://nypl.org"
289
+ );
290
+ });
228
291
 
229
- expect(container.querySelector(".chakra-heading")).toBeInTheDocument();
230
- expect(container.querySelector(".card__image")).not.toBeInTheDocument();
231
- expect(container.querySelector(".card-content")).toBeInTheDocument();
232
- expect(container.querySelector(".card-actions")).toBeInTheDocument();
292
+ it("Renders the UI snapshot correctly", () => {
293
+ const regular = renderer.create(regularCard).toJSON();
294
+ const withExtendedStyles = renderer.create(cardWithExtendedStyles).toJSON();
295
+ const withNoCTAs = renderer.create(cardWithNoCTAs).toJSON();
296
+ const withNoContent = renderer.create(cardWithNoContent).toJSON();
297
+ const withNoImage = renderer.create(cardWithNoImage).toJSON();
298
+ const withFullClick = renderer.create(cardFullClick()).toJSON();
299
+ expect(regular).toMatchSnapshot();
300
+ expect(withExtendedStyles).toMatchSnapshot();
301
+ expect(withNoCTAs).toMatchSnapshot();
302
+ expect(withNoContent).toMatchSnapshot();
303
+ expect(withNoImage).toMatchSnapshot();
304
+ expect(withFullClick).toMatchSnapshot();
233
305
  });
234
306
  });