@comicrelief/component-library 7.24.0 → 7.24.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.
Files changed (278) hide show
  1. package/.github/workflows/main.yml +22 -24
  2. package/dist/components/Atoms/Button/Button.js +21 -15
  3. package/dist/components/Atoms/Button/Button.test.js +3 -3
  4. package/dist/components/Atoms/ButtonWithStates/ButtonWithStates.js +19 -22
  5. package/dist/components/Atoms/Checkbox/Checkbox.js +42 -26
  6. package/dist/components/Atoms/Checkbox/Checkbox.test.js +3 -3
  7. package/dist/components/Atoms/Confetti/Confetti.js +20 -23
  8. package/dist/components/Atoms/Confetti/_TriggerConfetti.js +4 -11
  9. package/dist/components/Atoms/ErrorText/ErrorText.js +15 -11
  10. package/dist/components/Atoms/ErrorText/ErrorText.test.js +3 -3
  11. package/dist/components/Atoms/Icons/Arrow.js +16 -15
  12. package/dist/components/Atoms/Icons/AtSign.js +9 -9
  13. package/dist/components/Atoms/Icons/Chevron.js +16 -15
  14. package/dist/components/Atoms/Icons/Curve.js +16 -18
  15. package/dist/components/Atoms/Icons/Download.js +8 -8
  16. package/dist/components/Atoms/Icons/External.js +8 -8
  17. package/dist/components/Atoms/Icons/Favourite.js +8 -8
  18. package/dist/components/Atoms/Icons/Internal.js +8 -8
  19. package/dist/components/Atoms/Icons/index.js +8 -8
  20. package/dist/components/Atoms/Input/Input.js +38 -33
  21. package/dist/components/Atoms/Input/input.test.js +3 -3
  22. package/dist/components/Atoms/Label/Label.js +28 -23
  23. package/dist/components/Atoms/Link/Link.js +24 -29
  24. package/dist/components/Atoms/Link/Link.style.js +51 -40
  25. package/dist/components/Atoms/Link/Link.test.js +9 -9
  26. package/dist/components/Atoms/Logo/Logo.js +16 -18
  27. package/dist/components/Atoms/Logo/Logo.test.js +3 -3
  28. package/dist/components/Atoms/Pagination/Item/Item.js +7 -7
  29. package/dist/components/Atoms/Pagination/Item/Item.style.js +35 -28
  30. package/dist/components/Atoms/Pagination/List/List.js +21 -19
  31. package/dist/components/Atoms/Pagination/Pagination.js +41 -49
  32. package/dist/components/Atoms/Pagination/Pagination.test.js +54 -108
  33. package/dist/components/Atoms/Pagination/Utils/PaginationCalculator.js +15 -15
  34. package/dist/components/Atoms/Picture/Picture.js +34 -44
  35. package/dist/components/Atoms/Picture/Picture.test.js +5 -5
  36. package/dist/components/Atoms/RadioButton/RadioButton.js +35 -23
  37. package/dist/components/Atoms/RadioButton/RadioButton.test.js +3 -3
  38. package/dist/components/Atoms/RichText/RichText.js +9 -11
  39. package/dist/components/Atoms/RichText/RichText.test.js +4 -4
  40. package/dist/components/Atoms/Select/Select.js +56 -49
  41. package/dist/components/Atoms/Select/Select.test.js +3 -3
  42. package/dist/components/Atoms/SocialIcons/Icon/Icon.js +13 -13
  43. package/dist/components/Atoms/SocialIcons/SocialIcons.js +25 -23
  44. package/dist/components/Atoms/SocialIcons/SocialIcons.test.js +7 -7
  45. package/dist/components/Atoms/SocialIcons/Utils/Icons.js +3 -3
  46. package/dist/components/Atoms/SocialIcons/Utils/Links.js +19 -20
  47. package/dist/components/Atoms/SocialIcons/assets/X-white-Subtract.svg +3 -0
  48. package/dist/components/Atoms/Text/Text.js +62 -41
  49. package/dist/components/Atoms/Text/Text.test.js +11 -11
  50. package/dist/components/Atoms/TextArea/TextArea.js +18 -17
  51. package/dist/components/Atoms/TextArea/TextArea.test.js +3 -3
  52. package/dist/components/Atoms/TextInputWithDropdown/TextInputWithDropdown.js +69 -86
  53. package/dist/components/Atoms/TextInputWithDropdown/TextInputWithDropdown.style.js +23 -15
  54. package/dist/components/Atoms/TextInputWithDropdown/TextInputWithDropdown.test.js +15 -19
  55. package/dist/components/Molecules/Accordion/Accordion.js +35 -32
  56. package/dist/components/Molecules/Accordion/Accordion.test.js +3 -3
  57. package/dist/components/Molecules/ArticleTeaser/ArticleTeaser.js +81 -52
  58. package/dist/components/Molecules/ArticleTeaser/ArticleTeaser.test.js +5 -5
  59. package/dist/components/Molecules/Banner/Banner.js +21 -13
  60. package/dist/components/Molecules/Banner/Banner.test.js +3 -3
  61. package/dist/components/Molecules/Box/Box.js +33 -27
  62. package/dist/components/Molecules/Box/Box.test.js +5 -5
  63. package/dist/components/Molecules/Card/Card.js +22 -22
  64. package/dist/components/Molecules/Card/Card.test.js +5 -5
  65. package/dist/components/Molecules/CardDs/CardDs.js +80 -55
  66. package/dist/components/Molecules/CardDs/CardDs.test.js +3 -3
  67. package/dist/components/Molecules/Chip/Chip.js +8 -6
  68. package/dist/components/Molecules/Chip/Chip.style.js +48 -28
  69. package/dist/components/Molecules/Chip/Chip.test.js +4 -6
  70. package/dist/components/Molecules/Countdown/Countdown.js +28 -36
  71. package/dist/components/Molecules/Countdown/Countdown.style.js +3 -3
  72. package/dist/components/Molecules/Descriptor/Descriptor.js +32 -26
  73. package/dist/components/Molecules/Descriptor/Descriptor.test.js +5 -5
  74. package/dist/components/Molecules/DoubleCopy/DoubleCopy.js +6 -4
  75. package/dist/components/Molecules/DoubleCopy/DoubleCopy.style.js +7 -5
  76. package/dist/components/Molecules/DoubleCopy/DoubleCopy.test.js +4 -4
  77. package/dist/components/Molecules/HeroBanner/HeroBanner.js +13 -17
  78. package/dist/components/Molecules/InfoBanner/InfoBanner.js +22 -18
  79. package/dist/components/Molecules/InfoBanner/InfoBanner.test.js +10 -10
  80. package/dist/components/Molecules/Logos/Logos.js +26 -14
  81. package/dist/components/Molecules/Logos/Logos.md +5 -0
  82. package/dist/components/Molecules/Lookup/Lookup.js +49 -84
  83. package/dist/components/Molecules/PartnerLink/PartnerLink.js +10 -11
  84. package/dist/components/Molecules/PartnerLink/PartnerLink.style.js +15 -9
  85. package/dist/components/Molecules/PartnerLink/PartnerLink.test.js +3 -3
  86. package/dist/components/Molecules/Promo/Promo.js +30 -36
  87. package/dist/components/Molecules/Promo/Promo.style.js +44 -31
  88. package/dist/components/Molecules/Promo/Promo.test.js +6 -6
  89. package/dist/components/Molecules/Promo/_ProgressRing.js +13 -19
  90. package/dist/components/Molecules/Promo/_PromoVideo.js +25 -34
  91. package/dist/components/Molecules/Promo/_PromoVideoButton.js +7 -7
  92. package/dist/components/Molecules/Promo/_PromoVideoButton.style.js +68 -41
  93. package/dist/components/Molecules/SchoolLookup/SchoolLookup.js +29 -52
  94. package/dist/components/Molecules/SchoolLookup/SchoolLookup.test.js +4 -4
  95. package/dist/components/Molecules/SearchInput/SearchInput.js +8 -8
  96. package/dist/components/Molecules/SearchInput/SearchInput.style.js +22 -14
  97. package/dist/components/Molecules/SearchInput/SearchInput.test.js +4 -4
  98. package/dist/components/Molecules/SearchResult/SearchResult.js +43 -29
  99. package/dist/components/Molecules/SearchResult/SearchResult.test.js +9 -9
  100. package/dist/components/Molecules/ShareButton/ShareButton.js +22 -26
  101. package/dist/components/Molecules/ShareButton/ShareButton.style.js +5 -5
  102. package/dist/components/Molecules/ShareButton/ShareButton.test.js +3 -3
  103. package/dist/components/Molecules/ShareButton/assets/ShareIcons.js +2 -2
  104. package/dist/components/Molecules/SimpleSchoolLookup/SimpleSchoolLookup.js +28 -55
  105. package/dist/components/Molecules/SingleMessage/SingleMessage.js +99 -123
  106. package/dist/components/Molecules/SingleMessage/SingleMessage.style.js +132 -81
  107. package/dist/components/Molecules/SingleMessage/SingleMessage.test.js +13 -13
  108. package/dist/components/Molecules/SingleMessageDS/SingleMessageDs.js +31 -40
  109. package/dist/components/Molecules/SingleMessageDS/SingleMessageDs.style.js +85 -49
  110. package/dist/components/Molecules/SingleMessageDS/SingleMessageDs.test.js +3 -3
  111. package/dist/components/Molecules/Typeahead/Typeahead.js +47 -84
  112. package/dist/components/Molecules/Typeahead/Typeahead.test.js +12 -35
  113. package/dist/components/Molecules/VideoBanner/VideoBanner.js +20 -25
  114. package/dist/components/Molecules/VideoBanner/VideoBanner.test.js +4 -4
  115. package/dist/components/Organisms/CookieBanner/CookieBanner.js +7 -5
  116. package/dist/components/Organisms/CookieBanner/CookieBanner.style.js +21 -13
  117. package/dist/components/Organisms/CookieBanner/CookieBanner.test.js +5 -5
  118. package/dist/components/Organisms/Donate/Donate.js +34 -37
  119. package/dist/components/Organisms/Donate/Donate.style.js +85 -53
  120. package/dist/components/Organisms/Donate/Donate.test.js +10 -10
  121. package/dist/components/Organisms/Donate/Form/Form.js +53 -78
  122. package/dist/components/Organisms/Donate/Form/PopUpComponent.js +25 -30
  123. package/dist/components/Organisms/Donate/GivingSelector/GivingSelector.js +11 -13
  124. package/dist/components/Organisms/Donate/GivingSelector/GivingSelector.style.js +38 -22
  125. package/dist/components/Organisms/Donate/MoneyBuy/MoneyBuy.js +47 -30
  126. package/dist/components/Organisms/EmailSignUp/EmailSignUp.style.js +63 -37
  127. package/dist/components/Organisms/EmailSignUp/EmailSignUp.test.js +12 -12
  128. package/dist/components/Organisms/EmailSignUp/EmailSignUpForm.js +23 -43
  129. package/dist/components/Organisms/EmailSignUp/_EmailSignUp.js +25 -21
  130. package/dist/components/Organisms/EmailSignUp/_EmailSignUpConfig.js +10 -9
  131. package/dist/components/Organisms/EmailSignUp/_TextInput.js +20 -18
  132. package/dist/components/Organisms/Footer/Footer.js +10 -10
  133. package/dist/components/Organisms/Footer/Footer.style.js +27 -21
  134. package/dist/components/Organisms/Footer/Footer.test.js +3 -3
  135. package/dist/components/Organisms/Footer/Nav/Nav.js +59 -70
  136. package/dist/components/Organisms/Footer/Nav/Nav.style.js +77 -43
  137. package/dist/components/Organisms/Header/Burger/BurgerMenu.js +6 -4
  138. package/dist/components/Organisms/Header/Burger/BurgerMenu.style.js +37 -21
  139. package/dist/components/Organisms/Header/Header.js +8 -8
  140. package/dist/components/Organisms/Header/Header.style.js +27 -19
  141. package/dist/components/Organisms/Header/Nav/Nav.js +39 -50
  142. package/dist/components/Organisms/Header/Nav/Nav.style.js +103 -57
  143. package/dist/components/Organisms/Header/header.test.js +1 -1
  144. package/dist/components/Organisms/ImpactSlider/ImpactMoneybuys.style.js +32 -29
  145. package/dist/components/Organisms/ImpactSlider/ImpactSlider.js +19 -22
  146. package/dist/components/Organisms/ImpactSlider/ImpactSlider.style.js +38 -24
  147. package/dist/components/Organisms/ImpactSlider/Slider.style.js +8 -14
  148. package/dist/components/Organisms/ImpactSlider/_ImpactMoneybuys.js +11 -11
  149. package/dist/components/Organisms/ImpactSlider/_Slider.js +9 -7
  150. package/dist/components/Organisms/ImpactSlider/_utils.js +11 -11
  151. package/dist/components/Organisms/MarketingPreferencesDS/MarketingPreferencesDS.style.js +61 -38
  152. package/dist/components/Organisms/MarketingPreferencesDS/MarketingPreferencesDSForm.js +24 -16
  153. package/dist/components/Organisms/MarketingPreferencesDS/_AssociatedFields.js +1 -1
  154. package/dist/components/Organisms/MarketingPreferencesDS/_CheckAnswer.js +20 -16
  155. package/dist/components/Organisms/MarketingPreferencesDS/_DefaultCopy.js +3 -3
  156. package/dist/components/Organisms/MarketingPreferencesDS/_MarketingPreferencesDS.js +46 -36
  157. package/dist/components/Organisms/MarketingPreferencesDS/_MarketingPrefsConfig.js +21 -34
  158. package/dist/components/Organisms/MarketingPreferencesDS/_TextInput.js +20 -18
  159. package/dist/components/Organisms/Membership/Form/Form.js +48 -81
  160. package/dist/components/Organisms/Membership/Membership.js +17 -15
  161. package/dist/components/Organisms/Membership/Membership.style.js +81 -51
  162. package/dist/components/Organisms/Membership/Membership.test.js +4 -4
  163. package/dist/components/Organisms/Membership/MoneyBox/MoneyBox.js +37 -26
  164. package/dist/hoc/shallowWithTheme.js +1 -1
  165. package/dist/index.js +67 -67
  166. package/dist/styleguide/CRLogo.js +2 -2
  167. package/dist/styleguide/StyleGuideRenderer.js +9 -7
  168. package/dist/styleguide/ThemeWrapper.js +5 -3
  169. package/dist/styleguide/data/data.js +3 -3
  170. package/dist/theme/crTheme/buttonColors.js +6 -5
  171. package/dist/theme/crTheme/colors.js +4 -3
  172. package/dist/theme/crTheme/fontSizes.js +4 -3
  173. package/dist/theme/crTheme/linkStyles.js +6 -5
  174. package/dist/theme/crTheme/theme.js +1 -1
  175. package/dist/theme/shared/breakpoint.js +4 -3
  176. package/dist/theme/shared/fontFamilies.js +5 -4
  177. package/dist/theme/shared/hideVisually.js +1 -1
  178. package/dist/theme/shared/size.js +4 -3
  179. package/dist/theme/shared/spacing.js +2 -2
  180. package/dist/theme/shared/zIndex.js +3 -3
  181. package/dist/theme/srTheme/buttonColors.js +6 -5
  182. package/dist/theme/srTheme/colors.js +4 -3
  183. package/dist/theme/srTheme/fontSizes.js +4 -3
  184. package/dist/theme/srTheme/linkStyles.js +6 -5
  185. package/dist/theme/srTheme/theme.js +1 -1
  186. package/dist/utils/Membership.js +30 -27
  187. package/dist/utils/ShareButton/sharePopUpHelper.js +8 -8
  188. package/dist/utils/ShareButton/shareTracking.js +1 -1
  189. package/dist/utils/ShareButton/shareUrlHelper.js +3 -3
  190. package/dist/utils/allowListed.js +3 -5
  191. package/dist/utils/allowListed.test.js +3 -3
  192. package/dist/utils/internalLinkHelper.js +8 -10
  193. package/dist/utils/navHelper.js +2 -2
  194. package/package.json +12 -9
  195. package/playwright/components/atoms/checkbox.spec.js +64 -0
  196. package/playwright/components/atoms/input.spec.js +158 -0
  197. package/playwright/components/atoms/label.spec.js +29 -0
  198. package/playwright/components/atoms/link.spec.js +48 -0
  199. package/playwright/components/atoms/radioButton.spec.js +30 -0
  200. package/playwright/components/atoms/select.spec.js +36 -0
  201. package/playwright/components/atoms/textArea.spec.js +39 -0
  202. package/playwright/components/atoms/textInputWithDropdown.spec.js +23 -0
  203. package/playwright/components/molecules/accordian.spec.js +20 -0
  204. package/playwright/components/molecules/schoolLookup.spec.js +26 -0
  205. package/playwright/components/molecules/searchInput.spec.js +24 -0
  206. package/playwright/components/molecules/shareButton.spec.js +32 -0
  207. package/playwright/components/molecules/simpleSchoolLookUp.spec.js +35 -0
  208. package/playwright/components/molecules/typeahead.spec.js +27 -0
  209. package/playwright/components/organisms/donate.spec.js +293 -0
  210. package/playwright/components/organisms/emailSignUpForm.spec.js +109 -0
  211. package/playwright/components/organisms/footer.spec.js +67 -0
  212. package/playwright/components/organisms/header.spec.js +82 -0
  213. package/playwright/components/organisms/impactSlider.spec.js +292 -0
  214. package/playwright/components/organisms/marketingPreferences.spec.js +220 -0
  215. package/playwright/components/organisms/membership.spec.js +47 -0
  216. package/playwright.config.js +49 -0
  217. package/src/components/Atoms/SocialIcons/Utils/Icons.js +1 -1
  218. package/src/components/Atoms/SocialIcons/assets/X-white-Subtract.svg +3 -0
  219. package/src/components/Molecules/Logos/Logos.js +18 -6
  220. package/src/components/Molecules/Logos/Logos.md +5 -0
  221. package/src/components/Organisms/ImpactSlider/_ImpactMoneybuys.js +3 -4
  222. package/src/components/Organisms/Membership/Membership.test.js +1 -1
  223. package/cypress/e2e/components/atoms/button.cy.js +0 -102
  224. package/cypress/e2e/components/atoms/buttonWithStates.cy.js +0 -47
  225. package/cypress/e2e/components/atoms/checkbox.cy.js +0 -70
  226. package/cypress/e2e/components/atoms/confetti.cy.js +0 -46
  227. package/cypress/e2e/components/atoms/errorText.cy.js +0 -45
  228. package/cypress/e2e/components/atoms/input.cy.js +0 -157
  229. package/cypress/e2e/components/atoms/label.cy.js +0 -93
  230. package/cypress/e2e/components/atoms/link.cy.js +0 -190
  231. package/cypress/e2e/components/atoms/logo.cy.js +0 -132
  232. package/cypress/e2e/components/atoms/pagination.cy.js +0 -191
  233. package/cypress/e2e/components/atoms/picture.cy.js +0 -130
  234. package/cypress/e2e/components/atoms/radioButton.cy.js +0 -76
  235. package/cypress/e2e/components/atoms/richText.cy.js +0 -70
  236. package/cypress/e2e/components/atoms/select.cy.js +0 -84
  237. package/cypress/e2e/components/atoms/socialIcons.cy.js +0 -162
  238. package/cypress/e2e/components/atoms/text.cy.js +0 -169
  239. package/cypress/e2e/components/atoms/textArea.cy.js +0 -89
  240. package/cypress/e2e/components/atoms/textInputWithDrop.cy.js +0 -76
  241. package/cypress/e2e/components/molecules/accordion.cy.js +0 -67
  242. package/cypress/e2e/components/molecules/articleTeaser.cy.js +0 -105
  243. package/cypress/e2e/components/molecules/banner.cy.js +0 -67
  244. package/cypress/e2e/components/molecules/box.cy.js +0 -104
  245. package/cypress/e2e/components/molecules/card.cy.js +0 -105
  246. package/cypress/e2e/components/molecules/cardDs.cy.js +0 -198
  247. package/cypress/e2e/components/molecules/chip.cy.js +0 -68
  248. package/cypress/e2e/components/molecules/countdown.cy.js +0 -71
  249. package/cypress/e2e/components/molecules/descriptor.cy.js +0 -142
  250. package/cypress/e2e/components/molecules/doubleCopy.cy.js +0 -79
  251. package/cypress/e2e/components/molecules/heroBanner.cy.js +0 -69
  252. package/cypress/e2e/components/molecules/infoBanner.cy.js +0 -69
  253. package/cypress/e2e/components/molecules/partnerLink.cy.js +0 -68
  254. package/cypress/e2e/components/molecules/promo.cy.js +0 -74
  255. package/cypress/e2e/components/molecules/schoolLookup.cy.js +0 -83
  256. package/cypress/e2e/components/molecules/searchInput.cy.js +0 -72
  257. package/cypress/e2e/components/molecules/searchResult.cy.js +0 -191
  258. package/cypress/e2e/components/molecules/shareButton.cy.js +0 -76
  259. package/cypress/e2e/components/molecules/simpleSchoolLookup.cy.js +0 -83
  260. package/cypress/e2e/components/molecules/singleMessage.cy.js +0 -502
  261. package/cypress/e2e/components/molecules/singleMessageDs.cy.js +0 -234
  262. package/cypress/e2e/components/molecules/typeahead.cy.js +0 -97
  263. package/cypress/e2e/components/molecules/videoBanner.cy.js +0 -132
  264. package/cypress/e2e/components/organisms/cookieBanner.cy.js +0 -80
  265. package/cypress/e2e/components/organisms/donate.cy.js +0 -284
  266. package/cypress/e2e/components/organisms/emailSignUp.cy.js +0 -54
  267. package/cypress/e2e/components/organisms/footer.cy.js +0 -168
  268. package/cypress/e2e/components/organisms/header.cy.js +0 -138
  269. package/cypress/e2e/components/organisms/impactSlider.cy.js +0 -72
  270. package/cypress/e2e/components/organisms/marketingPreferencesDSForm.cy.js +0 -589
  271. package/cypress/e2e/components/organisms/membership.cy.js +0 -122
  272. package/cypress/fixtures/example.json +0 -5
  273. package/cypress/plugins/index.js +0 -21
  274. package/cypress/support/commands.js +0 -25
  275. package/cypress/support/e2e.js +0 -36
  276. package/cypress.config.js +0 -15
  277. package/dist/components/Atoms/SocialIcons/assets/x-logo.svg +0 -3
  278. package/src/components/Atoms/SocialIcons/assets/x-logo.svg +0 -3
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@comicrelief/component-library",
3
3
  "author": "Comic Relief Engineering Team",
