@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
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
const { test, expect } = require('@playwright/test');
|
|
2
|
+
|
|
3
|
+
test.describe('impact slider component - 1', () => {
|
|
4
|
+
test('impact slider - sliding to £70', async ({ page }) => {
|
|
5
|
+
|
|
6
|
+
await page.goto('/#impactslider');
|
|
7
|
+
|
|
8
|
+
// Ensure that the slider and its handle are visible
|
|
9
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"]')).toBeVisible();
|
|
10
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] #ImpactSlider > div:nth-child(4)')).toBeVisible();
|
|
11
|
+
|
|
12
|
+
// slider selector
|
|
13
|
+
const sliderSelector = '[data-testid="ImpactSlider-example-1"] #ImpactSlider';
|
|
14
|
+
const slider = await page.$(sliderSelector);
|
|
15
|
+
|
|
16
|
+
const moneyBuyElement = page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-1"]');
|
|
17
|
+
const moneyBuyText = await moneyBuyElement.innerText();
|
|
18
|
+
console.log('Target initially: ', moneyBuyText);
|
|
19
|
+
|
|
20
|
+
if (slider) {
|
|
21
|
+
// Get the bounding box of the slider
|
|
22
|
+
let sliderBound = await slider.boundingBox();
|
|
23
|
+
|
|
24
|
+
// Get the target position for the mouse move to a donation of £70
|
|
25
|
+
const targetPosition = sliderBound.width * (70 / 100);
|
|
26
|
+
|
|
27
|
+
// Perform mouse actions to simulate dragging the slider handle
|
|
28
|
+
await page.mouse.move(sliderBound.x, sliderBound.y + sliderBound.height / 2);
|
|
29
|
+
await page.mouse.down();
|
|
30
|
+
|
|
31
|
+
while (sliderBound.width * (parseFloat(await moneyBuyElement.innerText()) / 100) !== targetPosition) {
|
|
32
|
+
await page.mouse.move(sliderBound.x + targetPosition, sliderBound.y + sliderBound.height / 2);
|
|
33
|
+
sliderBound = await slider.boundingBox();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
await page.mouse.up();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] > [data-preview="ImpactSlider"] > div > div > div > p')).toContainText('A donation of £70 could help pay for:');
|
|
40
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-1"] [data-testid="moneybuy-amount"]')).toContainText('70');
|
|
41
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-2"] [data-testid="moneybuy-amount"]')).toContainText('7');
|
|
42
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-3"] [data-testid="moneybuy-amount"]')).toContainText('4');
|
|
43
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-4"] [data-testid="moneybuy-amount"]')).toContainText('3');
|
|
44
|
+
|
|
45
|
+
// donate now button should have the amount as £70
|
|
46
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] button[type="submit"]')).toContainText('Donate £70 now');
|
|
47
|
+
|
|
48
|
+
await page.waitForTimeout(5000);
|
|
49
|
+
await page.close();
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
test('impact slider - sliding to the maximum amount £100', async ({ page }) => {
|
|
53
|
+
|
|
54
|
+
await page.goto('/#impactslider');
|
|
55
|
+
|
|
56
|
+
// Ensure that the slider and its handle are visible
|
|
57
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"]')).toBeVisible();
|
|
58
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] #ImpactSlider > div:nth-child(4)')).toBeVisible();
|
|
59
|
+
|
|
60
|
+
// slider selector
|
|
61
|
+
const sliderSelector = '[data-testid="ImpactSlider-example-1"] #ImpactSlider';
|
|
62
|
+
const slider = await page.$(sliderSelector);
|
|
63
|
+
|
|
64
|
+
const moneyBuyElement = page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-1"]');
|
|
65
|
+
const moneyBuyText = await moneyBuyElement.innerText();
|
|
66
|
+
console.log('Target initially: ', moneyBuyText);
|
|
67
|
+
|
|
68
|
+
if (slider) {
|
|
69
|
+
// Get the bounding box of the slider
|
|
70
|
+
let sliderBound = await slider.boundingBox();
|
|
71
|
+
|
|
72
|
+
// Get the target position for the mouse move to a donation of £100
|
|
73
|
+
const targetPosition = sliderBound.width * (100 / 100);
|
|
74
|
+
|
|
75
|
+
// Perform mouse actions to simulate dragging the slider handle
|
|
76
|
+
await page.mouse.move(sliderBound.x, sliderBound.y + sliderBound.height / 2);
|
|
77
|
+
await page.mouse.down();
|
|
78
|
+
|
|
79
|
+
while (sliderBound.width * (parseFloat(await moneyBuyElement.innerText()) / 100) !== targetPosition) {
|
|
80
|
+
await page.mouse.move(sliderBound.x + targetPosition, sliderBound.y + sliderBound.height / 2);
|
|
81
|
+
sliderBound = await slider.boundingBox();
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
await page.mouse.up();
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] > [data-preview="ImpactSlider"] > div > div > div > p')).toContainText('A donation of £100 could help pay for:');
|
|
88
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-1"] [data-testid="moneybuy-amount"]')).toContainText('100');
|
|
89
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-2"] [data-testid="moneybuy-amount"]')).toContainText('10');
|
|
90
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-3"] [data-testid="moneybuy-amount"]')).toContainText('6');
|
|
91
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-4"] [data-testid="moneybuy-amount"]')).toContainText('5');
|
|
92
|
+
|
|
93
|
+
// donate now button should have the amount as £100
|
|
94
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] button[type="submit"]')).toContainText('Donate £100 now');
|
|
95
|
+
|
|
96
|
+
await page.waitForTimeout(5000);
|
|
97
|
+
await page.close();
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
test('impact slider - sliding to the minimum amount £25', async ({ page }) => {
|
|
101
|
+
|
|
102
|
+
await page.goto('/#impactslider');
|
|
103
|
+
|
|
104
|
+
// Ensure that the slider and its handle are visible
|
|
105
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"]')).toBeVisible();
|
|
106
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] #ImpactSlider > div:nth-child(4)')).toBeVisible();
|
|
107
|
+
|
|
108
|
+
// slider selector
|
|
109
|
+
const sliderSelector = '[data-testid="ImpactSlider-example-1"] #ImpactSlider';
|
|
110
|
+
const slider = await page.$(sliderSelector);
|
|
111
|
+
|
|
112
|
+
const moneyBuyElement = page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-1"]');
|
|
113
|
+
const moneyBuyText = await moneyBuyElement.innerText();
|
|
114
|
+
console.log('Target initially: ', moneyBuyText);
|
|
115
|
+
|
|
116
|
+
if (slider) {
|
|
117
|
+
// Get the bounding box of the slider
|
|
118
|
+
let sliderBound = await slider.boundingBox();
|
|
119
|
+
|
|
120
|
+
// Get the target position for the mouse move to a donation of £25
|
|
121
|
+
const targetPosition = sliderBound.width * (25 / 100);
|
|
122
|
+
|
|
123
|
+
// Perform mouse actions to simulate dragging the slider handle
|
|
124
|
+
await page.mouse.move(sliderBound.x, sliderBound.y + sliderBound.height / 2);
|
|
125
|
+
await page.mouse.down();
|
|
126
|
+
|
|
127
|
+
while (sliderBound.width * (parseFloat(await moneyBuyElement.innerText()) / 100) !== targetPosition) {
|
|
128
|
+
await page.mouse.move(sliderBound.x + targetPosition, sliderBound.y + sliderBound.height / 2);
|
|
129
|
+
sliderBound = await slider.boundingBox();
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
await page.mouse.up();
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] > [data-preview="ImpactSlider"] > div > div > div > p')).toContainText('A donation of £25 could help pay for:');
|
|
136
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-1"] [data-testid="moneybuy-amount"]')).toContainText('25');
|
|
137
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-2"] [data-testid="moneybuy-amount"]')).toContainText('2');
|
|
138
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-3"] [data-testid="moneybuy-amount"]')).toContainText('1');
|
|
139
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-4"] [data-testid="moneybuy-amount"]')).toContainText('1');
|
|
140
|
+
|
|
141
|
+
// donate now button should have the amount as £25
|
|
142
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] button[type="submit"]')).toContainText('Donate £25 now');
|
|
143
|
+
|
|
144
|
+
await page.waitForTimeout(5000);
|
|
145
|
+
await page.close();
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
test('impact slider - moving the slider to £80 and then back to £50', async ({ page }) => {
|
|
149
|
+
await page.goto('/#impactslider');
|
|
150
|
+
|
|
151
|
+
// Ensure that the slider and its handle are visible
|
|
152
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"]')).toBeVisible();
|
|
153
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] #ImpactSlider > div:nth-child(4)')).toBeVisible();
|
|
154
|
+
|
|
155
|
+
const sliderSelector = '[data-testid="ImpactSlider-example-1"] #ImpactSlider';
|
|
156
|
+
const slider = await page.$(sliderSelector);
|
|
157
|
+
|
|
158
|
+
const moneyBuyElement = page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-1"]');
|
|
159
|
+
const moneyBuyText = await moneyBuyElement.innerText();
|
|
160
|
+
console.log('Target initially: ', moneyBuyText);
|
|
161
|
+
|
|
162
|
+
let targetAmountBeforeMoving;
|
|
163
|
+
let sliderBound;
|
|
164
|
+
|
|
165
|
+
// drag the slider to the right to increase the amount to £80
|
|
166
|
+
if (slider) {
|
|
167
|
+
// Get the bounding box of the slider
|
|
168
|
+
sliderBound = await slider.boundingBox();
|
|
169
|
+
|
|
170
|
+
// Get the target position for the mouse move to a donation of £80
|
|
171
|
+
const targetPosition80 = sliderBound.width * (80 / 100);
|
|
172
|
+
|
|
173
|
+
// Perform mouse actions to simulate dragging the slider handle to 80
|
|
174
|
+
await page.mouse.move(sliderBound.x, sliderBound.y + sliderBound.height / 2);
|
|
175
|
+
await page.mouse.down();
|
|
176
|
+
|
|
177
|
+
while (sliderBound.width * (parseFloat(await moneyBuyElement.innerText()) / 100) !== targetPosition80) {
|
|
178
|
+
await page.mouse.move(sliderBound.x + targetPosition80, sliderBound.y + sliderBound.height / 2);
|
|
179
|
+
sliderBound = await slider.boundingBox();
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
await page.mouse.up();
|
|
183
|
+
|
|
184
|
+
// Update targetAmountBeforeMoving after the first slider move
|
|
185
|
+
targetAmountBeforeMoving = parseFloat(await moneyBuyElement.innerText());
|
|
186
|
+
console.log('Slider increased to amount: ', targetAmountBeforeMoving);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Validate that the slider is at £80
|
|
190
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] > [data-preview="ImpactSlider"] > div > div > div > p')).toContainText('A donation of £80 could help pay for:');
|
|
191
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-1"] [data-testid="moneybuy-amount"]')).toContainText('80');
|
|
192
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-2"] [data-testid="moneybuy-amount"]')).toContainText('8');
|
|
193
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-3"] [data-testid="moneybuy-amount"]')).toContainText('5');
|
|
194
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-4"] [data-testid="moneybuy-amount"]')).toContainText('4');
|
|
195
|
+
|
|
196
|
+
// donate now button should have the amount as £80
|
|
197
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] button[type="submit"]')).toContainText('Donate £80 now');
|
|
198
|
+
|
|
199
|
+
// add a short wait for the slider to move back from £80 to £50
|
|
200
|
+
await page.waitForTimeout(5000);
|
|
201
|
+
|
|
202
|
+
// drag the slider to the left to decrease the amount to £50
|
|
203
|
+
if (slider) {
|
|
204
|
+
// Get the bounding box of the slider
|
|
205
|
+
sliderBound = await slider.boundingBox();
|
|
206
|
+
|
|
207
|
+
// Get the target position for the mouse move to a donation of £80
|
|
208
|
+
const targetPosition45 = sliderBound.width * (50 / 100);
|
|
209
|
+
|
|
210
|
+
// Perform mouse actions to simulate dragging the slider handle to 80
|
|
211
|
+
await page.mouse.move(sliderBound.x, sliderBound.y + sliderBound.height / 2);
|
|
212
|
+
await page.mouse.down();
|
|
213
|
+
|
|
214
|
+
while (sliderBound.width * (parseFloat(await moneyBuyElement.innerText()) / 100) !== targetPosition45) {
|
|
215
|
+
await page.mouse.move(sliderBound.x + targetPosition45, sliderBound.y + sliderBound.height / 2);
|
|
216
|
+
sliderBound = await slider.boundingBox();
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
await page.mouse.down();
|
|
220
|
+
|
|
221
|
+
await page.waitForTimeout(2000);
|
|
222
|
+
|
|
223
|
+
// Update targetAmountBeforeMoving after the first slider move
|
|
224
|
+
targetAmountBeforeMoving = parseFloat(await moneyBuyElement.innerText());
|
|
225
|
+
console.log('Slider decreased to amount: ', targetAmountBeforeMoving);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
await page.waitForTimeout(2000);
|
|
229
|
+
|
|
230
|
+
// Validate that the slider is at £50
|
|
231
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] > [data-preview="ImpactSlider"] > div > div > div > p')).toContainText('A donation of £50 could help pay for:');
|
|
232
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-1"] [data-testid="moneybuy-amount"]')).toContainText('50');
|
|
233
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-2"] [data-testid="moneybuy-amount"]')).toContainText('5');
|
|
234
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-3"] [data-testid="moneybuy-amount"]')).toContainText('3');
|
|
235
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] [data-testid="impact-slider--moneybuy-4"] [data-testid="moneybuy-amount"]')).toContainText('2');
|
|
236
|
+
|
|
237
|
+
// donate now button should have the amount as £50
|
|
238
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-1"] button[type="submit"]')).toContainText('Donate £50 now');
|
|
239
|
+
|
|
240
|
+
await page.close();
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
test.describe('impact slider component - 2', () => {
|
|
245
|
+
test('impact slider - sliding to £45', async ({ page }) => {
|
|
246
|
+
|
|
247
|
+
await page.goto('/#impactslider');
|
|
248
|
+
|
|
249
|
+
// Ensure that the slider and its handle are visible
|
|
250
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-3"]')).toBeVisible();
|
|
251
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-3"] #ImpactSlider > div:nth-child(4)')).toBeVisible();
|
|
252
|
+
|
|
253
|
+
// slider selector
|
|
254
|
+
const sliderSelector = '[data-testid="ImpactSlider-example-3"] #ImpactSlider';
|
|
255
|
+
const slider = await page.$(sliderSelector);
|
|
256
|
+
|
|
257
|
+
const moneyBuyElement = page.locator('[data-testid="ImpactSlider-example-3"] [data-testid="impact-slider--moneybuy-1"]');
|
|
258
|
+
const moneyBuyText = await moneyBuyElement.innerText();
|
|
259
|
+
console.log('Target initially: ', moneyBuyText);
|
|
260
|
+
|
|
261
|
+
if (slider) {
|
|
262
|
+
// Get the bounding box of the slider
|
|
263
|
+
let sliderBound = await slider.boundingBox();
|
|
264
|
+
|
|
265
|
+
// Get the target position for the mouse move to a donation of £45
|
|
266
|
+
const targetPosition = sliderBound.width * (45 / 100);
|
|
267
|
+
|
|
268
|
+
// Perform mouse actions to simulate dragging the slider handle
|
|
269
|
+
await page.mouse.move(sliderBound.x, sliderBound.y + sliderBound.height / 2);
|
|
270
|
+
await page.mouse.down();
|
|
271
|
+
|
|
272
|
+
while (sliderBound.width * (parseFloat(await moneyBuyElement.innerText()) / 100) !== targetPosition) {
|
|
273
|
+
await page.mouse.move(sliderBound.x + targetPosition, sliderBound.y + sliderBound.height / 2);
|
|
274
|
+
sliderBound = await slider.boundingBox();
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
await page.mouse.up();
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-3"] > [data-preview="ImpactSlider"] > div > div > div > p')).toContainText('A donation of £45 could help pay for:');
|
|
281
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-3"] [data-testid="impact-slider--moneybuy-1"] [data-testid="moneybuy-amount"]')).toContainText('45');
|
|
282
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-3"] [data-testid="impact-slider--moneybuy-2"] [data-testid="moneybuy-amount"]')).toContainText('4');
|
|
283
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-3"] [data-testid="impact-slider--moneybuy-3"] [data-testid="moneybuy-amount"]')).toContainText('3');
|
|
284
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-3"] [data-testid="impact-slider--moneybuy-4"] [data-testid="moneybuy-amount"]')).toContainText('2');
|
|
285
|
+
|
|
286
|
+
// donate now button should have the amount as £45
|
|
287
|
+
await expect(page.locator('[data-testid="ImpactSlider-example-3"] button[type="submit"]')).toContainText('Donate £45 now');
|
|
288
|
+
|
|
289
|
+
await page.waitForTimeout(5000);
|
|
290
|
+
await page.close();
|
|
291
|
+
});
|
|
292
|
+
});
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
const { test, expect } = require('@playwright/test');
|
|
2
|
+
|
|
3
|
+
test.describe('marketing preferences component', () => {
|
|
4
|
+
test('marketing preferences', async ({ page }) => {
|
|
5
|
+
|
|
6
|
+
await page.goto('/#marketingpreferencesdsform');
|
|
7
|
+
|
|
8
|
+
await expect(page.locator('[data-testid="MarketingPreferencesDSForm-example-1"]')).toBeVisible();
|
|
9
|
+
|
|
10
|
+
// Email field should be visible when the checkbox is clicked
|
|
11
|
+
await expect(page.locator('div#marketing-preferences--default label[for="mp_permissionEmail-yes"]')).toBeVisible();
|
|
12
|
+
await page.locator('div#marketing-preferences--default label[for="mp_permissionEmail-yes"]').click();
|
|
13
|
+
await expect(page.locator('div#marketing-preferences--default input#mp_email')).toBeVisible();
|
|
14
|
+
expect(await page.locator('div#marketing-preferences--default label[for="mp_permissionEmail-yes"]').isChecked()).toBeTruthy();
|
|
15
|
+
|
|
16
|
+
// Post field should be visible when the checkbox is clicked
|
|
17
|
+
await expect(page.locator('div#marketing-preferences--default label[for="mp_permissionPost-yes"]')).toBeVisible();
|
|
18
|
+
await page.locator('div#marketing-preferences--default label[for="mp_permissionPost-yes"]').click();
|
|
19
|
+
await expect(page.locator('div#marketing-preferences--default input#mp_address1')).toBeVisible();
|
|
20
|
+
await expect(page.locator('div#marketing-preferences--default input#mp_address2')).toBeVisible();
|
|
21
|
+
await expect(page.locator('div#marketing-preferences--default input#mp_address3')).toBeVisible();
|
|
22
|
+
await expect(page.locator('div#marketing-preferences--default input#mp_town')).toBeVisible();
|
|
23
|
+
await expect(page.locator('div#marketing-preferences--default input#mp_postcode')).toBeVisible();
|
|
24
|
+
await expect(page.locator('div#marketing-preferences--default input#mp_country')).toBeVisible();
|
|
25
|
+
|
|
26
|
+
// Text field should be visible when the checkbox is clicked
|
|
27
|
+
await expect(page.locator('div#marketing-preferences--default label[for="mp_permissionSMS-yes"]')).toBeVisible();
|
|
28
|
+
await page.locator('div#marketing-preferences--default label[for="mp_permissionSMS-yes"]').click();
|
|
29
|
+
await expect(page.locator('div#marketing-preferences--default input#mp_mobile')).toBeVisible();
|
|
30
|
+
expect(await page.locator('div#marketing-preferences--default label[for="mp_permissionSMS-yes"]').isChecked()).toBeTruthy();
|
|
31
|
+
|
|
32
|
+
// Text field should be visible when the checkbox is clicked
|
|
33
|
+
await expect(page.locator('div#marketing-preferences--default label[for="mp_permissionPhone-yes"]')).toBeVisible();
|
|
34
|
+
await page.locator('div#marketing-preferences--default label[for="mp_permissionPhone-yes"]').click();
|
|
35
|
+
await expect(page.locator('div#marketing-preferences--default input#mp_phone')).toBeVisible();
|
|
36
|
+
expect(await page.locator('div#marketing-preferences--default label[for="mp_permissionPhone-yes"]').isChecked()).toBeTruthy();
|
|
37
|
+
|
|
38
|
+
// submit button should be visible
|
|
39
|
+
await expect(page.locator('div#marketing-preferences--default ~ input[type="submit"]')).toBeVisible();
|
|
40
|
+
|
|
41
|
+
// submitting button without entering input values should show error messages
|
|
42
|
+
await page.locator('div#marketing-preferences--default ~ input[type="submit"]').click();
|
|
43
|
+
|
|
44
|
+
// email field empty error message
|
|
45
|
+
await expect(page.locator('div#marketing-preferences--default div.field-email > div > label[for="mp_email"] > span > span')).toContainText('Please enter your email address');
|
|
46
|
+
|
|
47
|
+
// postal address fields empty error messages
|
|
48
|
+
// address line 1 error message
|
|
49
|
+
await expect(page.locator('div#marketing-preferences--default div.field-post > div > label[for="mp_address1"] > span > span')).toContainText('Please enter the first line of your address');
|
|
50
|
+
// town error message
|
|
51
|
+
await expect(page.locator('div#marketing-preferences--default div.field-post > div > label[for="mp_town"] > span > span')).toContainText('Please enter your town');
|
|
52
|
+
// postcode error message
|
|
53
|
+
await expect(page.locator('div#marketing-preferences--default div.field-post > div > label[for="mp_postcode"] > span > span')).toContainText('Please enter your postcode');
|
|
54
|
+
// country error message
|
|
55
|
+
await expect(page.locator('div#marketing-preferences--default div.field-post > div > label[for="mp_country"] > span > span')).toContainText('Please enter your country');
|
|
56
|
+
// text empty error message
|
|
57
|
+
await expect(page.locator('div#marketing-preferences--default div.field-sms > div > label[for="mp_mobile"] > span > span')).toContainText('Please enter your mobile number');
|
|
58
|
+
// phone error message
|
|
59
|
+
await expect(page.locator('div#marketing-preferences--default div.field-phone > div > label > span > span')).toContainText('Please enter your phone number');
|
|
60
|
+
|
|
61
|
+
// text field empty error message
|
|
62
|
+
await expect(page.locator('div#marketing-preferences--default div.field-sms > div > label[for="mp_mobile"] > span > span')).toContainText('Please enter your mobile number');
|
|
63
|
+
|
|
64
|
+
// phone field empty error message
|
|
65
|
+
await expect(page.locator('div#marketing-preferences--default div.field-phone > div > label > span > span')).toContainText('Please enter your phone number');
|
|
66
|
+
|
|
67
|
+
// validate email field
|
|
68
|
+
await page.locator('div#marketing-preferences--default input#mp_email').type('email-signup@email.sls.comicrelief.com');
|
|
69
|
+
await page.locator('div#marketing-preferences--default input#mp_email').fill(''); // clear the email field
|
|
70
|
+
await page.locator('div#marketing-preferences--default input#mp_address1').click();
|
|
71
|
+
await expect(page.locator('div#marketing-preferences--default div.field-email > div > label[for="mp_email"] > span > span')).toContainText('Please enter your email address');
|
|
72
|
+
|
|
73
|
+
// email that has : should show error message
|
|
74
|
+
await page.locator('div#marketing-preferences--default input#mp_email').fill(''); // clear the email field
|
|
75
|
+
await page.locator('div#marketing-preferences--default input#mp_email').type('test:@£$%£test@comicrelief.com');
|
|
76
|
+
await page.locator('div#marketing-preferences--default input#mp_address1').click();
|
|
77
|
+
await expect(page.locator('div#marketing-preferences--default div.field-email > div > label[for="mp_email"] > span > span')).toContainText('Please enter a valid email address');
|
|
78
|
+
|
|
79
|
+
// email that has mix of special chars that's valid and not valid should show error message
|
|
80
|
+
await page.locator('div#marketing-preferences--default input#mp_email').fill(''); // clear the email field
|
|
81
|
+
await page.locator('div#marketing-preferences--default input#mp_email').type('Test0-9!#$%&\'*+/=?^_{|}~-@comicrelief_9-8.com.uk');
|
|
82
|
+
await page.locator('div#marketing-preferences--default input#mp_address1').click();
|
|
83
|
+
await expect(page.locator('div#marketing-preferences--default div.field-email > div > label[for="mp_email"] > span > span')).toBeHidden('');
|
|
84
|
+
|
|
85
|
+
// postal address fields validation
|
|
86
|
+
// validate address line 1 field
|
|
87
|
+
await page.locator('div#marketing-preferences--default input#mp_address1').type('Comic Relief');
|
|
88
|
+
await page.locator('div#marketing-preferences--default input#mp_address1').fill(''); // clear the email field
|
|
89
|
+
await page.locator('div#marketing-preferences--default input#mp_address2').click();
|
|
90
|
+
await expect(page.locator('div#marketing-preferences--default div.field-post > div > label[for="mp_address1"] > span > span')).toContainText('Please enter the first line of your address');
|
|
91
|
+
|
|
92
|
+
// address line 1 with special characters should show error message
|
|
93
|
+
await page.locator('div#marketing-preferences--default input#mp_address1').type('Comic @% Relief');
|
|
94
|
+
await page.locator('div#marketing-preferences--default input#mp_address2').click();
|
|
95
|
+
await expect(page.locator('div#marketing-preferences--default div.field-post > div > label[for="mp_address1"] > span > span')).toContainText('This field only accepts alphanumeric characters and , . ( ) / & \' - and must start with an alphanumeric character');
|
|
96
|
+
|
|
97
|
+
// address line 1 with valid input should not show error message
|
|
98
|
+
await page.locator('div#marketing-preferences--default input#mp_address1').fill('Comic Relief'); // clear the email field
|
|
99
|
+
await expect(page.locator('div#marketing-preferences--default div.field-post > div > label[for="mp_address1"] > span > span')).toBeHidden('');
|
|
100
|
+
|
|
101
|
+
// address line 2 optional field should not show error message when value is not entered
|
|
102
|
+
await page.locator('div#marketing-preferences--default input#mp_address2').type('Comic Relief');
|
|
103
|
+
await page.locator('div#marketing-preferences--default input#mp_address2').fill(''); // clear the email field
|
|
104
|
+
await expect(page.locator('div#marketing-preferences--default div.field-post > div > label[for="mp_address2"] > span > span')).toBeHidden('');
|
|
105
|
+
|
|
106
|
+
// address line 3 optional field should not show error message when value is not entered
|
|
107
|
+
await page.locator('div#marketing-preferences--default input#mp_address3').type('White Chapel');
|
|
108
|
+
await page.locator('div#marketing-preferences--default input#mp_address3').fill(''); // clear the email field
|
|
109
|
+
await expect(page.locator('div#marketing-preferences--default div.field-post > div > label[for="mp_address2"] > span > span')).toBeHidden('');
|
|
110
|
+
|
|
111
|
+
// town field should show error message when value is not entered
|
|
112
|
+
await page.locator('div#marketing-preferences--default input#mp_town').type('London');
|
|
113
|
+
await page.locator('div#marketing-preferences--default input#mp_town').fill(''); // clear the email field
|
|
114
|
+
await page.locator('div#marketing-preferences--default input#mp_address2').click();
|
|
115
|
+
await expect(page.locator('div#marketing-preferences--default div.field-post > div > label[for="mp_town"] > span > span')).toContainText('Please enter your town');
|
|
116
|
+
|
|
117
|
+
// town field with special characters should show error message
|
|
118
|
+
await page.locator('div#marketing-preferences--default input#mp_town').type('Lon@%don ');
|
|
119
|
+
await page.locator('div#marketing-preferences--default input#mp_address2').click();
|
|
120
|
+
await expect(page.locator('div#marketing-preferences--default div.field-post > div > label[for="mp_town"] > span > span')).toContainText('This field only accepts alphanumeric characters and , . ( ) / & \' - and must start with an alphanumeric character');
|
|
121
|
+
|
|
122
|
+
// town field with valid input should not show error message
|
|
123
|
+
await page.locator('div#marketing-preferences--default input#mp_town').fill('LONDON'); // clear the email field
|
|
124
|
+
await expect(page.locator('div#marketing-preferences--default div.field-post > div > label[for="mp_town"] > span > span')).toBeHidden('');
|
|
125
|
+
|
|
126
|
+
// postcode field should show error message when value is not entered
|
|
127
|
+
await page.locator('div#marketing-preferences--default input#mp_postcode').type('E1 8QS');
|
|
128
|
+
await page.locator('div#marketing-preferences--default input#mp_postcode').fill(''); // clear the email field
|
|
129
|
+
await page.locator('div#marketing-preferences--default input#mp_address2').click();
|
|
130
|
+
await expect(page.locator('div#marketing-preferences--default div.field-post > div > label[for="mp_postcode"] > span > span')).toContainText('Please enter your postcode');
|
|
131
|
+
|
|
132
|
+
// postcode field with a space should show error message
|
|
133
|
+
await page.locator('div#marketing-preferences--default input#mp_postcode').type('E 1 8QS');
|
|
134
|
+
await page.locator('div#marketing-preferences--default input#mp_address2').click();
|
|
135
|
+
await expect(page.locator('div#marketing-preferences--default div.field-post > div > label[for="mp_postcode"] > span > span')).toContainText('Please enter a valid postcode');
|
|
136
|
+
|
|
137
|
+
// postcode field with a space in second part should show error message
|
|
138
|
+
await page.locator('div#marketing-preferences--default input#mp_postcode').type('E1 8 QS');
|
|
139
|
+
await page.locator('div#marketing-preferences--default input#mp_address2').click();
|
|
140
|
+
await expect(page.locator('div#marketing-preferences--default div.field-post > div > label[for="mp_postcode"] > span > span')).toContainText('Please enter a valid postcode');
|
|
141
|
+
|
|
142
|
+
// postcode field with valid input should not show error message
|
|
143
|
+
await page.locator('div#marketing-preferences--default input#mp_postcode').fill('E1 8QS'); // clear the email field
|
|
144
|
+
await expect(page.locator('div#marketing-preferences--default div.field-post > div > label[for="mp_postcode"] > span > span')).toBeHidden('');
|
|
145
|
+
|
|
146
|
+
// country field should show error message when value is not entered
|
|
147
|
+
await page.locator('div#marketing-preferences--default input#mp_country').type('United Kingdom');
|
|
148
|
+
await page.locator('div#marketing-preferences--default input#mp_country').fill(''); // clear the email field
|
|
149
|
+
await page.locator('div#marketing-preferences--default input#mp_address2').click();
|
|
150
|
+
await expect(page.locator('div#marketing-preferences--default div.field-post > div > label[for="mp_country"] > span > span')).toContainText('Please enter your country');
|
|
151
|
+
|
|
152
|
+
// country field with special characters should show error message
|
|
153
|
+
await page.locator('div#marketing-preferences--default input#mp_country').type('United £$^3 Kingdom');
|
|
154
|
+
await page.locator('div#marketing-preferences--default input#mp_address2').click();
|
|
155
|
+
await expect(page.locator('div#marketing-preferences--default div.field-post > div > label[for="mp_country"] > span > span')).toContainText('This field only accepts alphanumeric characters and , . ( ) / & \' - and must start with an alphanumeric character');
|
|
156
|
+
|
|
157
|
+
// country field with valid input should not show error message
|
|
158
|
+
await page.locator('div#marketing-preferences--default input#mp_country').fill(''); // clear the email field
|
|
159
|
+
await page.locator('div#marketing-preferences--default input#mp_country').fill('United Kingdom'); // clear the email field
|
|
160
|
+
await expect(page.locator('div#marketing-preferences--default div.field-post > div > label[for="mp_country"] > span > span')).toBeHidden('');
|
|
161
|
+
|
|
162
|
+
// sms field should show error message when value is not entered
|
|
163
|
+
await page.locator('div#marketing-preferences--default input#mp_mobile').type('07123456789');
|
|
164
|
+
await page.locator('div#marketing-preferences--default input#mp_mobile').fill(''); // clear the email field
|
|
165
|
+
await page.locator('div#marketing-preferences--default input#mp_address2').click();
|
|
166
|
+
await expect(page.locator('div#marketing-preferences--default div.field-sms > div > label[for="mp_mobile"] > span > span')).toContainText('Please enter your mobile number');
|
|
167
|
+
|
|
168
|
+
// sms field with 10 digits should show error message
|
|
169
|
+
await page.locator('div#marketing-preferences--default input#mp_mobile').type('0712345678');
|
|
170
|
+
await page.locator('div#marketing-preferences--default input#mp_address2').click();
|
|
171
|
+
await expect(page.locator('div#marketing-preferences--default div.field-sms > div > label[for="mp_mobile"] > span > span')).toContainText('Please enter a valid UK mobile number');
|
|
172
|
+
|
|
173
|
+
// sms field with 12 digits should show error message
|
|
174
|
+
await page.locator('div#marketing-preferences--default input#mp_mobile').fill(''); // clear the email field
|
|
175
|
+
await page.locator('div#marketing-preferences--default input#mp_mobile').type('071234567890');
|
|
176
|
+
await page.locator('div#marketing-preferences--default input#mp_address2').click();
|
|
177
|
+
await expect(page.locator('div#marketing-preferences--default div.field-sms > div > label[for="mp_mobile"] > span > span')).toContainText('Please enter a valid UK mobile number');
|
|
178
|
+
|
|
179
|
+
// sms field starting with a space should show error message
|
|
180
|
+
await page.locator('div#marketing-preferences--default input#mp_mobile').fill(''); // clear the email field
|
|
181
|
+
await page.locator('div#marketing-preferences--default input#mp_mobile').type(' 07123456789');
|
|
182
|
+
await page.locator('div#marketing-preferences--default input#mp_address2').click();
|
|
183
|
+
await expect(page.locator('div#marketing-preferences--default div.field-sms > div > label[for="mp_mobile"] > span > span')).toContainText('Please enter a valid UK mobile number');
|
|
184
|
+
|
|
185
|
+
// sms field with valid input should not show error message
|
|
186
|
+
await page.locator('div#marketing-preferences--default input#mp_mobile').fill(''); // clear the email field
|
|
187
|
+
await page.locator('div#marketing-preferences--default input#mp_mobile').fill('07123456789');
|
|
188
|
+
await expect(page.locator('div#marketing-preferences--default div.field-sms > div > label[for="mp_mobile"] > span > span')).toBeHidden('');
|
|
189
|
+
|
|
190
|
+
// phone field should show error message when value is not entered
|
|
191
|
+
await page.locator('div#marketing-preferences--default input#mp_phone').type('02081234567');
|
|
192
|
+
await page.locator('div#marketing-preferences--default input#mp_phone').fill(''); // clear the email field
|
|
193
|
+
await page.locator('div#marketing-preferences--default input#mp_address2').click();
|
|
194
|
+
await expect(page.locator('div#marketing-preferences--default div.field-phone > div > label > span > span')).toContainText('Please enter your phone number');
|
|
195
|
+
|
|
196
|
+
// phone field with 10 digits should show error message
|
|
197
|
+
await page.locator('div#marketing-preferences--default input#mp_phone').type('0208123456');
|
|
198
|
+
await page.locator('div#marketing-preferences--default input#mp_address2').click();
|
|
199
|
+
await expect(page.locator('div#marketing-preferences--default div.field-phone > div > label > span > span')).toContainText('Please enter a valid UK phone number');
|
|
200
|
+
|
|
201
|
+
// phone field with 12 digits should show error message
|
|
202
|
+
await page.locator('div#marketing-preferences--default input#mp_phone').fill(''); // clear the email field
|
|
203
|
+
await page.locator('div#marketing-preferences--default input#mp_phone').type('020812345678');
|
|
204
|
+
await page.locator('div#marketing-preferences--default input#mp_address2').click();
|
|
205
|
+
await expect(page.locator('div#marketing-preferences--default div.field-phone > div > label > span > span')).toContainText('Please enter a valid UK phone number');
|
|
206
|
+
|
|
207
|
+
// phone field starting with a space should show error message
|
|
208
|
+
await page.locator('div#marketing-preferences--default input#mp_phone').fill(''); // clear the email field
|
|
209
|
+
await page.locator('div#marketing-preferences--default input#mp_phone').type(' 02081234567');
|
|
210
|
+
await page.locator('div#marketing-preferences--default input#mp_address2').click();
|
|
211
|
+
await expect(page.locator('div#marketing-preferences--default div.field-phone > div > label > span > span')).toContainText('Please enter a valid UK phone number');
|
|
212
|
+
|
|
213
|
+
// phone field with valid input should not show error message
|
|
214
|
+
await page.locator('div#marketing-preferences--default input#mp_phone').fill(''); // clear the email field
|
|
215
|
+
await page.locator('div#marketing-preferences--default input#mp_phone').fill('02081234567');
|
|
216
|
+
await expect(page.locator('div#marketing-preferences--default div.field-phone > div > label > span > span')).toBeHidden('');
|
|
217
|
+
|
|
218
|
+
await page.close();
|
|
219
|
+
});
|
|
220
|
+
});
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const { test, expect } = require('@playwright/test');
|
|
2
|
+
|
|
3
|
+
test.describe('membership component', () => {
|
|
4
|
+
test('membership', async ({ page }) => {
|
|
5
|
+
|
|
6
|
+
await page.goto('/#membership');
|
|
7
|
+
|
|
8
|
+
await expect(page.locator('[data-testid="Membership-example-1"]')).toBeVisible();
|
|
9
|
+
|
|
10
|
+
// moneybuy 1
|
|
11
|
+
await expect(page.locator('[data-testid="Membership-example-1"] [aria-label="£5"]')).toBeVisible();
|
|
12
|
+
await page.locator('[data-testid="Membership-example-1"] [aria-label="£5"]').click();
|
|
13
|
+
await expect(page.locator('[data-testid="Membership-example-1"] form > fieldset > p')).toContainText('a regular supply of toiletries for someone living in a refugee camp in Serbia.');
|
|
14
|
+
|
|
15
|
+
// moneybuy 2
|
|
16
|
+
await expect(page.locator('[data-testid="Membership-example-1"] [aria-label="£10"]')).toBeVisible();
|
|
17
|
+
await page.locator('[data-testid="Membership-example-1"] [aria-label="£10"]').click();
|
|
18
|
+
await expect(page.locator('[data-testid="Membership-example-1"] form > fieldset > p')).toContainText('a potentially lifesaving call for a man at risk of suicide in the UK.');
|
|
19
|
+
|
|
20
|
+
// moneybuy 3
|
|
21
|
+
await expect(page.locator('[data-testid="Membership-example-1"] [aria-label="£20"]')).toBeVisible();
|
|
22
|
+
await page.locator('[data-testid="Membership-example-1"] [aria-label="£20"]').click();
|
|
23
|
+
await expect(page.locator('[data-testid="Membership-example-1"] form > fieldset > p')).toContainText('the distribution of enough surplus food for a school breakfast club to feed 80 children.');
|
|
24
|
+
|
|
25
|
+
// amount field validation
|
|
26
|
+
await page.locator('[data-testid="Membership-example-1"] input#mship-1--MoneyBuy-userInput').fill('');
|
|
27
|
+
|
|
28
|
+
// enter amount 0 should show error message
|
|
29
|
+
await page.locator('[data-testid="Membership-example-1"] input#mship-1--MoneyBuy-userInput').type('0');
|
|
30
|
+
await expect(page.locator('[data-testid="Membership-example-1"] form > fieldset > p')).toContainText('Please enter a number between 1 and 25000, and up to 2 decimal places');
|
|
31
|
+
|
|
32
|
+
// enter amount 25001 should show error message
|
|
33
|
+
await page.locator('[data-testid="Membership-example-1"] input#mship-1--MoneyBuy-userInput').fill('');
|
|
34
|
+
await page.locator('[data-testid="Membership-example-1"] input#mship-1--MoneyBuy-userInput').type('25001');
|
|
35
|
+
await expect(page.locator('[data-testid="Membership-example-1"] form > fieldset > p')).toContainText('Please enter a number between 1 and 25000, and up to 2 decimal places');
|
|
36
|
+
|
|
37
|
+
// enter own amount in decimals should not show error message
|
|
38
|
+
await page.locator('[data-testid="Membership-example-1"] input#mship-1--MoneyBuy-userInput').fill('');
|
|
39
|
+
await page.locator('[data-testid="Membership-example-1"] input#mship-1--MoneyBuy-userInput').type('12.99');
|
|
40
|
+
await expect(page.locator('[data-testid="Membership-example-1"] form > fieldset > p')).toContainText('Your donation will help us fund amazing projects in the UK and around the world.');
|
|
41
|
+
|
|
42
|
+
// clicking the submit button should take to donate.comicrelief.com/form/giftaid
|
|
43
|
+
await page.locator('[data-testid="Membership-example-1"] form > fieldset > input[type="submit"]').click();
|
|
44
|
+
|
|
45
|
+
await page.close();
|
|
46
|
+
});
|
|
47
|
+
});
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
const { defineConfig, devices } = require('@playwright/test');
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Read environment variables from file.
|
|
6
|
+
* https://github.com/motdotla/dotenv
|
|
7
|
+
*/
|
|
8
|
+
require('dotenv').config();
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @see https://playwright.dev/docs/test-configuration
|
|
12
|
+
*/
|
|
13
|
+
module.exports = defineConfig({
|
|
14
|
+
testDir: './playwright',
|
|
15
|
+
/* Fail the build on CI if you accidentally left test
|
|
16
|
+
.only in the source code. */
|
|
17
|
+
forbidOnly: !!process.env.CI,
|
|
18
|
+
retries: 2,
|
|
19
|
+
workers: 2,
|
|
20
|
+
timeout: 60 * 1000,
|
|
21
|
+
expect: {
|
|
22
|
+
timeout: 60 * 1000,
|
|
23
|
+
},
|
|
24
|
+
reporter: [
|
|
25
|
+
['list'],
|
|
26
|
+
['html', { open: 'never' }]
|
|
27
|
+
],
|
|
28
|
+
use: {
|
|
29
|
+
actionTimeout: 0,
|
|
30
|
+
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
|
|
31
|
+
trace: 'on-first-retry',
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
/* Configure projects for major browsers */
|
|
35
|
+
projects: [
|
|
36
|
+
{
|
|
37
|
+
name: 'chromium',
|
|
38
|
+
use: { ...devices['Desktop Chrome'] },
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
|
|
42
|
+
/* Run your local dev server before starting the tests */
|
|
43
|
+
webServer: {
|
|
44
|
+
command: 'yarn styleguide',
|
|
45
|
+
port: '6060',
|
|
46
|
+
timeout: 120000,
|
|
47
|
+
reuseExistingServer: true,
|
|
48
|
+
},
|
|
49
|
+
});
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M24 48C37.2548 48 48 37.2548 48 24C48 10.7452 37.2548 0 24 0C10.7452 0 0 10.7452 0 24C0 37.2548 10.7452 48 24 48ZM37.0874 9.18501L26.6638 21.3016H26.6632L38 37.8003H29.6623L22.0281 26.6901L12.4702 37.8003H10L20.9315 25.0942L10 9.18501H18.3377L25.5665 19.7057L34.6174 9.18501H37.0874ZM22.1729 23.6501L23.2805 25.2343V25.2349L30.8244 36.0253H34.6185L25.3739 22.8019L24.2663 21.2177L17.1544 11.0446H13.3603L22.1729 23.6501Z" fill="white"/>
|
|
3
|
+
</svg>
|