@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
@@ -0,0 +1,27 @@
1
+ const { test, expect } = require('@playwright/test');
2
+
3
+ test.describe('typeahead component', () => {
4
+ test('typeahead', async ({ page }) => {
5
+
6
+ await page.goto('/#typeahead');
7
+
8
+ await expect(page.locator('[data-testid="Typeahead-example-1"]')).toBeVisible();
9
+
10
+ await expect(page.locator('[data-preview="Typeahead"]')).toBeVisible();
11
+
12
+ const inputElement = page.locator('[aria-describedby="typeahead-test"]');
13
+
14
+ // Get the 'placeholder' attribute
15
+ const placeholderAttribute = await inputElement.getAttribute('placeholder');
16
+
17
+ // Verify the 'placeholder' attribute
18
+ expect(placeholderAttribute).toBe('Start searching...');
19
+
20
+ // type a word and typeahead should give options
21
+ await page.locator('input#typeahead-test').type('red nos');
22
+ await expect(page.locator('label[for="typeahead-test"] ~ div > ul[role="listbox"]')).toBeVisible();
23
+ await expect(page.locator('label[for="typeahead-test"] ~ div > ul[role="listbox"] > li[id="option-0"]')).toContainText('red nose');
24
+
25
+ await page.close();
26
+ });
27
+ });
@@ -0,0 +1,293 @@
1
+ const { test, expect } = require('@playwright/test');
2
+
3
+ test.describe('donate component', () => {
4
+ test('Donate-example-1 - Single Donation', async ({ page }) => {
5
+
6
+ await page.goto('/#donate');
7
+
8
+ await expect(page.locator('[data-testid="Donate-example-1"]')).toBeVisible();
9
+
10
+ // moneybuy 1
11
+ await expect(page.locator('[data-testid="Donate-example-1"] input#mship-1--MoneyBuy-userInput')).toHaveValue('20');
12
+ await page.locator('[data-testid="Donate-example-1"] #mship-1--moneyBuy-box1[aria-label="£12.10"]').click();
13
+ await expect(page.locator('[data-testid="Donate-example-1"] input#mship-1--MoneyBuy-userInput')).toHaveValue('12.10');
14
+
15
+ let moneybuyOneButtonText = await page.locator('[data-testid="Donate-example-1"] button[type="submit"]').textContent();
16
+ console.log('buttonText:', moneybuyOneButtonText);
17
+
18
+ await expect(page.locator('[data-testid="Donate-example-1"] button[type="submit"]')).toContainText('Donate £12.10 now');
19
+
20
+ // moneybuy 2
21
+ await page.locator('[data-testid="Donate-example-1"] #mship-1--moneyBuy-box2[aria-label="£20.00"]').click();
22
+ await expect(page.locator('[data-testid="Donate-example-1"] input#mship-1--MoneyBuy-userInput')).toHaveValue('20');
23
+
24
+ let moneybuyTwoButtonText = await page.locator('[data-testid="Donate-example-1"] button[type="submit"]').textContent();
25
+ console.log('buttonText:', moneybuyTwoButtonText);
26
+
27
+ await expect(page.locator('[data-testid="Donate-example-1"] button[type="submit"]')).toContainText('Donate £20 now');
28
+
29
+ // moneybuy 3
30
+ await page.locator('[data-testid="Donate-example-1"] #mship-1--moneyBuy-box3[aria-label="£30.00"]').click();
31
+ await expect(page.locator('[data-testid="Donate-example-1"] input#mship-1--MoneyBuy-userInput')).toHaveValue('30');
32
+
33
+ let moneybuyThreeButtonText = await page.locator('[data-testid="Donate-example-1"] button[type="submit"]').textContent();
34
+ console.log('buttonText:', moneybuyThreeButtonText);
35
+
36
+ await expect(page.locator('[data-testid="Donate-example-1"] button[type="submit"]')).toContainText('Donate £30 now');
37
+
38
+ // amount field validation
39
+ await page.locator('[data-testid="Donate-example-1"] input#mship-1--MoneyBuy-userInput').fill('');
40
+
41
+ // enter amount 0 should show error message
42
+ await page.locator('[data-testid="Donate-example-1"] input#mship-1--MoneyBuy-userInput').type('0');
43
+ await expect(page.locator('[data-testid="Donate-example-1"] p:nth-child(4)')).toContainText('Please enter an amount between £1 and £25000 and up to 2 decimal places');
44
+
45
+ // enter amount 25001 should show error message
46
+ await page.locator('[data-testid="Donate-example-1"] input#mship-1--MoneyBuy-userInput').fill('');
47
+ await page.locator('[data-testid="Donate-example-1"] input#mship-1--MoneyBuy-userInput').type('25001');
48
+ await expect(page.locator('[data-testid="Donate-example-1"] p:nth-child(4)')).toContainText('Please enter an amount between £1 and £25000 and up to 2 decimal places');
49
+
50
+ // enter own amount in decimals should not show error message
51
+ await page.locator('[data-testid="Donate-example-1"] input#mship-1--MoneyBuy-userInput').fill('');
52
+ await page.locator('[data-testid="Donate-example-1"] input#mship-1--MoneyBuy-userInput').type('12.99');
53
+ await expect(page.locator('[data-testid="Donate-example-1"] button[type="submit"]')).toContainText('Donate £12.99 now');
54
+
55
+ // clicking the submit button should take to donate.comicrelief.com
56
+ await page.locator('[data-testid="Donate-example-1"] button[type="submit"]').click();
57
+
58
+ await page.close();
59
+ });
60
+
61
+ test('Donate-example-1 - Monthly Donation', async ({ page }) => {
62
+
63
+ await page.goto('/#donate');
64
+
65
+ await expect(page.locator('[data-testid="Donate-example-1"]')).toBeVisible();
66
+
67
+ // click monthly donation
68
+ await page.locator('[data-testid="Donate-example-1"] [for="give-monthly--mship-1"]').click();
69
+
70
+ // moneybuy 1
71
+ await page.locator('[data-testid="Donate-example-1"] #mship-1--moneyBuy-box1[aria-label="£5.50"]').click();
72
+ await expect(page.locator('[data-testid="Donate-example-1"] input#mship-1--MoneyBuy-userInput')).toHaveValue('5.50');
73
+
74
+ let moneybuyOneButtonText = await page.locator('[data-testid="Donate-example-1"] button[type="submit"]').textContent();
75
+ console.log('buttonText:', moneybuyOneButtonText);
76
+
77
+ await expect(page.locator('[data-testid="Donate-example-1"] button[type="submit"]')).toContainText('Donate £5.50 monthly');
78
+
79
+ // moneybuy 2
80
+ await page.locator('[data-testid="Donate-example-1"] #mship-1--moneyBuy-box2[aria-label="£10.00"]').click();
81
+ await expect(page.locator('[data-testid="Donate-example-1"] input#mship-1--MoneyBuy-userInput')).toHaveValue('10');
82
+
83
+ let moneybuyTwoButtonText = await page.locator('[data-testid="Donate-example-1"] button[type="submit"]').textContent();
84
+ console.log('buttonText:', moneybuyTwoButtonText);
85
+
86
+ await expect(page.locator('[data-testid="Donate-example-1"] button[type="submit"]')).toContainText('Donate £10 monthly');
87
+
88
+ // moneybuy 3
89
+ await page.locator('[data-testid="Donate-example-1"] #mship-1--moneyBuy-box3[aria-label="£20.00"]').click();
90
+ await expect(page.locator('[data-testid="Donate-example-1"] input#mship-1--MoneyBuy-userInput')).toHaveValue('20');
91
+
92
+ let moneybuyThreeButtonText = await page.locator('[data-testid="Donate-example-1"] button[type="submit"]').textContent();
93
+ console.log('buttonText:', moneybuyThreeButtonText);
94
+
95
+ await expect(page.locator('[data-testid="Donate-example-1"] button[type="submit"]')).toContainText('Donate £20 monthly');
96
+
97
+ // amount field validation
98
+ await page.locator('[data-testid="Donate-example-1"] input#mship-1--MoneyBuy-userInput').fill('');
99
+
100
+ // enter amount 0 should show error message
101
+ await page.locator('[data-testid="Donate-example-1"] input#mship-1--MoneyBuy-userInput').type('0');
102
+ await expect(page.locator('[data-testid="Donate-example-1"] p:nth-child(4)')).toContainText('Please enter an amount between £1 and £25000 and up to 2 decimal places');
103
+
104
+ // enter amount 25001 should show error message
105
+ await page.locator('[data-testid="Donate-example-1"] input#mship-1--MoneyBuy-userInput').fill('');
106
+ await page.locator('[data-testid="Donate-example-1"] input#mship-1--MoneyBuy-userInput').type('25001');
107
+ await expect(page.locator('[data-testid="Donate-example-1"] p:nth-child(4)')).toContainText('Please enter an amount between £1 and £25000 and up to 2 decimal places');
108
+
109
+ // enter own amount in decimals should not show error message
110
+ await page.locator('[data-testid="Donate-example-1"] input#mship-1--MoneyBuy-userInput').fill('');
111
+ await page.locator('[data-testid="Donate-example-1"] input#mship-1--MoneyBuy-userInput').type('12.99');
112
+ await expect(page.locator('[data-testid="Donate-example-1"] button[type="submit"]')).toContainText('Donate £12.99 monthly');
113
+
114
+ // clicking the submit button should take to donate.comicrelief.com
115
+ await page.locator('[data-testid="Donate-example-1"] button[type="submit"]').click();
116
+
117
+ await page.close();
118
+ });
119
+
120
+ test('Donate-example-3 - high value cart', async ({ page }) => {
121
+
122
+ await page.goto('/#donate');
123
+
124
+ await expect(page.locator('[data-testid="Donate-example-3"]')).toBeVisible();
125
+
126
+ // moneybuy 1
127
+ await page.locator('[data-testid="Donate-example-3"] #mship-2--moneyBuy-box1[aria-label="£7777"]').click();
128
+ await expect(page.locator('[data-testid="Donate-example-3"] input#mship-2--MoneyBuy-userInput')).toHaveValue('7777');
129
+
130
+ let moneybuyOneButtonText = await page.locator('[data-testid="Donate-example-3"] button[type="submit"]').textContent();
131
+ console.log('buttonText:', moneybuyOneButtonText);
132
+
133
+ await expect(page.locator('[data-testid="Donate-example-3"] button[type="submit"]')).toContainText('Donate £7777 now');
134
+
135
+ // moneybuy 2
136
+ await page.locator('[data-testid="Donate-example-3"] #mship-2--moneyBuy-box2[aria-label="£8888"]').click();
137
+ await expect(page.locator('[data-testid="Donate-example-3"] input#mship-2--MoneyBuy-userInput')).toHaveValue('8888');
138
+
139
+ let moneybuyTwoButtonText = await page.locator('[data-testid="Donate-example-3"] button[type="submit"]').textContent();
140
+ console.log('buttonText:', moneybuyTwoButtonText);
141
+
142
+ await expect(page.locator('[data-testid="Donate-example-3"] button[type="submit"]')).toContainText('Donate £8888 now');
143
+
144
+ // moneybuy 3
145
+ await page.locator('[data-testid="Donate-example-3"] #mship-2--moneyBuy-box3[aria-label="£9999"]').click();
146
+ await expect(page.locator('[data-testid="Donate-example-3"] input#mship-2--MoneyBuy-userInput')).toHaveValue('9999');
147
+
148
+ let moneybuyThreeButtonText = await page.locator('[data-testid="Donate-example-3"] button[type="submit"]').textContent();
149
+ console.log('buttonText:', moneybuyThreeButtonText);
150
+
151
+ await expect(page.locator('[data-testid="Donate-example-3"] button[type="submit"]')).toContainText('Donate £9999 now');
152
+
153
+ // amount field validation
154
+ await page.locator('[data-testid="Donate-example-3"] input#mship-2--MoneyBuy-userInput').fill('');
155
+
156
+ // enter amount 0 should show error message
157
+ await page.locator('[data-testid="Donate-example-3"] input#mship-2--MoneyBuy-userInput').type('0');
158
+ await expect(page.locator('[data-testid="Donate-example-3"] p:nth-child(4)')).toContainText('Please enter an amount between £1 and £25000 and up to 2 decimal places');
159
+
160
+ // enter amount 25001 should show error message
161
+ await page.locator('[data-testid="Donate-example-3"] input#mship-2--MoneyBuy-userInput').fill('');
162
+ await page.locator('[data-testid="Donate-example-3"] input#mship-2--MoneyBuy-userInput').type('25001');
163
+ await expect(page.locator('[data-testid="Donate-example-3"] p:nth-child(4)')).toContainText('Please enter an amount between £1 and £25000 and up to 2 decimal places');
164
+
165
+ // enter own amount in decimals should not show error message
166
+ await page.locator('[data-testid="Donate-example-3"] input#mship-2--MoneyBuy-userInput').fill('');
167
+ await page.locator('[data-testid="Donate-example-3"] input#mship-2--MoneyBuy-userInput').type('22000');
168
+ await expect(page.locator('[data-testid="Donate-example-3"] button[type="submit"]')).toContainText('Donate £22000 now');
169
+
170
+ // clicking the submit button should take to donate.comicrelief.com
171
+ await page.locator('[data-testid="Donate-example-3"] button[type="submit"]').click();
172
+
173
+ await page.close();
174
+ });
175
+
176
+ test('Donate-example-5 - Single Giving', async ({ page }) => {
177
+
178
+ await page.goto('/#donate');
179
+
180
+ await expect(page.locator('[data-testid="Donate-example-5"]')).toBeVisible();
181
+
182
+ // moneybuy 1
183
+ await page.locator('[data-testid="Donate-example-5"] #mship-3--moneyBuy-box1[aria-label="£10"]').click();
184
+ await expect(page.locator('[data-testid="Donate-example-5"] input#mship-3--MoneyBuy-userInput')).toHaveValue('10');
185
+
186
+ let moneybuyOneButtonText = await page.locator('[data-testid="Donate-example-5"] button[type="submit"]').textContent();
187
+ console.log('buttonText:', moneybuyOneButtonText);
188
+
189
+ await expect(page.locator('[data-testid="Donate-example-5"] button[type="submit"]')).toContainText('Donate £10 now');
190
+
191
+ // moneybuy 2
192
+ await page.locator('[data-testid="Donate-example-5"] #mship-3--moneyBuy-box2[aria-label="£20"]').click();
193
+ await expect(page.locator('[data-testid="Donate-example-5"] input#mship-3--MoneyBuy-userInput')).toHaveValue('20');
194
+
195
+ let moneybuyTwoButtonText = await page.locator('[data-testid="Donate-example-5"] button[type="submit"]').textContent();
196
+ console.log('buttonText:', moneybuyTwoButtonText);
197
+
198
+ await expect(page.locator('[data-testid="Donate-example-5"] button[type="submit"]')).toContainText('Donate £20 now');
199
+
200
+ // moneybuy 3
201
+ await page.locator('[data-testid="Donate-example-5"] #mship-3--moneyBuy-box3[aria-label="£30"]').click();
202
+ await expect(page.locator('[data-testid="Donate-example-5"] input#mship-3--MoneyBuy-userInput')).toHaveValue('30');
203
+
204
+ let moneybuyThreeButtonText = await page.locator('[data-testid="Donate-example-5"] button[type="submit"]').textContent();
205
+ console.log('buttonText:', moneybuyThreeButtonText);
206
+
207
+ await expect(page.locator('[data-testid="Donate-example-5"] button[type="submit"]')).toContainText('Donate £30 now');
208
+
209
+ // amount field validation
210
+ await page.locator('[data-testid="Donate-example-5"] input#mship-3--MoneyBuy-userInput').fill('');
211
+
212
+ // enter amount 0 should show error message
213
+ await page.locator('[data-testid="Donate-example-5"] input#mship-3--MoneyBuy-userInput').type('0');
214
+ await expect(page.locator('[data-testid="Donate-example-5"] p:nth-child(4)')).toContainText('Please enter an amount between £1 and £25000 and up to 2 decimal places');
215
+
216
+ // enter amount 25001 should show error message
217
+ await page.locator('[data-testid="Donate-example-5"] input#mship-3--MoneyBuy-userInput').fill('');
218
+ await page.locator('[data-testid="Donate-example-5"] input#mship-3--MoneyBuy-userInput').type('25001');
219
+ await expect(page.locator('[data-testid="Donate-example-5"] p:nth-child(4)')).toContainText('Please enter an amount between £1 and £25000 and up to 2 decimal places');
220
+
221
+ // enter own amount in decimals should not show error message
222
+ await page.locator('[data-testid="Donate-example-5"] input#mship-3--MoneyBuy-userInput').fill('');
223
+ await page.locator('[data-testid="Donate-example-5"] input#mship-3--MoneyBuy-userInput').type('20.01');
224
+ await expect(page.locator('[data-testid="Donate-example-5"] button[type="submit"]')).toContainText('Donate £20.01 now');
225
+
226
+ // clicking the submit button should take to donate.comicrelief.com
227
+ await page.locator('[data-testid="Donate-example-5"] button[type="submit"]').click();
228
+
229
+ await page.close();
230
+ });
231
+
232
+ test('Donate-example-7 - Single Giving "No Money Buys"', async ({ page }) => {
233
+
234
+ await page.goto('/#donate');
235
+
236
+ await expect(page.locator('[data-testid="Donate-example-7"]')).toBeVisible();
237
+
238
+ await expect(page.locator('[data-testid="Donate-example-7"] button[type="submit"]')).toContainText('Donate £20');
239
+
240
+ // amount field validation
241
+ await page.locator('[data-testid="Donate-example-7"] input#mship-4--MoneyBuy-userInput').fill('');
242
+
243
+ // enter amount 0 should show error message
244
+ await page.locator('[data-testid="Donate-example-7"] input#mship-4--MoneyBuy-userInput').type('0');
245
+ await expect(page.locator('[data-testid="Donate-example-7"] p:nth-child(3)')).toContainText('Please enter an amount between £1 and £25000 and up to 2 decimal places');
246
+
247
+ // enter amount 25001 should show error message
248
+ await page.locator('[data-testid="Donate-example-7"] input#mship-4--MoneyBuy-userInput').fill('');
249
+ await page.locator('[data-testid="Donate-example-7"] input#mship-4--MoneyBuy-userInput').type('25001');
250
+ await expect(page.locator('[data-testid="Donate-example-7"] p:nth-child(3)')).toContainText('Please enter an amount between £1 and £25000 and up to 2 decimal places');
251
+
252
+ // enter own amount in decimals should not show error message
253
+ await page.locator('[data-testid="Donate-example-7"] input#mship-4--MoneyBuy-userInput').fill('');
254
+ await page.locator('[data-testid="Donate-example-7"] input#mship-4--MoneyBuy-userInput').type('20.01');
255
+ await expect(page.locator('[data-testid="Donate-example-7"] button[type="submit"]')).toContainText('Donate £20.01');
256
+
257
+ // clicking the submit button should take to donate.comicrelief.com
258
+ await page.locator('[data-testid="Donate-example-7"] button[type="submit"]').click();
259
+
260
+ await page.close();
261
+ });
262
+
263
+ test('Donate-example-9 - Single Giving "No Money Buys" with overridden manual input value', async ({ page }) => {
264
+
265
+ await page.goto('/#donate');
266
+
267
+ await expect(page.locator('[data-testid="Donate-example-9"]')).toBeVisible();
268
+
269
+ await expect(page.locator('[data-testid="Donate-example-9"] button[type="submit"]')).toContainText('Donate £567.89');
270
+
271
+ // amount field validation
272
+ await page.locator('[data-testid="Donate-example-9"] input#mship-4--MoneyBuy-userInput').fill('');
273
+
274
+ // enter amount 0 should show error message
275
+ await page.locator('[data-testid="Donate-example-9"] input#mship-4--MoneyBuy-userInput').type('0');
276
+ await expect(page.locator('[data-testid="Donate-example-9"] p:nth-child(3)')).toContainText('Please enter an amount between £1 and £25000 and up to 2 decimal places');
277
+
278
+ // enter amount 25001 should show error message
279
+ await page.locator('[data-testid="Donate-example-9"] input#mship-4--MoneyBuy-userInput').fill('');
280
+ await page.locator('[data-testid="Donate-example-9"] input#mship-4--MoneyBuy-userInput').type('25001');
281
+ await expect(page.locator('[data-testid="Donate-example-9"] p:nth-child(3)')).toContainText('Please enter an amount between £1 and £25000 and up to 2 decimal places');
282
+
283
+ // enter own amount in decimals should not show error message
284
+ await page.locator('[data-testid="Donate-example-9"] input#mship-4--MoneyBuy-userInput').fill('');
285
+ await page.locator('[data-testid="Donate-example-9"] input#mship-4--MoneyBuy-userInput').type('20.01');
286
+ await expect(page.locator('[data-testid="Donate-example-9"] button[type="submit"]')).toContainText('Donate £20.01');
287
+
288
+ // clicking the submit button should take to donate.comicrelief.com
289
+ await page.locator('[data-testid="Donate-example-9"] button[type="submit"]').click();
290
+
291
+ await page.close();
292
+ });
293
+ });
@@ -0,0 +1,109 @@
1
+ const { test, expect } = require('@playwright/test');
2
+
3
+ test.describe('Email Signup Form component', () => {
4
+ test('Email SignUp Form', async ({ page }) => {
5
+
6
+ await page.goto('/#emailsignupform');
7
+
8
+ await expect(page.locator('[data-testid="EmailSignUpForm-example-1"]')).toBeVisible();
9
+ await expect(page.locator('[data-testid="EmailSignUpForm-example-1"] #first-name')).toBeVisible();
10
+ await expect(page.locator('[data-testid="EmailSignUpForm-example-1"] #last-name')).toBeVisible();
11
+ await expect(page.locator('[data-testid="EmailSignUpForm-example-1"] #email')).toBeVisible();
12
+
13
+ // firstname field
14
+ const firstnamePlaceholder = page.locator('[aria-describedby="first-name"]');
15
+
16
+ // Get the 'placeholder' attribute
17
+ const placeholderAttribute = await firstnamePlaceholder.getAttribute('placeholder');
18
+
19
+ // Verify the 'placeholder' attribute
20
+ expect(placeholderAttribute).toBe('Enter your first name');
21
+
22
+ // validate firstname field
23
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #first-name').type('dwe$%£34');
24
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #last-name').type('dwe$%£34');
25
+
26
+ // firstname with special chars should show error message
27
+ await expect(page.locator('label[for="first-name"] div ~ span')).toContainText('This field only accepts letters and \' - and must start with a letter');
28
+
29
+ // firstname starting with a space should show error message
30
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #first-name').fill('');
31
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #first-name').type(' test firstname');
32
+ await expect(page.locator('label[for="first-name"] div ~ span')).toContainText('This field only accepts letters and \' - and must start with a letter');
33
+
34
+ // firstname starting with numbers should show error message
35
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #first-name').fill('');
36
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #first-name').type('1234567');
37
+ await expect(page.locator('label[for="first-name"] div ~ span')).toContainText('This field only accepts letters and \' - and must start with a letter');
38
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #first-name').fill('');
39
+
40
+ // lastname
41
+ const lastnamePlaceholder = page.locator('[aria-describedby="last-name"]');
42
+
43
+ // Get the 'placeholder' attribute
44
+ const lastnamePlaceholderAttribute = await lastnamePlaceholder.getAttribute('placeholder');
45
+
46
+ // Verify the 'placeholder' attribute
47
+ expect(lastnamePlaceholderAttribute).toBe('Enter your last name');
48
+
49
+ // validate lastname field
50
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #last-name').fill('');
51
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #last-name').type('dwe$%£34');
52
+
53
+ // lastname with special chars should show error message
54
+ await expect(page.locator('label[for="last-name"] div ~ span')).toContainText('This field only accepts letters and \' - and must start with a letter');
55
+
56
+ // lastname starting with a space should show error message
57
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #last-name').fill('');
58
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #last-name').type(' test firstname');
59
+ await expect(page.locator('label[for="last-name"] div ~ span')).toContainText('This field only accepts letters and \' - and must start with a letter');
60
+
61
+ // lastname starting with numbers should show error message
62
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #last-name').fill('');
63
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #last-name').type('1234567');
64
+ await expect(page.locator('label[for="last-name"] div ~ span')).toContainText('This field only accepts letters and \' - and must start with a letter');
65
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #last-name').fill('');
66
+
67
+ // email
68
+ const emailPlaceholder = page.locator('[aria-describedby="email"]');
69
+
70
+ // Get the 'placeholder' attribute
71
+ const emailPlaceholderAttribute = await emailPlaceholder.getAttribute('placeholder');
72
+
73
+ // Verify the 'placeholder' attribute
74
+ expect(emailPlaceholderAttribute).toBe('example@youremail.com');
75
+
76
+ // validate email field
77
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #email').type('email-signup@email.sls.comicrelief.com');
78
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #email').fill(''); // clear the email field
79
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #last-name').click();
80
+ await expect(page.locator('label[for="email"] div ~ span')).toContainText('Please enter your email address');
81
+
82
+ // email that has : should show error message
83
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #email').fill(''); // clear the email field
84
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #email').type('test:@£$%£test@comicrelief.com');
85
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #last-name').click();
86
+ await expect(page.locator('label[for="email"] div ~ span')).toContainText('Please enter a valid email address');
87
+
88
+ // email that has mix of special chars that's valid and not valid should show error message
89
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #email').fill(''); // clear the email field
90
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #email').type('Test0-9!#$%&\'*+/=?^_{|}~-@comicrelief_9-8.com.uk');
91
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #last-name').click();
92
+ await expect(page.locator('label[for="email"] div ~ span')).toBeHidden('');
93
+
94
+ // enter valid inputs should not show error messages
95
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #first-name').fill('');
96
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #first-name').type('test firstname');
97
+
98
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #last-name').fill('');
99
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #last-name').type('test lastname');
100
+
101
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #email').fill(''); // clear the email field
102
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] #email').type('email-signup@email.sls.comicrelief.com');
103
+
104
+ // submit the ESU form
105
+ await page.locator('[data-testid="EmailSignUpForm-example-1"] button[type="submit"] > span').click();
106
+
107
+ await page.close();
108
+ });
109
+ });
@@ -0,0 +1,67 @@
1
+ const { test, expect } = require('@playwright/test');
2
+
3
+ test.describe('footer component', () => {
4
+ test('Standard footer', async ({ page }) => {
5
+
6
+ await page.goto('/#footer');
7
+
8
+ await expect(page.locator('[data-testid="Footer-example-1"]')).toBeVisible();
9
+ // footer social icons should be visible
10
+ await expect(page.locator('[data-preview="Footer"] > div > div:nth-child(2) > footer[role="banner"] [title="Check out our Facebook page"]')).toBeVisible();
11
+ await expect(page.locator('[data-preview="Footer"] > div > div:nth-child(2) > footer[role="banner"] [title="Check out our Instagram account"]')).toBeVisible();
12
+ await expect(page.locator('[data-preview="Footer"] > div > div:nth-child(2) > footer[role="banner"] [title="Check out our Twitter account"]')).toBeVisible();
13
+ await expect(page.locator('[data-preview="Footer"] > div > div:nth-child(2) > footer[role="banner"] [title="Check out our YouTube channel"]')).toBeVisible();
14
+
15
+ // CR logo in the footer should be visible
16
+ await expect(page.locator('[data-preview="Footer"] > div > div:nth-child(2) > footer[role="banner"] [title="Go to Comic Relief homepage"]')).toBeVisible();
17
+
18
+ // footer menu should be visible
19
+ await expect(page.locator('[data-preview="Footer"] > div > div:nth-child(2) > footer[role="banner"] [aria-label="main-menu"]')).toBeVisible();
20
+
21
+ await page.close();
22
+ });
23
+
24
+ test('Overrides allowList functionality', async ({ page }) => {
25
+
26
+ await page.goto('/#footer');
27
+
28
+ await expect(page.locator('[data-testid="Footer-example-1"]')).toBeVisible();
29
+ // footer social icons should be visible
30
+ await expect(page.locator('[data-preview="Footer"] > div > div:nth-child(4) > footer[role="banner"] [title="Check out our Facebook page"]')).toBeVisible();
31
+ await expect(page.locator('[data-preview="Footer"] > div > div:nth-child(4) > footer[role="banner"] [title="Check out our Instagram account"]')).toBeVisible();
32
+ await expect(page.locator('[data-preview="Footer"] > div > div:nth-child(4) > footer[role="banner"] [title="Check out our Twitter account"]')).toBeVisible();
33
+ await expect(page.locator('[data-preview="Footer"] > div > div:nth-child(4) > footer[role="banner"] [title="Check out our YouTube channel"]')).toBeVisible();
34
+
35
+ // CR logo in the footer should be visible
36
+ await expect(page.locator('[data-preview="Footer"] > div > div:nth-child(4) > footer[role="banner"] [title="Go to Comic Relief homepage"]')).toBeVisible();
37
+
38
+ // footer menu should be visible
39
+ await expect(page.locator('[data-preview="Footer"] > div > div:nth-child(4) > footer[role="banner"] [aria-label="main-menu"]')).toBeVisible();
40
+
41
+ await page.close();
42
+ });
43
+
44
+ test('additional legal line footer', async ({ page }) => {
45
+
46
+ await page.goto('/#footer');
47
+
48
+ await expect(page.locator('[data-testid="Footer-example-1"]')).toBeVisible();
49
+
50
+ // legal line to the top of the footer should be present
51
+ await expect(page.locator('[data-preview="Footer"] > div > div:nth-child(6) > footer[role="banner"] > div > p')).toContainText('MR. MEN ™ LITTLE MISS ™ © 2022 THOIP (a SANRIO Company). All rights reserved.');
52
+
53
+ // footer social icons should be visible
54
+ await expect(page.locator('[data-preview="Footer"] > div > div:nth-child(4) > footer[role="banner"] [title="Check out our Facebook page"]')).toBeVisible();
55
+ await expect(page.locator('[data-preview="Footer"] > div > div:nth-child(6) > footer[role="banner"] [title="Check out our Instagram account"]')).toBeVisible();
56
+ await expect(page.locator('[data-preview="Footer"] > div > div:nth-child(6) > footer[role="banner"] [title="Check out our Twitter account"]')).toBeVisible();
57
+ await expect(page.locator('[data-preview="Footer"] > div > div:nth-child(6) > footer[role="banner"] [title="Check out our YouTube channel"]')).toBeVisible();
58
+
59
+ // CR logo in the footer should be visible
60
+ await expect(page.locator('[data-preview="Footer"] > div > div:nth-child(6) > footer[role="banner"] [title="Go to Comic Relief homepage"]')).toBeVisible();
61
+
62
+ // footer menu should be visible
63
+ await expect(page.locator('[data-preview="Footer"] > div > div:nth-child(6) > footer[role="banner"] [aria-label="main-menu"]')).toBeVisible();
64
+
65
+ await page.close();
66
+ });
67
+ });
@@ -0,0 +1,82 @@
1
+ const { test, expect } = require('@playwright/test');
2
+
3
+ test.describe('header component', () => {
4
+ test('Comic Relief header', async ({ page }) => {
5
+
6
+ await page.goto('/#header');
7
+
8
+ await expect(page.locator('[data-testid="Header-example-1"]')).toBeVisible();
9
+ // donate locator
10
+ await expect(page.locator('[data-testid="Header-example-1"] header[role="banner"] a[href="/donation"]')).toBeVisible();
11
+ // CR logo
12
+ await expect(page.locator('[data-testid="Header-example-1"] [title="Go to Comic Relief homepage"]')).toBeVisible();
13
+ // shop
14
+ await expect(page.locator('[data-testid="Header-example-1"] header[role="banner"] a[href*="/shop"]')).toBeVisible();
15
+
16
+ await page.close();
17
+ });
18
+
19
+ test('Sport Relief header', async ({ page }) => {
20
+
21
+ await page.goto('/#header');
22
+
23
+ await expect(page.locator('[data-testid="Header-example-3"]')).toBeVisible();
24
+ // donate locator
25
+ await expect(page.locator('[data-testid="Header-example-3"] header[role="banner"] a[href="/donation"]')).toBeVisible();
26
+ // SR logo
27
+ await expect(page.locator('[data-testid="Header-example-3"] header[role="banner"] a[href="/sportrelief"]')).toBeVisible();
28
+ // shop
29
+ await expect(page.locator('[data-testid="Header-example-3"] header[role="banner"] a[href*="/shop"]')).toBeVisible();
30
+
31
+ await page.close();
32
+ });
33
+
34
+ test('Pride header', async ({ page }) => {
35
+
36
+ await page.goto('/#header');
37
+
38
+ await expect(page.locator('[data-testid="Header-example-5"]')).toBeVisible();
39
+ // donate locator
40
+ await expect(page.locator('[data-testid="Header-example-5"] header[role="banner"] a[href="/donation"]')).toBeVisible();
41
+ // CR logo
42
+ await expect(page.locator('[data-testid="Header-example-5"] [title="Go to Comic Relief homepage"]')).toBeVisible();
43
+ // shop
44
+ await expect(page.locator('[data-testid="Header-example-5"] header[role="banner"] a[href*="/shop"]')).toBeVisible();
45
+
46
+ await page.close();
47
+ });
48
+
49
+ test('Comic Relief header with Search', async ({ page }) => {
50
+
51
+ await page.goto('/#header');
52
+
53
+ await expect(page.locator('[data-testid="Header-example-7"]')).toBeVisible();
54
+ // donate locator
55
+ await expect(page.locator('[data-testid="Header-example-7"] header[role="banner"] a[href="/donation"]')).toBeVisible();
56
+ // CR logo
57
+ await expect(page.locator('[data-testid="Header-example-7"] [title="Go to Comic Relief homepage"]')).toBeVisible();
58
+ // shop
59
+ await expect(page.locator('[data-testid="Header-example-7"] header[role="banner"] a[href*="/shop"]')).toBeVisible();
60
+ // search
61
+ await expect(page.locator('[data-testid="Header-example-7"] header[role="banner"] a[href="/search"]')).toBeVisible();
62
+
63
+ await page.close();
64
+ });
65
+
66
+ test('Comic Relief header with Search and Shop', async ({ page }) => {
67
+
68
+ await page.goto('/#header');
69
+
70
+ await expect(page.locator('[data-testid="Header-example-9"]')).toBeVisible();
71
+ // donate locator
72
+ await expect(page.locator('[data-testid="Header-example-9"] header[role="banner"] a[href="/donation"]')).toBeVisible();
73
+ // CR logo
74
+ await expect(page.locator('[data-testid="Header-example-9"] [title="Go to Comic Relief homepage"]')).toBeVisible();
75
+ // shop icon
76
+ await expect(page.locator('[data-testid="Header-example-9"] header[role="banner"] [title="Shop"]')).toBeVisible();
77
+ // search
78
+ await expect(page.locator('[data-testid="Header-example-9"] header[role="banner"] a[href="/search"]')).toBeVisible();
79
+
80
+ await page.close();
81
+ });
82
+ });