4
- "version": "7.24.0",
4
+ "version": "7.24.2",
5
5
  "main": "dist/index.js",
6
6
  "license": "ISC",
7
7
  "jest": {
8
8
  "verbose": true,
9
9
  "testPathIgnorePatterns": [
10
- "<rootDir>/cypress/",
10
+ "<rootDir>/playwright/",
11
11
  "<rootDir>/dist/",
12
12
  "<rootDir>/node_modules/"
13
13
  ],
@@ -22,6 +22,7 @@
22
22
  },
23
23
  "dependencies": {
24
24
  "@babel/cli": "^7.21.5",
25
+ "@babel/plugin-proposal-private-property-in-object": "^7.21.11",
25
26
  "@hookform/resolvers": "^1.3.4",
26
27
  "axios": "^0.21.1",
27
28
  "ejs": "^3.1.9",
@@ -36,8 +37,8 @@
36
37
  "react-dom": "^17.0.2",
37
38
  "react-hook-form": "^6.3.0",
38
39
  "react-modal": "^3.16.1",
39
- "react-responsive": "^9.0.2",
40
40
  "react-range-slider-input": "^3.0.7",
41
+ "react-responsive": "^9.0.2",
41
42
  "react-scripts": "4.0.3",
42
43
  "react-spinners": "^0.11.0",
43
44
  "react-styleguidist": "^11.1.7",
@@ -51,14 +52,15 @@
51
52
  "react-scripts/workbox-webpack-plugin/workbox-build/@surma/rollup-plugin-off-main-thread/ejs": "3.1.6"
52
53
  },
