@nypl/design-system-react-components 0.25.0 → 0.25.1

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 (236) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/components/Accordion/Accordion.d.ts +14 -14
  3. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +11 -14
  4. package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +6 -0
  5. package/dist/components/Button/ButtonTypes.d.ts +2 -1
  6. package/dist/components/Card/Card.d.ts +1 -1
  7. package/dist/components/Card/CardTypes.d.ts +2 -2
  8. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +43 -0
  9. package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +4 -0
  10. package/dist/components/DatePicker/DatePicker.d.ts +3 -3
  11. package/dist/components/Form/Form.d.ts +13 -8
  12. package/dist/components/Form/FormTypes.d.ts +2 -8
  13. package/dist/components/Grid/GridTypes.d.ts +9 -0
  14. package/dist/components/Grid/SimpleGrid.d.ts +14 -0
  15. package/dist/components/Heading/Heading.d.ts +4 -4
  16. package/dist/components/Hero/Hero.d.ts +19 -14
  17. package/dist/components/Hero/HeroTypes.d.ts +10 -5
  18. package/dist/components/Icons/Icon.d.ts +13 -16
  19. package/dist/components/Icons/IconTypes.d.ts +78 -64
  20. package/dist/components/Label/Label.d.ts +5 -17
  21. package/dist/components/Link/Link.d.ts +8 -12
  22. package/dist/components/SearchBar/SearchBar.d.ts +45 -27
  23. package/dist/components/Select/Select.d.ts +32 -35
  24. package/dist/components/Select/SelectTypes.d.ts +4 -0
  25. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +1 -1
  26. package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +2 -2
  27. package/dist/components/StatusBadge/StatusBadge.d.ts +8 -6
  28. package/dist/components/StatusBadge/StatusBadgeTypes.d.ts +5 -0
  29. package/dist/components/Template/Template.d.ts +91 -0
  30. package/dist/components/Text/Text.d.ts +16 -0
  31. package/dist/components/Text/TextTypes.d.ts +6 -0
  32. package/dist/components/TextInput/TextInput.d.ts +32 -31
  33. package/dist/components/TextInput/TextInputTypes.d.ts +5 -0
  34. package/dist/design-system-react-components.cjs.development.js +2597 -1170
  35. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  36. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  37. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  38. package/dist/design-system-react-components.esm.js +2580 -1173
  39. package/dist/design-system-react-components.esm.js.map +1 -1
  40. package/dist/index.d.ts +8 -1
  41. package/dist/styles.css +1 -1
  42. package/dist/theme/components/accordion.d.ts +25 -0
  43. package/dist/theme/components/breadcrumb.d.ts +90 -0
  44. package/dist/theme/components/button.d.ts +17 -7
  45. package/dist/theme/components/checkbox.d.ts +7 -7
  46. package/dist/theme/components/customCheckboxGroup.d.ts +18 -0
  47. package/dist/theme/components/customRadioGroup.d.ts +4 -3
  48. package/dist/theme/components/global.d.ts +55 -0
  49. package/dist/theme/components/globalMixins.d.ts +15 -0
  50. package/dist/theme/components/heading.d.ts +50 -20
  51. package/dist/theme/components/hero.d.ts +492 -0
  52. package/dist/theme/components/icon.d.ts +13 -0
  53. package/dist/theme/components/label.d.ts +16 -0
  54. package/dist/theme/components/link.d.ts +45 -0
  55. package/dist/theme/components/radio.d.ts +8 -7
  56. package/dist/theme/components/searchBar.d.ts +20 -0
  57. package/dist/theme/components/select.d.ts +58 -0
  58. package/dist/theme/components/statusBadge.d.ts +25 -0
  59. package/dist/theme/components/tabs.d.ts +9 -9
  60. package/dist/theme/components/template.d.ts +105 -0
  61. package/dist/theme/components/text.d.ts +20 -0
  62. package/dist/theme/components/textInput.d.ts +105 -0
  63. package/dist/theme/foundations/global.d.ts +3 -0
  64. package/dist/theme/foundations/shadows.d.ts +4 -0
  65. package/dist/utils/utils.d.ts +6 -0
  66. package/package.json +3 -2
  67. package/src/components/Accordion/Accordion.stories.mdx +227 -33
  68. package/src/components/Accordion/Accordion.test.tsx +135 -19
  69. package/src/components/Accordion/Accordion.tsx +81 -56
  70. package/src/components/Autosuggest/Autosuggest.stories.mdx +1 -1
  71. package/src/components/Autosuggest/Autosuggest.stories.tsx +1 -1
  72. package/src/components/Autosuggest/_Autosuggest.scss +2 -2
  73. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +46 -52
  74. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +31 -25
  75. package/src/components/Breadcrumbs/Breadcrumbs.tsx +71 -73
  76. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +6 -0
  77. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +100 -0
  78. package/src/components/Button/Button.stories.mdx +31 -27
  79. package/src/components/Button/Button.test.tsx +17 -5
  80. package/src/components/Button/ButtonTypes.tsx +1 -0
  81. package/src/components/Button/_Button.scss +3 -27
  82. package/src/components/Button/__snapshots__/Button.test.tsx.snap +11 -0
  83. package/src/components/Card/Card.stories.mdx +24 -20
  84. package/src/components/Card/Card.test.tsx +13 -19
  85. package/src/components/Card/Card.tsx +1 -1
  86. package/src/components/Card/CardTypes.tsx +2 -2
  87. package/src/components/Card/_Card.scss +1 -1
  88. package/src/components/CardEdition/CardEdition.stories.tsx +11 -6
  89. package/src/components/CardEdition/CardEdition.test.tsx +23 -31
  90. package/src/components/CardEdition/_CardEdition.scss +2 -2
  91. package/src/components/Chakra/Center.stories.mdx +31 -14
  92. package/src/components/Chakra/Grid.stories.mdx +79 -0
  93. package/src/components/Chakra/Stack.stories.mdx +4 -4
  94. package/src/components/Checkbox/Checkbox.tsx +9 -12
  95. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +2 -5
  96. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +249 -0
  97. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +345 -0
  98. package/src/components/CheckboxGroup/CheckboxGroup.tsx +148 -0
  99. package/src/components/CheckboxGroup/CheckboxGroupLayoutTypes.tsx +4 -0
  100. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +1360 -0
  101. package/src/components/DatePicker/DatePicker.test.tsx +4 -4
  102. package/src/components/DatePicker/DatePicker.tsx +13 -13
  103. package/src/components/DatePicker/_DatePicker.scss +1 -0
  104. package/src/components/Form/Form.stories.mdx +46 -21
  105. package/src/components/Form/Form.test.tsx +58 -45
  106. package/src/components/Form/Form.tsx +49 -21
  107. package/src/components/Form/FormTypes.tsx +3 -8
  108. package/src/components/Form/__snapshots__/Form.test.tsx.snap +24 -14
  109. package/src/components/Grid/GridTypes.tsx +9 -0
  110. package/src/components/Grid/SimpleGrid.stories.mdx +275 -0
  111. package/src/components/Grid/SimpleGrid.test.tsx +66 -0
  112. package/src/components/Grid/SimpleGrid.tsx +37 -0
  113. package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +8 -0
  114. package/src/components/Heading/Heading.stories.mdx +1 -0
  115. package/src/components/Heading/Heading.tsx +12 -6
  116. package/src/components/HelperErrorText/_HelperErrorText.scss +1 -1
  117. package/src/components/Hero/Hero.stories.mdx +188 -121
  118. package/src/components/Hero/Hero.test.tsx +537 -107
  119. package/src/components/Hero/Hero.tsx +79 -92
  120. package/src/components/Hero/HeroTypes.tsx +17 -5
  121. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +307 -0
  122. package/src/components/HorizontalRule/_HorizontalRule.scss +1 -1
  123. package/src/components/Icons/Icon.stories.mdx +83 -74
  124. package/src/components/Icons/Icon.test.tsx +30 -22
  125. package/src/components/Icons/Icon.tsx +63 -61
  126. package/src/components/Icons/IconTypes.tsx +80 -64
  127. package/src/components/Input/_Input.scss +2 -2
  128. package/src/components/Label/Label.stories.mdx +28 -7
  129. package/src/components/Label/Label.test.tsx +43 -12
  130. package/src/components/Label/Label.tsx +21 -34
  131. package/src/components/Label/__snapshots__/Label.test.tsx.snap +41 -0
  132. package/src/components/Link/Link.stories.mdx +41 -41
  133. package/src/components/Link/Link.test.tsx +33 -44
  134. package/src/components/Link/Link.tsx +114 -100
  135. package/src/components/List/List.stories.mdx +0 -2
  136. package/src/components/List/List.stories.tsx +5 -5
  137. package/src/components/List/_List.scss +3 -3
  138. package/src/components/Modal/_Modal.scss +1 -1
  139. package/src/components/Notification/Notification.stories.mdx +12 -1
  140. package/src/components/Notification/Notification.test.tsx +3 -16
  141. package/src/components/Notification/Notification.tsx +9 -10
  142. package/src/components/Notification/_Notification.scss +4 -4
  143. package/src/components/Pagination/Pagination.test.tsx +16 -10
  144. package/src/components/RadioGroup/RadioGroup.stories.mdx +1 -1
  145. package/src/components/RadioGroup/RadioGroup.tsx +2 -10
  146. package/src/components/SearchBar/SearchBar.Test.tsx +151 -16
  147. package/src/components/SearchBar/SearchBar.stories.mdx +189 -219
  148. package/src/components/SearchBar/SearchBar.tsx +151 -46
  149. package/src/components/Select/Select.stories.mdx +188 -170
  150. package/src/components/Select/Select.test.tsx +125 -380
  151. package/src/components/Select/Select.tsx +118 -165
  152. package/src/components/Select/SelectTypes.tsx +4 -0
  153. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +13 -25
  154. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +7 -7
  155. package/src/components/SkeletonLoader/SkeletonLoader.tsx +4 -2
  156. package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +2 -2
  157. package/src/components/SkeletonLoader/_SkeletonLoader.scss +3 -3
  158. package/src/components/StatusBadge/StatusBadge.stories.mdx +91 -0
  159. package/src/components/StatusBadge/StatusBadge.test.tsx +35 -7
  160. package/src/components/StatusBadge/StatusBadge.tsx +24 -25
  161. package/src/components/StatusBadge/StatusBadgeTypes.tsx +5 -0
  162. package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +28 -0
  163. package/src/components/StyleGuide/Bidirectionality.stories.mdx +16 -16
  164. package/src/components/StyleGuide/Buttons.stories.mdx +15 -15
  165. package/src/components/StyleGuide/Colors.stories.mdx +336 -0
  166. package/src/components/StyleGuide/Iconography.stories.mdx +88 -90
  167. package/src/components/StyleGuide/UIDocCard.tsx +1 -1
  168. package/src/components/Tabs/Tabs.tsx +7 -9
  169. package/src/components/Template/Template.stories.mdx +574 -0
  170. package/src/components/Template/Template.test.tsx +124 -0
  171. package/src/components/Template/Template.tsx +226 -0
  172. package/src/components/Text/Text.stories.mdx +70 -0
  173. package/src/components/Text/Text.test.tsx +63 -0
  174. package/src/components/Text/Text.tsx +55 -0
  175. package/src/components/Text/TextTypes.tsx +6 -0
  176. package/src/components/Text/__snapshots__/Text.test.tsx.snap +33 -0
  177. package/src/components/TextInput/TextInput.stories.mdx +89 -90
  178. package/src/components/TextInput/TextInput.test.tsx +65 -86
  179. package/src/components/TextInput/TextInput.tsx +101 -95
  180. package/src/components/TextInput/TextInputTypes.tsx +6 -0
  181. package/src/components/VideoPlayer/_VideoPlayer.scss +1 -1
  182. package/src/docs/Chakra.stories.mdx +4 -4
  183. package/src/docs/Intro.stories.mdx +15 -13
  184. package/src/index.ts +20 -0
  185. package/src/styles/01-colors/_colors-brand.scss +6 -0
  186. package/src/styles/01-colors/_colors-utility.scss +14 -12
  187. package/src/styles/base/_04-base.scss +2 -1
  188. package/src/styles/base/_place-holder.scss +1 -1
  189. package/src/styles.scss +10 -12
  190. package/src/theme/components/accordion.ts +30 -0
  191. package/src/theme/components/breadcrumb.ts +77 -0
  192. package/src/theme/components/button.ts +77 -63
  193. package/src/theme/components/checkbox.ts +15 -27
  194. package/src/theme/components/customCheckboxGroup.ts +12 -0
  195. package/src/theme/components/customRadioGroup.ts +4 -10
  196. package/src/theme/components/global.ts +71 -0
  197. package/src/theme/components/globalMixins.ts +16 -0
  198. package/src/theme/components/heading.ts +15 -8
  199. package/src/theme/components/hero.ts +239 -0
  200. package/src/theme/components/icon.ts +79 -0
  201. package/src/theme/components/label.ts +17 -0
  202. package/src/theme/components/link.ts +47 -0
  203. package/src/theme/components/radio.ts +20 -31
  204. package/src/theme/components/searchBar.ts +21 -0
  205. package/src/theme/components/select.ts +50 -0
  206. package/src/theme/components/statusBadge.ts +27 -0
  207. package/src/theme/components/tabs.ts +72 -69
  208. package/src/theme/components/template.ts +114 -0
  209. package/src/theme/components/text.ts +31 -0
  210. package/src/theme/components/textInput.ts +61 -0
  211. package/src/theme/foundations/colors.ts +29 -13
  212. package/src/theme/foundations/global.ts +3 -0
  213. package/src/theme/foundations/shadows.ts +5 -0
  214. package/src/theme/index.ts +37 -7
  215. package/src/utils/componentCategories.ts +8 -2
  216. package/src/utils/utils.ts +13 -0
  217. package/dist/components/Accordion/Accordion.stories.d.ts +0 -6
  218. package/dist/components/StatusBadge/StatusBadge.stories.d.ts +0 -8
  219. package/dist/components/StyleGuide/Colors.stories.d.ts +0 -25
  220. package/dist/components/Template/Template.stories.d.ts +0 -30
  221. package/src/components/Accordion/Accordion.stories.tsx +0 -66
  222. package/src/components/Accordion/_Accordion.scss +0 -81
  223. package/src/components/Breadcrumbs/_Breadcrumbs.scss +0 -97
  224. package/src/components/Form/_Form.scss +0 -67
  225. package/src/components/Hero/_Hero.scss +0 -256
  226. package/src/components/Icons/_Icons.scss +0 -116
  227. package/src/components/Label/_Label.scss +0 -22
  228. package/src/components/Link/_Link.scss +0 -73
  229. package/src/components/SearchBar/_SearchBar.scss +0 -16
  230. package/src/components/Select/_Select.scss +0 -82
  231. package/src/components/StatusBadge/StatusBadge.stories.tsx +0 -34
  232. package/src/components/StatusBadge/_StatusBadge.scss +0 -23
  233. package/src/components/StyleGuide/Colors.stories.tsx +0 -289
  234. package/src/components/Template/Template.stories.tsx +0 -86
  235. package/src/components/Template/_Template.scss +0 -63
  236. package/src/components/TextInput/_TextInput.scss +0 -59
