@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.
- package/.github/workflows/main.yml +22 -24
- package/dist/components/Atoms/Button/Button.js +21 -15
- package/dist/components/Atoms/Button/Button.test.js +3 -3
- package/dist/components/Atoms/ButtonWithStates/ButtonWithStates.js +19 -22
- package/dist/components/Atoms/Checkbox/Checkbox.js +42 -26
- package/dist/components/Atoms/Checkbox/Checkbox.test.js +3 -3
- package/dist/components/Atoms/Confetti/Confetti.js +20 -23
- package/dist/components/Atoms/Confetti/_TriggerConfetti.js +4 -11
- package/dist/components/Atoms/ErrorText/ErrorText.js +15 -11
- package/dist/components/Atoms/ErrorText/ErrorText.test.js +3 -3
- package/dist/components/Atoms/Icons/Arrow.js +16 -15
- package/dist/components/Atoms/Icons/AtSign.js +9 -9
- package/dist/components/Atoms/Icons/Chevron.js +16 -15
- package/dist/components/Atoms/Icons/Curve.js +16 -18
- package/dist/components/Atoms/Icons/Download.js +8 -8
- package/dist/components/Atoms/Icons/External.js +8 -8
- package/dist/components/Atoms/Icons/Favourite.js +8 -8
- package/dist/components/Atoms/Icons/Internal.js +8 -8
- package/dist/components/Atoms/Icons/index.js +8 -8
- package/dist/components/Atoms/Input/Input.js +38 -33
- package/dist/components/Atoms/Input/input.test.js +3 -3
- package/dist/components/Atoms/Label/Label.js +28 -23
- package/dist/components/Atoms/Link/Link.js +24 -29
- package/dist/components/Atoms/Link/Link.style.js +51 -40
- package/dist/components/Atoms/Link/Link.test.js +9 -9
- package/dist/components/Atoms/Logo/Logo.js +16 -18
- package/dist/components/Atoms/Logo/Logo.test.js +3 -3
- package/dist/components/Atoms/Pagination/Item/Item.js +7 -7
- package/dist/components/Atoms/Pagination/Item/Item.style.js +35 -28
- package/dist/components/Atoms/Pagination/List/List.js +21 -19
- package/dist/components/Atoms/Pagination/Pagination.js +41 -49
- package/dist/components/Atoms/Pagination/Pagination.test.js +54 -108
- package/dist/components/Atoms/Pagination/Utils/PaginationCalculator.js +15 -15
- package/dist/components/Atoms/Picture/Picture.js +34 -44
- package/dist/components/Atoms/Picture/Picture.test.js +5 -5
- package/dist/components/Atoms/RadioButton/RadioButton.js +35 -23
- package/dist/components/Atoms/RadioButton/RadioButton.test.js +3 -3
- package/dist/components/Atoms/RichText/RichText.js +9 -11
- package/dist/components/Atoms/RichText/RichText.test.js +4 -4
- package/dist/components/Atoms/Select/Select.js +56 -49
- package/dist/components/Atoms/Select/Select.test.js +3 -3
- package/dist/components/Atoms/SocialIcons/Icon/Icon.js +13 -13
- package/dist/components/Atoms/SocialIcons/SocialIcons.js +25 -23
- package/dist/components/Atoms/SocialIcons/SocialIcons.test.js +7 -7
- package/dist/components/Atoms/SocialIcons/Utils/Icons.js +3 -3
- package/dist/components/Atoms/SocialIcons/Utils/Links.js +19 -20
- package/dist/components/Atoms/SocialIcons/assets/X-white-Subtract.svg +3 -0
- package/dist/components/Atoms/Text/Text.js +62 -41
- package/dist/components/Atoms/Text/Text.test.js +11 -11
- package/dist/components/Atoms/TextArea/TextArea.js +18 -17
- package/dist/components/Atoms/TextArea/TextArea.test.js +3 -3
- package/dist/components/Atoms/TextInputWithDropdown/TextInputWithDropdown.js +69 -86
- package/dist/components/Atoms/TextInputWithDropdown/TextInputWithDropdown.style.js +23 -15
- package/dist/components/Atoms/TextInputWithDropdown/TextInputWithDropdown.test.js +15 -19
- package/dist/components/Molecules/Accordion/Accordion.js +35 -32
- package/dist/components/Molecules/Accordion/Accordion.test.js +3 -3
- package/dist/components/Molecules/ArticleTeaser/ArticleTeaser.js +81 -52
- package/dist/components/Molecules/ArticleTeaser/ArticleTeaser.test.js +5 -5
- package/dist/components/Molecules/Banner/Banner.js +21 -13
- package/dist/components/Molecules/Banner/Banner.test.js +3 -3
- package/dist/components/Molecules/Box/Box.js +33 -27
- package/dist/components/Molecules/Box/Box.test.js +5 -5
- package/dist/components/Molecules/Card/Card.js +22 -22
- package/dist/components/Molecules/Card/Card.test.js +5 -5
- package/dist/components/Molecules/CardDs/CardDs.js +80 -55
- package/dist/components/Molecules/CardDs/CardDs.test.js +3 -3
- package/dist/components/Molecules/Chip/Chip.js +8 -6
- package/dist/components/Molecules/Chip/Chip.style.js +48 -28
- package/dist/components/Molecules/Chip/Chip.test.js +4 -6
- package/dist/components/Molecules/Countdown/Countdown.js +28 -36
- package/dist/components/Molecules/Countdown/Countdown.style.js +3 -3
- package/dist/components/Molecules/Descriptor/Descriptor.js +32 -26
- package/dist/components/Molecules/Descriptor/Descriptor.test.js +5 -5
- package/dist/components/Molecules/DoubleCopy/DoubleCopy.js +6 -4
- package/dist/components/Molecules/DoubleCopy/DoubleCopy.style.js +7 -5
- package/dist/components/Molecules/DoubleCopy/DoubleCopy.test.js +4 -4
- package/dist/components/Molecules/HeroBanner/HeroBanner.js +13 -17
- package/dist/components/Molecules/InfoBanner/InfoBanner.js +22 -18
- package/dist/components/Molecules/InfoBanner/InfoBanner.test.js +10 -10
- package/dist/components/Molecules/Logos/Logos.js +26 -14
- package/dist/components/Molecules/Logos/Logos.md +5 -0
- package/dist/components/Molecules/Lookup/Lookup.js +49 -84
- package/dist/components/Molecules/PartnerLink/PartnerLink.js +10 -11
- package/dist/components/Molecules/PartnerLink/PartnerLink.style.js +15 -9
- package/dist/components/Molecules/PartnerLink/PartnerLink.test.js +3 -3
- package/dist/components/Molecules/Promo/Promo.js +30 -36
- package/dist/components/Molecules/Promo/Promo.style.js +44 -31
- package/dist/components/Molecules/Promo/Promo.test.js +6 -6
- package/dist/components/Molecules/Promo/_ProgressRing.js +13 -19
- package/dist/components/Molecules/Promo/_PromoVideo.js +25 -34
- package/dist/components/Molecules/Promo/_PromoVideoButton.js +7 -7
- package/dist/components/Molecules/Promo/_PromoVideoButton.style.js +68 -41
- package/dist/components/Molecules/SchoolLookup/SchoolLookup.js +29 -52
- package/dist/components/Molecules/SchoolLookup/SchoolLookup.test.js +4 -4
- package/dist/components/Molecules/SearchInput/SearchInput.js +8 -8
- package/dist/components/Molecules/SearchInput/SearchInput.style.js +22 -14
- package/dist/components/Molecules/SearchInput/SearchInput.test.js +4 -4
- package/dist/components/Molecules/SearchResult/SearchResult.js +43 -29
- package/dist/components/Molecules/SearchResult/SearchResult.test.js +9 -9
- package/dist/components/Molecules/ShareButton/ShareButton.js +22 -26
- package/dist/components/Molecules/ShareButton/ShareButton.style.js +5 -5
- package/dist/components/Molecules/ShareButton/ShareButton.test.js +3 -3
- package/dist/components/Molecules/ShareButton/assets/ShareIcons.js +2 -2
- package/dist/components/Molecules/SimpleSchoolLookup/SimpleSchoolLookup.js +28 -55
- package/dist/components/Molecules/SingleMessage/SingleMessage.js +99 -123
- package/dist/components/Molecules/SingleMessage/SingleMessage.style.js +132 -81
- package/dist/components/Molecules/SingleMessage/SingleMessage.test.js +13 -13
- package/dist/components/Molecules/SingleMessageDS/SingleMessageDs.js +31 -40
- package/dist/components/Molecules/SingleMessageDS/SingleMessageDs.style.js +85 -49
- package/dist/components/Molecules/SingleMessageDS/SingleMessageDs.test.js +3 -3
- package/dist/components/Molecules/Typeahead/Typeahead.js +47 -84
- package/dist/components/Molecules/Typeahead/Typeahead.test.js +12 -35
- package/dist/components/Molecules/VideoBanner/VideoBanner.js +20 -25
- package/dist/components/Molecules/VideoBanner/VideoBanner.test.js +4 -4
- package/dist/components/Organisms/CookieBanner/CookieBanner.js +7 -5
- package/dist/components/Organisms/CookieBanner/CookieBanner.style.js +21 -13
- package/dist/components/Organisms/CookieBanner/CookieBanner.test.js +5 -5
- package/dist/components/Organisms/Donate/Donate.js +34 -37
- package/dist/components/Organisms/Donate/Donate.style.js +85 -53
- package/dist/components/Organisms/Donate/Donate.test.js +10 -10
- package/dist/components/Organisms/Donate/Form/Form.js +53 -78
- package/dist/components/Organisms/Donate/Form/PopUpComponent.js +25 -30
- package/dist/components/Organisms/Donate/GivingSelector/GivingSelector.js +11 -13
- package/dist/components/Organisms/Donate/GivingSelector/GivingSelector.style.js +38 -22
- package/dist/components/Organisms/Donate/MoneyBuy/MoneyBuy.js +47 -30
- package/dist/components/Organisms/EmailSignUp/EmailSignUp.style.js +63 -37
- package/dist/components/Organisms/EmailSignUp/EmailSignUp.test.js +12 -12
- package/dist/components/Organisms/EmailSignUp/EmailSignUpForm.js +23 -43
- package/dist/components/Organisms/EmailSignUp/_EmailSignUp.js +25 -21
- package/dist/components/Organisms/EmailSignUp/_EmailSignUpConfig.js +10 -9
- package/dist/components/Organisms/EmailSignUp/_TextInput.js +20 -18
- package/dist/components/Organisms/Footer/Footer.js +10 -10
- package/dist/components/Organisms/Footer/Footer.style.js +27 -21
- package/dist/components/Organisms/Footer/Footer.test.js +3 -3
- package/dist/components/Organisms/Footer/Nav/Nav.js +59 -70
- package/dist/components/Organisms/Footer/Nav/Nav.style.js +77 -43
- package/dist/components/Organisms/Header/Burger/BurgerMenu.js +6 -4
- package/dist/components/Organisms/Header/Burger/BurgerMenu.style.js +37 -21
- package/dist/components/Organisms/Header/Header.js +8 -8
- package/dist/components/Organisms/Header/Header.style.js +27 -19
- package/dist/components/Organisms/Header/Nav/Nav.js +39 -50
- package/dist/components/Organisms/Header/Nav/Nav.style.js +103 -57
- package/dist/components/Organisms/Header/header.test.js +1 -1
- package/dist/components/Organisms/ImpactSlider/ImpactMoneybuys.style.js +32 -29
- package/dist/components/Organisms/ImpactSlider/ImpactSlider.js +19 -22
- package/dist/components/Organisms/ImpactSlider/ImpactSlider.style.js +38 -24
- package/dist/components/Organisms/ImpactSlider/Slider.style.js +8 -14
- package/dist/components/Organisms/ImpactSlider/_ImpactMoneybuys.js +11 -11
- package/dist/components/Organisms/ImpactSlider/_Slider.js +9 -7
- package/dist/components/Organisms/ImpactSlider/_utils.js +11 -11
- package/dist/components/Organisms/MarketingPreferencesDS/MarketingPreferencesDS.style.js +61 -38
- package/dist/components/Organisms/MarketingPreferencesDS/MarketingPreferencesDSForm.js +24 -16
- package/dist/components/Organisms/MarketingPreferencesDS/_AssociatedFields.js +1 -1
- package/dist/components/Organisms/MarketingPreferencesDS/_CheckAnswer.js +20 -16
- package/dist/components/Organisms/MarketingPreferencesDS/_DefaultCopy.js +3 -3
- package/dist/components/Organisms/MarketingPreferencesDS/_MarketingPreferencesDS.js +46 -36
- package/dist/components/Organisms/MarketingPreferencesDS/_MarketingPrefsConfig.js +21 -34
- package/dist/components/Organisms/MarketingPreferencesDS/_TextInput.js +20 -18
- package/dist/components/Organisms/Membership/Form/Form.js +48 -81
- package/dist/components/Organisms/Membership/Membership.js +17 -15
- package/dist/components/Organisms/Membership/Membership.style.js +81 -51
- package/dist/components/Organisms/Membership/Membership.test.js +4 -4
- package/dist/components/Organisms/Membership/MoneyBox/MoneyBox.js +37 -26
- package/dist/hoc/shallowWithTheme.js +1 -1
- package/dist/index.js +67 -67
- package/dist/styleguide/CRLogo.js +2 -2
- package/dist/styleguide/StyleGuideRenderer.js +9 -7
- package/dist/styleguide/ThemeWrapper.js +5 -3
- package/dist/styleguide/data/data.js +3 -3
- package/dist/theme/crTheme/buttonColors.js +6 -5
- package/dist/theme/crTheme/colors.js +4 -3
- package/dist/theme/crTheme/fontSizes.js +4 -3
- package/dist/theme/crTheme/linkStyles.js +6 -5
- package/dist/theme/crTheme/theme.js +1 -1
- package/dist/theme/shared/breakpoint.js +4 -3
- package/dist/theme/shared/fontFamilies.js +5 -4
- package/dist/theme/shared/hideVisually.js +1 -1
- package/dist/theme/shared/size.js +4 -3
- package/dist/theme/shared/spacing.js +2 -2
- package/dist/theme/shared/zIndex.js +3 -3
- package/dist/theme/srTheme/buttonColors.js +6 -5
- package/dist/theme/srTheme/colors.js +4 -3
- package/dist/theme/srTheme/fontSizes.js +4 -3
- package/dist/theme/srTheme/linkStyles.js +6 -5
- package/dist/theme/srTheme/theme.js +1 -1
- package/dist/utils/Membership.js +30 -27
- package/dist/utils/ShareButton/sharePopUpHelper.js +8 -8
- package/dist/utils/ShareButton/shareTracking.js +1 -1
- package/dist/utils/ShareButton/shareUrlHelper.js +3 -3
- package/dist/utils/allowListed.js +3 -5
- package/dist/utils/allowListed.test.js +3 -3
- package/dist/utils/internalLinkHelper.js +8 -10
- package/dist/utils/navHelper.js +2 -2
- package/package.json +12 -9
- package/playwright/components/atoms/checkbox.spec.js +64 -0
- package/playwright/components/atoms/input.spec.js +158 -0
- package/playwright/components/atoms/label.spec.js +29 -0
- package/playwright/components/atoms/link.spec.js +48 -0
- package/playwright/components/atoms/radioButton.spec.js +30 -0
- package/playwright/components/atoms/select.spec.js +36 -0
- package/playwright/components/atoms/textArea.spec.js +39 -0
- package/playwright/components/atoms/textInputWithDropdown.spec.js +23 -0
- package/playwright/components/molecules/accordian.spec.js +20 -0
- package/playwright/components/molecules/schoolLookup.spec.js +26 -0
- package/playwright/components/molecules/searchInput.spec.js +24 -0
- package/playwright/components/molecules/shareButton.spec.js +32 -0
- package/playwright/components/molecules/simpleSchoolLookUp.spec.js +35 -0
- package/playwright/components/molecules/typeahead.spec.js +27 -0
- package/playwright/components/organisms/donate.spec.js +293 -0
- package/playwright/components/organisms/emailSignUpForm.spec.js +109 -0
- package/playwright/components/organisms/footer.spec.js +67 -0
- package/playwright/components/organisms/header.spec.js +82 -0
- package/playwright/components/organisms/impactSlider.spec.js +292 -0
- package/playwright/components/organisms/marketingPreferences.spec.js +220 -0
- package/playwright/components/organisms/membership.spec.js +47 -0
- package/playwright.config.js +49 -0
- package/src/components/Atoms/SocialIcons/Utils/Icons.js +1 -1
- package/src/components/Atoms/SocialIcons/assets/X-white-Subtract.svg +3 -0
- package/src/components/Molecules/Logos/Logos.js +18 -6
- package/src/components/Molecules/Logos/Logos.md +5 -0
- package/src/components/Organisms/ImpactSlider/_ImpactMoneybuys.js +3 -4
- package/src/components/Organisms/Membership/Membership.test.js +1 -1
- package/cypress/e2e/components/atoms/button.cy.js +0 -102
- package/cypress/e2e/components/atoms/buttonWithStates.cy.js +0 -47
- package/cypress/e2e/components/atoms/checkbox.cy.js +0 -70
- package/cypress/e2e/components/atoms/confetti.cy.js +0 -46
- package/cypress/e2e/components/atoms/errorText.cy.js +0 -45
- package/cypress/e2e/components/atoms/input.cy.js +0 -157
- package/cypress/e2e/components/atoms/label.cy.js +0 -93
- package/cypress/e2e/components/atoms/link.cy.js +0 -190
- package/cypress/e2e/components/atoms/logo.cy.js +0 -132
- package/cypress/e2e/components/atoms/pagination.cy.js +0 -191
- package/cypress/e2e/components/atoms/picture.cy.js +0 -130
- package/cypress/e2e/components/atoms/radioButton.cy.js +0 -76
- package/cypress/e2e/components/atoms/richText.cy.js +0 -70
- package/cypress/e2e/components/atoms/select.cy.js +0 -84
- package/cypress/e2e/components/atoms/socialIcons.cy.js +0 -162
- package/cypress/e2e/components/atoms/text.cy.js +0 -169
- package/cypress/e2e/components/atoms/textArea.cy.js +0 -89
- package/cypress/e2e/components/atoms/textInputWithDrop.cy.js +0 -76
- package/cypress/e2e/components/molecules/accordion.cy.js +0 -67
- package/cypress/e2e/components/molecules/articleTeaser.cy.js +0 -105
- package/cypress/e2e/components/molecules/banner.cy.js +0 -67
- package/cypress/e2e/components/molecules/box.cy.js +0 -104
- package/cypress/e2e/components/molecules/card.cy.js +0 -105
- package/cypress/e2e/components/molecules/cardDs.cy.js +0 -198
- package/cypress/e2e/components/molecules/chip.cy.js +0 -68
- package/cypress/e2e/components/molecules/countdown.cy.js +0 -71
- package/cypress/e2e/components/molecules/descriptor.cy.js +0 -142
- package/cypress/e2e/components/molecules/doubleCopy.cy.js +0 -79
- package/cypress/e2e/components/molecules/heroBanner.cy.js +0 -69
- package/cypress/e2e/components/molecules/infoBanner.cy.js +0 -69
- package/cypress/e2e/components/molecules/partnerLink.cy.js +0 -68
- package/cypress/e2e/components/molecules/promo.cy.js +0 -74
- package/cypress/e2e/components/molecules/schoolLookup.cy.js +0 -83
- package/cypress/e2e/components/molecules/searchInput.cy.js +0 -72
- package/cypress/e2e/components/molecules/searchResult.cy.js +0 -191
- package/cypress/e2e/components/molecules/shareButton.cy.js +0 -76
- package/cypress/e2e/components/molecules/simpleSchoolLookup.cy.js +0 -83
- package/cypress/e2e/components/molecules/singleMessage.cy.js +0 -502
- package/cypress/e2e/components/molecules/singleMessageDs.cy.js +0 -234
- package/cypress/e2e/components/molecules/typeahead.cy.js +0 -97
- package/cypress/e2e/components/molecules/videoBanner.cy.js +0 -132
- package/cypress/e2e/components/organisms/cookieBanner.cy.js +0 -80
- package/cypress/e2e/components/organisms/donate.cy.js +0 -284
- package/cypress/e2e/components/organisms/emailSignUp.cy.js +0 -54
- package/cypress/e2e/components/organisms/footer.cy.js +0 -168
- package/cypress/e2e/components/organisms/header.cy.js +0 -138
- package/cypress/e2e/components/organisms/impactSlider.cy.js +0 -72
- package/cypress/e2e/components/organisms/marketingPreferencesDSForm.cy.js +0 -589
- package/cypress/e2e/components/organisms/membership.cy.js +0 -122
- package/cypress/fixtures/example.json +0 -5
- package/cypress/plugins/index.js +0 -21
- package/cypress/support/commands.js +0 -25
- package/cypress/support/e2e.js +0 -36
- package/cypress.config.js +0 -15
- package/dist/components/Atoms/SocialIcons/assets/x-logo.svg +0 -3
- 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.
|
|
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>/
|
|
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
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
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
|
+
});
|