53
54
  "scripts": {
54
- "test": "yarn run jest",
55
+ "test:unit": "yarn run jest",
55
56
  "styleguide": "cross-env FAST_REFRESH=false styleguidist server",
56
57
  "styleguide:build": "styleguidist build",
57
58
  "postinstall": "yarn run build",
58
59
  "build": "rm -rf dist && NODE_ENV=production babel src --out-dir dist --copy-files --ignore __tests__,spec.js,test.js",
59
- "cy:run": "export NODE_ENV=development; cypress run --headless --browser chrome",
60
- "cy:open": "export NODE_ENV=development; cypress open",
61
- "feature-test": "run-p --race styleguide cy:run",
60
+ "test:e2e": "playwright test --project=chromium",
61
+ "test:e2e--h": "playwright test --project=chromium --headed",
62
+ "test:e2e:ci": "NODE_ENV=development; start-server-and-test styleguide http://localhost:6060 test:e2e",
63
+ "test:e2e:local": "export NODE_ENV=development; start-server-and-test styleguide http://localhost:6060 test:e2e",
62
64
  "lint": "eslint src",
63
65
  "lint-fix": "yarn lint --fix"
64
66
  },
@@ -75,8 +77,8 @@
75
77
  ]
76
78
  },
77
79
  "devDependencies": {
80
+ "@playwright/test": "^1.38.1",
78
81
  "cross-env": "^7.0.3",
79
- "cypress": "13.2.0",
80
82
  "eslint": "^7.32.0",
81
83
  "eslint-config-airbnb": "^18.2.0",
82
84
  "eslint-plugin-import": "^2.27.5",
@@ -86,6 +88,7 @@
86
88
  "jest": "^26.1.0",
87
89
  "npm-run-all": "^4.1.5",
88
90
  "prettier": "^2.8.8",
89
- "semantic-release": "^17.4.6"
91
+ "semantic-release": "^17.4.6",
92
+ "start-server-and-test": "^2.0.0"
90
93
  }