@@ -19,12 +19,12 @@ describe("Pagination with getPageHref", () => {
19
19
  const getPageHref = (page: number) => `page=${page}`;
20
20
 
21
21
  it("Renders a nav element with items and links", () => {
22
- render(
22
+ const { container } = render(
23
23
  <Pagination pageCount={20} currentPage={6} getPageHref={getPageHref} />
24
24
  );
25
25
 
26
26
  expect(screen.getByRole("navigation")).toBeInTheDocument();
27
- expect(screen.getByRole("list")).toBeInTheDocument();
27
+ expect(container.querySelector(".pagination__list")).toBeInTheDocument();
28
28
  // Previous/Next buttons + truncated item list = 11 total items
29
29
  expect(screen.getAllByRole("listitem")).toHaveLength(11);
30
30
  // Each element links to anotherpage.
@@ -53,7 +53,8 @@ describe("Pagination with getPageHref", () => {
53
53
  );
54
54
  const links = screen.getAllByRole("button");
55
55
  expect(links[0]).toHaveAttribute("aria-disabled");
56
- expect(links[0]).toHaveAttribute("class", "link pagination__link disabled");
56
+ const linkClass = links[0].getAttribute("class");
57
+ expect(linkClass).toContain("pagination__link disabled");
57
58
  });
58
59
 
59
60
  it("Next link is disabled when on the last page item", () => {
@@ -62,7 +63,8 @@ describe("Pagination with getPageHref", () => {
62
63
  );
63
64
  const links = screen.getAllByRole("button");
64
65
  expect(links[9]).toHaveAttribute("aria-disabled");
65
- expect(links[9]).toHaveAttribute("class", "link pagination__link disabled");
66
+ const linkClass = links[9].getAttribute("class");
67
+ expect(linkClass).toContain("pagination__link disabled");
66
68
  });
67
69
 
68
70
  it("Current page item has active class", () => {
@@ -70,7 +72,8 @@ describe("Pagination with getPageHref", () => {
70
72
  <Pagination pageCount={11} currentPage={5} getPageHref={getPageHref} />
71
73
  );
72
74
  const links = screen.getAllByRole("button");
73
- expect(links[5]).toHaveAttribute("class", "link pagination__link selected");
75
+ const linkClass = links[5].getAttribute("class");
76
+ expect(linkClass).toContain("pagination__link selected");
74
77
  });
75
78
 
76
79
  it("When pagination has 1 element, pagination is not shown", () => {
@@ -92,7 +95,7 @@ describe("Pagination with changeCallback", () => {
92
95
  const changeCallback = jest.fn();
93
96
 
94
97
  it("Renders a nav element with an unordered list of items", () => {
95
- render(
98
+ const { container } = render(
96
99
  <Pagination
97
100
  pageCount={11}
98
101
  currentPage={6}
@@ -100,7 +103,7 @@ describe("Pagination with changeCallback", () => {
100
103
  />
101
104
  );
102
105
  expect(screen.getByRole("navigation")).toBeInTheDocument();
103
- expect(screen.getByRole("list")).toBeInTheDocument();
106
+ expect(container.querySelector(".pagination__list")).toBeInTheDocument();
104
107
  expect(screen.getAllByRole("listitem")).toHaveLength(11);
105
108
  });
106
109
 
@@ -114,7 +117,8 @@ describe("Pagination with changeCallback", () => {
114
117
  );
115
118
  const links = screen.getAllByRole("button");
116
119
  expect(links[0]).toHaveAttribute("aria-disabled");
117
- expect(links[0]).toHaveAttribute("class", "link pagination__link disabled");
120
+ const linkClass = links[0].getAttribute("class");
121
+ expect(linkClass).toContain("pagination__link disabled");
118
122
  });
119
123
 
120
124
  it("Next link is disabled when on the last page item", () => {
@@ -127,7 +131,8 @@ describe("Pagination with changeCallback", () => {
127
131
  );
128
132
  const links = screen.getAllByRole("button");
129
133
  expect(links[9]).toHaveAttribute("aria-disabled");
130
- expect(links[9]).toHaveAttribute("class", "link pagination__link disabled");
134
+ const linkClass = links[9].getAttribute("class");
135
+ expect(linkClass).toContain("pagination__link disabled");
131
136
  });
132
137
 
133
138
  it("Current page item has active class", () => {
@@ -139,7 +144,8 @@ describe("Pagination with changeCallback", () => {
139
144
  />
140
145
  );
141
146
  const links = screen.getAllByRole("button");
142
- expect(links[5]).toHaveAttribute("class", "link pagination__link selected");
147
+ const linkClass = links[5].getAttribute("class");
148
+ expect(linkClass).toContain("pagination__link selected");
143
149
  });
144
150
 
145
151
  it("When page item is selected, runs the onPageChange callback", () => {
@@ -53,7 +53,7 @@ import Radio from "../Radio/Radio";
53
53
  isDisabled: false,
54
54
  isInvalid: false,
55
55
  isRequired: false,
56
- labelText: "Standar Radio Group",
56
+ labelText: "Standard Radio Group",
57
57
  layout: RadioGroupLayoutTypes.Column,
58
58
  name: "radio-story",
59
59
  optReqFlag: true,
@@ -11,6 +11,7 @@ import generateUUID from "../../helpers/generateUUID";
11
11
  import { spacing } from "../../theme/foundations/spacing";
12
12
  import { RadioGroupLayoutTypes } from "./RadioGroupLayoutTypes";
13
13
  import Radio from "../Radio/Radio";
14
+
14
15
  export interface RadioGroupProps {
15
16
  /** Any child node passed to the component. */
16
17
  children: React.ReactNode;
@@ -101,18 +102,9 @@ const RadioGroup = React.forwardRef<HTMLInputElement, RadioGroupProps>(
101
102
  const chakraRadioProps = getRadioProps({
102
103
  value: child.props.value,
103
104
  } as any);
104
- const newProps = { key: i };
105
105
 
106
106
  if (child !== undefined && child !== null) {
107
- if (isDisabled) {
108
- newProps["isDisabled"] = true;
109
- }
110
- if (isInvalid) {
111
- newProps["isInvalid"] = true;
112
- }
113
- if (isRequired) {
114
- newProps["isRequired"] = true;
115
- }
107
+ const newProps = { key: i, isDisabled, isInvalid, isRequired };
116
108
  if (child.props.value === defaultValue) {
117
109
  newProps["checked"] = true;
118
110
  }
@@ -2,15 +2,46 @@ import * as React from "react";
2
2
  import { render, screen } from "@testing-library/react";
3
3
  import { axe } from "jest-axe";
4
4
  import userEvent from "@testing-library/user-event";
5
+ import renderer from "react-test-renderer";
5
6
 
6
- import Button from "../Button/Button";
7
- import { ButtonTypes } from "../Button/ButtonTypes";
8
7
  import SearchBar from "./SearchBar";
9
8
 
9
+ const optionsGroup = [
10
+ "Art",
11
+ "Bushes",
12
+ "Clothing",
13
+ "Flowers",
14
+ "Fossils",
15
+ "Fruits",
16
+ "Furniture",
17
+ "Songs",
18
+ "Tools",
19
+ "Villagers",
20
+ ];
21
+ const selectProps = {
22
+ name: "nhItemSearch",
23
+ labelText: "Select a category",
24
+ optionsData: optionsGroup,
25
+ };
26
+ const textInputProps = {
27
+ labelText: "Item Search",
28
+ placeholder: "Item Search",
29
+ };
30
+ const helperErrorText = "Search for items in Animal Crossing New Horizons";
31
+ const invalidText = "Could not find the item :(";
32
+
10
33
  describe("SearchBar Accessibility", () => {
11
34
  it("passes axe accessibility test", async () => {
12
35
  const { container } = render(
13
- <SearchBar id="id" ariaLabel="searchbar" onSubmit={jest.fn()} />
36
+ <SearchBar
37
+ id="id"
38
+ labelText="Searchbar"
39
+ onSubmit={jest.fn()}
40
+ selectProps={selectProps}
41
+ textInputProps={textInputProps}
42
+ helperErrorText={helperErrorText}
43
+ invalidText={invalidText}
44
+ />
14
45
  );
15
46
  expect(await axe(container)).toHaveNoViolations();
16
47
  });
@@ -20,32 +51,136 @@ describe("SearchBar", () => {
20
51
  const searchBarSubmit = jest.fn();
21
52
  const buttonCallback = jest.fn();
22
53
 
23
- it("Renders SearchBar", () => {
54
+ it("renders the basic form", () => {
24
55
  render(
25
- <SearchBar id="id" ariaLabel="searchbar" onSubmit={searchBarSubmit} />
56
+ <SearchBar
57
+ id="id"
58
+ labelText="searchbar"
59
+ onSubmit={searchBarSubmit}
60
+ textInputProps={textInputProps}
61
+ helperErrorText={helperErrorText}
62
+ />
26
63
  );
27
64
  expect(screen.getByRole("search")).toBeInTheDocument();
28
65
  expect(screen.getByRole("search")).toHaveAttribute(
29
66
  "aria-label",
30
67
  "searchbar"
31
68
  );
69
+ expect(screen.getByPlaceholderText("Item Search")).toBeInTheDocument();
70
+ expect(screen.getByRole("button")).toBeInTheDocument();
71
+ });
72
+
73
+ it("renders an optional Select component", () => {
74
+ render(
75
+ <SearchBar
76
+ id="id"
77
+ labelText="searchbar"
78
+ onSubmit={searchBarSubmit}
79
+ selectProps={selectProps}
80
+ textInputProps={textInputProps}
81
+ helperErrorText={helperErrorText}
82
+ />
83
+ );
84
+ expect(screen.getByRole("combobox")).toBeInTheDocument();
85
+ expect(screen.getByLabelText("Select a category")).toBeInTheDocument();
86
+ });
87
+
88
+ it("renders the invalid text in the invalid state", () => {
89
+ render(
90
+ <SearchBar
91
+ id="id"
92
+ labelText="searchbar"
93
+ onSubmit={searchBarSubmit}
94
+ selectProps={selectProps}
95
+ textInputProps={textInputProps}
96
+ helperErrorText={helperErrorText}
97
+ invalidText={invalidText}
98
+ isInvalid
99
+ />
100
+ );
101
+ expect(screen.getByText(invalidText)).toBeInTheDocument();
102
+ expect(screen.queryByText(helperErrorText)).not.toBeInTheDocument();
32
103
  });
33
104
 
34
- it("Search Bar calls call back on Submit ", () => {
105
+ it("calls the callback function on submit ", () => {
35
106
  render(
36
- <SearchBar ariaLabel="searchBar" id="id" onSubmit={searchBarSubmit}>
37
- <Button
38
- buttonType={ButtonTypes.Primary}
39
- id="button"
40
- onClick={buttonCallback}
41
- type="submit"
42
- >
43
- Search
44
- </Button>
45
- </SearchBar>
107
+ <SearchBar
108
+ labelText="searchBar"
109
+ id="id"
110
+ onSubmit={searchBarSubmit}
111
+ selectProps={selectProps}
112
+ textInputProps={textInputProps}
113
+ helperErrorText={helperErrorText}
114
+ />
46
115
  );
47
116
  expect(searchBarSubmit).toHaveBeenCalledTimes(0);
117
+ expect(buttonCallback).toHaveBeenCalledTimes(0);
48
118
  userEvent.click(screen.getByRole("button"));
49
119
  expect(searchBarSubmit).toHaveBeenCalledTimes(1);
120
+ expect(buttonCallback).toHaveBeenCalledTimes(1);
121
+ });
122
+
123
+ it("Renders the UI snapshot correctly", () => {
124
+ const basic = renderer
125
+ .create(
126
+ <SearchBar
127
+ id="id"
128
+ labelText="searchbar"
129
+ onSubmit={jest.fn()}
130
+ textInputProps={textInputProps}
131
+ helperErrorText={helperErrorText}
132
+ />
133
+ )
134
+ .toJSON();
135
+ const withSelect = renderer
136
+ .create(
137
+ <SearchBar
138
+ id="id"
139
+ labelText="searchbar"
140
+ onSubmit={jest.fn()}
141
+ selectProps={selectProps}
142
+ textInputProps={textInputProps}
143
+ helperErrorText={helperErrorText}
144
+ />
145
+ )
146
+ .toJSON();
147
+ const withoutHelperText = renderer
148
+ .create(
149
+ <SearchBar
150
+ id="id"
151
+ labelText="searchbar"
152
+ onSubmit={jest.fn()}
153
+ textInputProps={textInputProps}
154
+ />
155
+ )
156
+ .toJSON();
157
+ const invalidState = renderer
158
+ .create(
159
+ <SearchBar
160
+ id="id"
161
+ labelText="searchbar"
162
+ onSubmit={jest.fn()}
163
+ textInputProps={textInputProps}
164
+ isInvalid
165
+ />
166
+ )
167
+ .toJSON();
168
+ const disabledState = renderer
169
+ .create(
170
+ <SearchBar
171
+ id="id"
172
+ labelText="searchbar"
173
+ onSubmit={jest.fn()}
174
+ textInputProps={textInputProps}
175
+ isDisabled
176
+ />
177
+ )
178
+ .toJSON();
179
+
180
+ expect(basic).toMatchSnapshot();
181
+ expect(withSelect).toMatchSnapshot();
182
+ expect(withoutHelperText).toMatchSnapshot();
183
+ expect(invalidState).toMatchSnapshot();
184
+ expect(disabledState).toMatchSnapshot();
50
185
  });
51
186
  });