91
94
  }
@@ -0,0 +1,64 @@
1
+ const { test, expect } = require('@playwright/test');
2
+
3
+ test.describe('checkbox', () => {
4
+ test('checkbox component', async ({ page }) => {
5
+
6
+ await page.goto('/#checkbox');
7
+
8
+ // checkbox component should be visible
9
+ await expect(page.locator('[data-testid="Checkbox-example-1"]')).toBeVisible();
10
+ await expect(page.locator('[data-preview="Checkbox"]')).toBeVisible();
11
+
12
+ // ensure checkboxes are checked when clicked
13
+ // tennis option
14
+ await page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(2)').click();
15
+ await expect(page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(2)')).toHaveValue('Tennis');
16
+ expect(await page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(2)').isChecked()).toBeTruthy();
17
+
18
+ // basketball option
19
+ await page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(3)').click();
20
+ await expect(page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(3)')).toHaveValue('Basketball');
21
+ expect(await page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(3)').isChecked()).toBeTruthy();
22
+
23
+ // cycling option
24
+ await page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(4)').click();
25
+ await expect(page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(4)')).toHaveValue('Cycling');
26
+ expect(await page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(4)').isChecked()).toBeTruthy();
27
+
28
+ // football checkbox
29
+ await page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(5)').click();
30
+ await expect(page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(5)')).toHaveValue('Football');
31
+ expect(await page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(5)').isChecked()).toBeTruthy();
32
+
33
+ // terms and conditions
34
+ await page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(8)').click();
35
+ expect(await page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(8)').isChecked()).toBeTruthy();
36
+
37
+ // ensure checkboxes are unchecked when clicked again
38
+ // tennis option
39
+ await page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(2)').click();
40
+ await expect(page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(2)')).toHaveValue('Tennis');
41
+ expect(await page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(2)').isChecked()).toBeFalsy();
42
+
43
+ // basketball option
44
+ await page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(3)').click();
45
+ await expect(page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(3)')).toHaveValue('Basketball');
46
+ expect(await page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(3)').isChecked()).toBeFalsy();
47
+
48
+ // cycling option
49
+ await page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(4)').click();
50
+ await expect(page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(4)')).toHaveValue('Cycling');
51
+ expect(await page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(4)').isChecked()).toBeFalsy();
52
+
53
+ // football checkbox
54
+ await page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(5)').click();
55
+ await expect(page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(5)')).toHaveValue('Football');
56
+ expect(await page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(5)').isChecked()).toBeFalsy();
57
+
58
+ // terms and conditions
59
+ await page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(8)').click();
60
+ expect(await page.locator('[data-testid="Checkbox-example-1"] div > label:nth-child(8)').isChecked()).toBeFalsy();
61
+
62
+ await page.close();
63
+ });
64
+ });
@@ -0,0 +1,158 @@
1
+ const { test, expect } = require('@playwright/test');
2
+
3
+ test.describe('input component', () => {
4
+ test('input required with label and hint', async ({ page }) => {
5
+
6
+ await page.goto('/#input');
7
+
8
+ // input required with label and hint
9
+ const specificElement = page.locator('input#input-example-1');
10
+ await expect(specificElement).toBeVisible();
11
+
12
+ const inputElement = page.locator('[aria-describedby="input-example-1"]');
13
+
14
+ // Get the placeholder attribute
15
+ const placeholderText = await inputElement.getAttribute('placeholder');
16
+
17
+ // Verify the placeholder text
18
+ expect(placeholderText).toBe('This is the hint text');
19
+
20
+ await page.locator('#input-example-1').type('This is test input text');
21
+
22
+ await page.close();
23
+ });
24
+
25
+ test('input with error message', async ({ page }) => {
26
+
27
+ await page.goto('/#input');
28
+
29
+ // input required with label and hint
30
+ const specificElement = page.locator('input#input-example-2');
31
+ await expect(specificElement).toBeVisible();
32
+
33
+ const inputElement = page.locator('[aria-describedby="input-example-2"]');
34
+
35
+ // Get the placeholder attribute
36
+ const placeholderText = await inputElement.getAttribute('placeholder');
37
+
38
+ // Verify the placeholder text
39
+ expect(placeholderText).toBe('This is the hint text');
40
+
41
+ await page.locator('#input-example-2').type('This is test input text');
42
+
43
+ // error message should be visible
44
+ await expect(page.locator('[data-preview="Input"] > div > label > span[data-test="error-message"]')).toBeVisible();
45
+
46
+ await page.close();
47
+ });
48
+
49
+ test('Simple input (optional)', async ({ page }) => {
50
+
51
+ await page.goto('/#input');
52
+
53
+ // input required with label and hint
54
+ const specificElement = page.locator('input#input-example-3');
55
+ await expect(specificElement).toBeVisible();
56
+
57
+ const inputElement = page.locator('[aria-describedby="input-example-3"]');
58
+
59
+ // Get the 'name' attribute
60
+ const nameAttribute = await inputElement.getAttribute('name');
61
+
62
+ // Verify the 'name' attribute
63
+ expect(nameAttribute).toBe('fullname');
64
+
65
+ await page.locator('#input-example-3').type('This is test input text');
66
+
67
+ await page.close();
68
+ });
69
+
70
+ test('Simple input (required)', async ({ page }) => {
71
+
72
+ await page.goto('/#input');
73
+
74
+ // input required with label and hint
75
+ const specificElement = page.locator('input#input-example-4');
76
+ await expect(specificElement).toBeVisible();
77
+
78
+ const inputElement = page.locator('[aria-describedby="input-example-4"]');
79
+
80
+ // Get the 'name' attribute
81
+ const nameAttribute = await inputElement.getAttribute('name');
82
+
83
+ // Verify the 'name' attribute
84
+ expect(nameAttribute).toBe('fullname');
85
+
86
+ await page.locator('#input-example-4').type('This is test input text');
87
+
88
+ await page.close();
89
+ });
90
+
91
+ test('Input Label with markup', async ({ page }) => {
92
+
93
+ await page.goto('/#input');
94
+
95
+ // input required with label and hint
96
+ const specificElement = page.locator('input#input-example-5');
97
+ await expect(specificElement).toBeVisible();
98
+
99
+ const inputElement = page.locator('[aria-describedby="input-example-5"]');
100
+
101
+ // Get the 'name' attribute
102
+ const nameAttribute = await inputElement.getAttribute('name');
103
+
104
+ // Verify the 'name' attribute
105
+ expect(nameAttribute).toBe('fullname');
106
+
107
+ await page.locator('#input-example-5').type('This is test input text');
108
+
109
+ await page.close();
110
+ });
111
+
112
+ test('Input label as React element', async ({ page }) => {
113
+
114
+ await page.goto('/#input');
115
+
116
+ // input required with label and hint
117
+ const specificElement = page.locator('input#input-example-6');
118
+ await expect(specificElement).toBeVisible();
119
+
120
+ const inputElement = page.locator('[aria-describedby="input-example-6"]');
121
+
122
+ // Get the 'name' attribute
123
+ const nameAttribute = await inputElement.getAttribute('name');
124
+
125
+ // Verify the 'name' attribute
126
+ expect(nameAttribute).toBe('email');
127
+
128
+ await page.locator('#input-example-6').type('This is test input text');
129
+
130
+ await page.close();
131
+ });
132
+
133
+ test('Input with prefix', async ({ page }) => {
134
+
135
+ await page.goto('/#input');
136
+
137
+ // input required with label and hint
138
+ const specificElement = page.locator('#price');
139
+ await expect(specificElement).toBeVisible();
140
+
141
+ const inputElement = page.locator('[aria-describedby="price"]');
142
+
143
+ // Get the 'name' attribute
144
+ const nameAttribute = await inputElement.getAttribute('name');
145
+
146
+ const placeholderText = await inputElement.getAttribute('placeholder');
147
+
148
+ // Verify the placeholder text
149
+ expect(placeholderText).toBe('0.00');
150
+
151
+ // Verify the 'name' attribute
152
+ expect(nameAttribute).toBe('price');
153
+
154
+ await page.locator('#price').type('15.99');
155
+
156
+ await page.close();
157
+ });
158
+ });
@@ -0,0 +1,29 @@
1
+ const { test, expect } = require('@playwright/test');
2
+
3
+ test.describe('label component', () => {
4
+ test('label - Wrapping a basic text input', async ({ page }) => {
5
+
6
+ await page.goto('/#label');
7
+
8
+ // select dropdown menu component-1 should be visible
9
+ const specificElement = page.locator('[data-testid="Label-example-0"]');
10
+ await expect(specificElement).toBeVisible();
11
+
12
+ await page.locator('input[name="field-wrapper-test"]').type('This is test text');
13
+
14
+ await page.close();
15
+ });
16
+
17
+ test('label component - Wrapping a styled input', async ({ page }) => {
18
+
19
+ await page.goto('/#label');
20
+
21
+ // select dropdown menu component-1 should be visible
22
+ const specificElement = page.locator('[data-testid="Label-example-1"]');
23
+ await expect(specificElement).toBeVisible();
24
+
25
+ await page.locator('input[name="field-wrapper-test-1"]').type('This is test text');
26
+
27
+ await page.close();
28
+ });
29
+ });
@@ -0,0 +1,48 @@
1
+ const { test, expect } = require('@playwright/test');
2
+
3
+ test.describe('link component', () => {
4
+ test('link', async ({ page, context }) => {
5
+
6
+ await page.goto('/#link');
7
+
8
+ // select dropdown menu component-1 should be visible
9
+ const specificElement = page.locator('[data-testid="Link-example-0"]');
10
+ await expect(specificElement).toBeVisible();
11
+
12
+ const [popup] = await Promise.all([
13
+ context.waitForEvent('page'), // Wait for a new page (popup)
14
+ page.click('[data-preview="Link"] div:nth-child(1) > a'), // Click the link
15
+ ]);
16
+
17
+ // Check if the popup is a new window
18
+ const isNewWindow = await popup.evaluate(() => window !== window.opener);
19
+
20
+ expect(isNewWindow).toBe(true);
21
+
22
+ await page.close();
23
+ });
24
+
25
+ test('link standard icon', async ({ page, context }) => {
26
+
27
+ await page.goto('/#link');
28
+
29
+ // select dropdown menu component-1 should be visible
30
+ const specificElement = page.locator('[data-testid="Link-example-0"]');
31
+ await expect(specificElement).toBeVisible();
32
+
33
+ // link standard icon should be visible
34
+ await expect(page.locator('[data-preview="Link"] div:nth-child(2) > a > span[type="standard"]')).toBeVisible();
35
+
36
+ const [popup] = await Promise.all([
37
+ context.waitForEvent('page'), // Wait for a new page (popup)
38
+ page.click('[data-preview="Link"] div:nth-child(2) > a'), // Click the link
39
+ ]);
40
+
41
+ // Check if the popup is a new window
42
+ const isNewWindow = await popup.evaluate(() => window !== window.opener);
43
+
44
+ expect(isNewWindow).toBe(true);
45
+
46
+ await page.close();
47
+ });
48
+ });
@@ -0,0 +1,30 @@
1
+ const { test, expect } = require('@playwright/test');
2
+
3
+ test.describe('radio button component', () => {
4
+ test('radio button', async ({ page }) => {
5
+
6
+ await page.goto('/#radiobutton');
7
+
8
+ // confetti component should be visible
9
+ await expect(page.locator('[data-testid="RadioButton-example-1"]')).toBeVisible();
10
+ await expect(page.locator('[data-preview="RadioButton"]')).toBeVisible();
11
+
12
+ // ensure radio buttons are checked when clicked
13
+ // male option
14
+ await page.locator('[data-preview="RadioButton"] div > label:nth-child(1)').click();
15
+ await expect(page.locator('[data-preview="RadioButton"] div > label:nth-child(1)')).toHaveValue('male');
16
+ expect(await page.locator('[data-preview="RadioButton"] div > label:nth-child(1)').isChecked()).toBeTruthy();
17
+
18
+ // female option
19
+ await page.locator('[data-preview="RadioButton"] div > label:nth-child(2)').click();
20
+ await expect(page.locator('[data-preview="RadioButton"] div > label:nth-child(2)')).toHaveValue('female');
21
+ expect(await page.locator('[data-preview="RadioButton"] div > label:nth-child(2)').isChecked()).toBeTruthy();
22
+
23
+ // other option
24
+ await page.locator('[data-preview="RadioButton"] div > label:nth-child(3)').click();
25
+ await expect(page.locator('[data-preview="RadioButton"] div > label:nth-child(3)')).toHaveValue('other');
26
+ expect(await page.locator('[data-preview="RadioButton"] div > label:nth-child(3)').isChecked()).toBeTruthy();
27
+
28
+ await page.close();
29
+ });
30
+ });
@@ -0,0 +1,36 @@
1
+ const { test, expect } = require('@playwright/test');
2
+
3
+ test.describe('select component', () => {
4
+ test('select dropdown menu', async ({ page }) => {
5
+
6
+ await page.goto('/#select');
7
+
8
+ // select dropdown menu component-1 should be visible
9
+ await expect(page.locator('[data-testid="Select-example-1"]')).toBeVisible();
10
+ await expect(page.locator('[data-preview="Select"]')).toBeVisible();
11
+
12
+ // ensure select dropdown values are visible
13
+ await page.locator('[data-preview="Select"] label:nth-child(2) > select').click();
14
+
15
+ await page.locator('[data-preview="Select"] label:nth-child(2) > select').selectOption('The first option');
16
+ await expect(page.locator('[data-preview="Select"] label:nth-child(2) > select > option[value="Option one"]')).toHaveValue('Option one');
17
+
18
+ await page.locator('[data-preview="Select"] label:nth-child(2) > select').selectOption('The second option');
19
+ await expect(page.locator('[data-preview="Select"] label:nth-child(2) > select > option[value="Option two"]')).toHaveValue('Option two');
20
+
21
+ await page.locator('[data-preview="Select"] label:nth-child(2) > select').selectOption('The third option');
22
+ await expect(page.locator('[data-preview="Select"] label:nth-child(2) > select > option[value="Option three"]')).toHaveValue('Option three');
23
+
24
+ await page.locator('[data-preview="Select"] label:nth-child(2) > select').selectOption('The fourth option');
25
+ await expect(page.locator('[data-preview="Select"] label:nth-child(2) > select > option[value="Option four"]')).toHaveValue('Option four');
26
+
27
+ await page.locator('[data-preview="Select"] label:nth-child(4) > select').selectOption('The second option');
28
+
29
+ const optionElement = page.locator('[data-preview="Select"] label:nth-child(4) > select > option[value="Option two"]');
30
+ const isSelected = await optionElement.evaluate(option => option.selected);
31
+
32
+ expect(isSelected).toBe(true);
33
+
34
+ await page.close();
35
+ });
36
+ });
@@ -0,0 +1,39 @@
1
+ const { test, expect } = require('@playwright/test');
2
+
3
+ test.describe('text area component', () => {
4
+ test('text area - Long copy/Message field', async ({ page }) => {
5
+
6
+ await page.goto('/#textarea');
7
+
8
+ // input required with label and hint
9
+ const specificElement = page.locator('[data-testid="TextArea-example-1"]');
10
+ await expect(specificElement).toBeVisible();
11
+
12
+ const inputElement = page.locator('[aria-describedby="textarea-test"]');
13
+
14
+ // Get the placeholder attribute
15
+ const placeholderText = await inputElement.getAttribute('placeholder');
16
+
17
+ // Verify the placeholder text
18
+ expect(placeholderText).toBe('This is a placeholder');
19
+
20
+ await page.locator('[aria-describedby="textarea-test"]').type('This is test text for textarea field');
21
+
22
+ await page.close();
23
+ });
24
+
25
+ test('text area - Long copy/Message field with error message', async ({ page }) => {
26
+
27
+ await page.goto('/#textarea');
28
+
29
+ const specificElement = page.locator('[data-testid="TextArea-example-1"]');
30
+ await expect(specificElement).toBeVisible();
31
+
32
+ await page.locator('[aria-describedby="textarea-test-2"]').type('This is test text for textarea field');
33
+
34
+ // error message should be visible
35
+ await expect(page.locator('[aria-describedby="textarea-test-2"] ~ span[data-test="error-message"]')).toBeVisible();
36
+
37
+ await page.close();
38
+ });
39
+ });
@@ -0,0 +1,23 @@
1
+ const { test, expect } = require('@playwright/test');
2
+
3
+ test.describe('Text Input With Dropdown Component', () => {
4
+ test('TextInputWithDropdown component', async ({ page }) => {
5
+
6
+ await page.goto('/#textinputwithdropdown');
7
+
8
+ const specificElement = page.locator('[data-testid="TextInputWithDropdown-example-1"]');
9
+ await expect(specificElement).toBeVisible();
10
+
11
+ await page.locator('label[for="input-with-dropdown"]').type('This is test text for textarea field');
12
+
13
+ // Text input with dropdown
14
+ await page.locator('label[for="input-with-dropdown"]').type('test');
15
+
16
+ // ensure select dropdown values are visible
17
+ await expect(page.locator('label[for="input-with-dropdown"] ~ div > ul[role="listbox"]')).toBeVisible();
18
+
19
+ await page.locator('label[for="input-with-dropdown"] ~ div > ul[role="listbox"] > li[id="option-1"]').click();
20
+
21
+ await page.close();
22
+ });
23
+ });
@@ -0,0 +1,20 @@
1
+ const { test, expect } = require('@playwright/test');
2
+
3
+ test.describe('accordian component', () => {
4
+ test('accordian', async ({ page, context }) => {
5
+
6
+ await page.goto('/#accordion');
7
+
8
+ // accordian elements should be visible
9
+ await expect(page.locator('[data-testid="Accordion-example-1"]')).toBeVisible();
10
+ await expect(page.locator('[data-preview="Accordion"]')).toBeVisible();
11
+ // dropdown svg icon should be visible
12
+ await expect(page.locator('[data-preview="Accordion"] svg')).toBeVisible();
13
+
14
+ // clicking the accordian should show the paragraph
15
+ await page.locator('[data-preview="Accordion"] svg').click();
16
+ await expect(page.locator('[data-preview="Accordion"] p')).toBeVisible();
17
+
18
+ await page.close();
19
+ });
20
+ });
@@ -0,0 +1,26 @@
1
+ const { test, expect } = require('@playwright/test');
2
+
3
+ test.describe('school lookup component', () => {
4
+ test('school lookup', async ({ page, context }) => {
5
+
6
+ await page.goto('/#schoollookup');
7
+
8
+ // school lookup elements should be visible
9
+ await expect(page.locator('[data-testid="SchoolLookup-example-1"]')).toBeVisible();
10
+ await expect(page.locator('[data-preview="SchoolLookup"]')).toBeVisible();
11
+
12
+ const inputElement = page.locator('[aria-describedby="school-lookup"]');
13
+
14
+ // Get the 'placeholder' attribute
15
+ const placeholderAttribute = await inputElement.getAttribute('placeholder');
16
+
17
+ // Verify the 'placeholder' attribute
18
+ expect(placeholderAttribute).toBe('Type to start search');
19
+
20
+ await page.locator('#school-lookup').type('St Paul');
21
+ await expect(page.locator('label[for="school-lookup"] ~ div > ul[role="listbox"]')).toBeVisible();
22
+ await page.locator('label[for="school-lookup"] ~ div > ul[role="listbox"] > li[id="option-6"]').click();
23
+
24
+ await page.close();
25
+ });
26
+ });
@@ -0,0 +1,24 @@
1
+ const { test, expect } = require('@playwright/test');
2
+
3
+ test.describe('search input component', () => {
4
+ test('search input', async ({ page, context }) => {
5
+
6
+ await page.goto('/#searchinput');
7
+
8
+ // accordian elements should be visible
9
+ await expect(page.locator('[data-testid="SearchInput-example-1"]')).toBeVisible();
10
+ await expect(page.locator('[data-preview="SearchInput"]')).toBeVisible();
11
+
12
+ const inputElement = page.locator('[aria-describedby="school-lookup"]');
13
+
14
+ // Get the 'placeholder' attribute
15
+ const placeholderAttribute = await inputElement.getAttribute('placeholder');
16
+
17
+ // Verify the 'placeholder' attribute
18
+ expect(placeholderAttribute).toBe('Type to start search');
19
+
20
+ await page.locator('#search').type('Red Nose Day');
21
+
22
+ await page.close();
23
+ });
24
+ });
@@ -0,0 +1,32 @@
1
+ const { test, expect } = require('@playwright/test');
2
+
3
+ test.describe('share button component', () => {
4
+ test('share button', async ({ page, context }) => {
5
+
6
+ await page.goto('/#sharebutton');
7
+
8
+ // accordian elements should be visible
9
+ await expect(page.locator('[data-testid="ShareButton-example-0"]')).toBeVisible();
10
+ await expect(page.locator('[data-preview="ShareButton"]')).toBeVisible();
11
+
12
+ await expect(page.locator('[data-preview="ShareButton"] > div > div > div:nth-child(1) > ul > li:nth-child(1) > a > img')).toBeVisible();
13
+
14
+ const facebookShareButton = page.locator('[data-preview="ShareButton"] > div > div > div:nth-child(1) > ul > li:nth-child(1) > a');
15
+
16
+ // Get the 'title' attribute
17
+ const placeholderAttribute = await facebookShareButton.getAttribute('title');
18
+
19
+ // Verify the 'title' attribute
20
+ expect(placeholderAttribute).toBe('Share on Facebook');
21
+
22
+ const twitterShareButton = page.locator('[data-preview="ShareButton"] > div > div > div:nth-child(1) > ul > li:nth-child(2) > a');
23
+
24
+ // Get the 'title' attribute
25
+ const twiiterPlaceholderAttribute = await twitterShareButton.getAttribute('title');
26
+
27
+ // Verify the 'title' attribute
28
+ expect(twiiterPlaceholderAttribute).toBe('Share on Twitter');
29
+
30
+ await page.close();
31
+ });
32
+ });
@@ -0,0 +1,35 @@
1
+ const { test, expect } = require('@playwright/test');
2
+
3
+ test.describe('simple school lookup component', () => {
4
+ test('simple school lookup', async ({ page, context }) => {
5
+
6
+ await page.goto('/#simpleschoollookup');
7
+
8
+ // simple school lookup elements should be visible
9
+ await expect(page.locator('[data-testid="SimpleSchoolLookup-example-0"]')).toBeVisible();
10
+ await expect(page.locator('[data-preview="SimpleSchoolLookup"]')).toBeVisible();
11
+
12
+ const inputElement = page.locator('[aria-describedby="school_lookup"]');
13
+
14
+ // Get the 'placeholder' attribute
15
+ const placeholderAttribute = await inputElement.getAttribute('placeholder');
16
+
17
+ // Verify the 'placeholder' attribute
18
+ expect(placeholderAttribute).toBe('Enter name or postcode...');
19
+
20
+ // enter school name and click find address button
21
+ await page.locator('input#school_lookup').type('St Paul');
22
+ await expect(page.locator('[data-preview="SimpleSchoolLookup"] > div > div > button[type="button"]')).toBeVisible();
23
+ await page.locator('[data-preview="SimpleSchoolLookup"] > div > div > button[type="button"]').click();
24
+ await expect(page.locator('label[for="school_lookup"] ~ div > ul[role="listbox"]')).toBeVisible();
25
+
26
+ // clear school name and enter school postcode
27
+ await page.locator('input#school_lookup').fill('');
28
+ await page.locator('input#school_lookup').fill('EC4M 9AD');
29
+ await expect(page.locator('[data-preview="SimpleSchoolLookup"] > div > div > button[type="button"]')).toBeVisible();
30
+ await page.locator('[data-preview="SimpleSchoolLookup"] > div > div > button[type="button"]').click();
31
+
32
+ await expect(page.locator('label[for="school_lookup"] ~ div > ul[role="listbox"]')).toBeVisible();
33
+ await page.close();
34
+ });
35
+ });