@comicrelief/component-library 7.19.0 → 7.19.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/cypress/integration/components/atoms/button.spec.js +113 -0
  2. package/cypress/integration/components/atoms/buttonWithStates.spec.js +53 -0
  3. package/cypress/integration/components/atoms/checkbox.spec.js +68 -0
  4. package/cypress/integration/components/atoms/confetti.spec.js +52 -0
  5. package/cypress/integration/components/atoms/errorText.spec.js +51 -0
  6. package/cypress/integration/components/atoms/label.spec.js +104 -0
  7. package/cypress/integration/components/atoms/link.spec.js +207 -0
  8. package/cypress/integration/components/atoms/logo.spec.js +149 -0
  9. package/cypress/integration/components/atoms/pagination.spec.js +214 -0
  10. package/cypress/integration/components/atoms/picture.spec.js +147 -0
  11. package/cypress/integration/components/atoms/radioButton.spec.js +81 -0
  12. package/cypress/integration/components/atoms/richText.spec.js +75 -0
  13. package/cypress/integration/components/atoms/select.spec.js +89 -0
  14. package/cypress/integration/components/atoms/text.spec.js +180 -0
  15. package/cypress/integration/components/atoms/textArea.spec.js +91 -0
  16. package/cypress/integration/components/atoms/textInputWithDrop.spec.js +78 -0
  17. package/cypress/integration/components/molecules/accordion.spec.js +72 -0
  18. package/cypress/integration/components/molecules/articleTeaser.spec.js +110 -0
  19. package/cypress/integration/components/molecules/banner.spec.js +72 -0
  20. package/cypress/integration/components/molecules/box.spec.js +112 -0
  21. package/cypress/integration/components/molecules/card.spec.js +113 -0
  22. package/cypress/integration/components/molecules/chip.spec.js +70 -0
  23. package/cypress/integration/components/molecules/countdown.spec.js +73 -0
  24. package/cypress/integration/components/molecules/descriptor.spec.js +147 -0
  25. package/cypress/integration/components/molecules/doubleCopy.spec.js +81 -0
  26. package/cypress/integration/components/molecules/heroBanner.spec.js +71 -0
  27. package/cypress/integration/components/molecules/infoBanner.spec.js +71 -0
  28. package/cypress/integration/components/molecules/partnerLink.spec.js +70 -0
  29. package/cypress/integration/components/molecules/promo.spec.js +76 -0
  30. package/cypress/integration/components/{Molecules/SchoolLookup.spec.js → molecules/schoolLookup.spec.js} +6 -0
  31. package/cypress/integration/components/molecules/searchInput.spec.js +74 -0
  32. package/cypress/integration/components/molecules/searchResult.spec.js +202 -0
  33. package/cypress/integration/components/molecules/shareButton.spec.js +78 -0
  34. package/cypress/integration/components/molecules/simpleSchoolLookup.spec.js +84 -0
  35. package/cypress/integration/components/molecules/singleMessage.spec.js +537 -0
  36. package/cypress/integration/components/molecules/singleMessageDs.spec.js +248 -0
  37. package/cypress/integration/components/molecules/videoBanner.spec.js +140 -0
  38. package/cypress/integration/components/organisms/cookieBanner.spec.js +82 -0
  39. package/cypress/integration/components/organisms/footer.spec.js +166 -0
  40. package/dist/components/Molecules/VideoBanner/VideoBanner.js +14 -2
  41. package/dist/components/Molecules/VideoBanner/VideoBanner.md +1 -1
  42. package/dist/components/Organisms/Footer/__snapshots__/Footer.test.js.snap +1 -1
  43. package/dist/components/Organisms/Footer/data/footerCopy.js +1 -1
  44. package/package.json +1 -1
  45. package/src/components/Molecules/VideoBanner/VideoBanner.js +9 -3
  46. package/src/components/Molecules/VideoBanner/VideoBanner.md +1 -1
  47. package/src/components/Organisms/Footer/__snapshots__/Footer.test.js.snap +1 -1
  48. package/src/components/Organisms/Footer/data/footerCopy.js +1 -1
  49. package/cypress/integration/components/Atoms/Checkbox.spec.js +0 -69
  50. package/cypress/integration/components/Atoms/Link.spec.js +0 -217
  51. package/cypress/integration/components/Atoms/Logo.spec.js +0 -155
  52. package/cypress/integration/components/Atoms/Pagination.spec.js +0 -217
  53. package/cypress/integration/components/Atoms/Picture.spec.js +0 -147
  54. package/cypress/integration/components/Atoms/RadioButton.spec.js +0 -81
  55. package/cypress/integration/components/Atoms/RichText.spec.js +0 -75
  56. package/cypress/integration/components/Atoms/Select.spec.js +0 -89
  57. package/cypress/integration/components/Atoms/Text.spec.js +0 -180
  58. package/cypress/integration/components/Atoms/TextArea.spec.js +0 -91
  59. package/cypress/integration/components/Molecules/ArticleTeaser.spec.js +0 -111
  60. package/cypress/integration/components/Molecules/Box.spec.js +0 -112
  61. package/cypress/integration/components/Molecules/Card.spec.js +0 -113
  62. package/cypress/integration/components/Molecules/DoubleCopy.spec.js +0 -81
  63. package/cypress/integration/components/Molecules/HeroBanner.spec.js +0 -71
  64. package/cypress/integration/components/Molecules/InfoBanner.spec.js +0 -71
  65. package/cypress/integration/components/Molecules/PartnerLink.spec.js +0 -70
  66. package/cypress/integration/components/Molecules/Promo.spec.js +0 -76
  67. package/cypress/integration/components/Molecules/SearchInput.spec.js +0 -74
  68. package/cypress/integration/components/Molecules/SearchResult.spec.js +0 -202
  69. package/cypress/integration/components/Molecules/ShareButton.spec.js +0 -78
  70. package/cypress/integration/components/Molecules/SingleMessage.spec.js +0 -537
  71. package/cypress/integration/components/Molecules/VideoBanner.spec.js +0 -70
  72. package/cypress/integration/components/Organisms/CookieBanner.spec.js +0 -82
  73. package/cypress/integration/components/Organisms/Footer.spec.js +0 -166
  74. /package/cypress/integration/components/{Atoms/Input.spec.js → atoms/input.spec.js} +0 -0
  75. /package/cypress/integration/components/{Atoms/SocialIcons.spec.js → atoms/socialIcons.spec.js} +0 -0
  76. /package/cypress/integration/components/{Molecules/CardDs.spec.js → molecules/cardDs.spec.js} +0 -0
  77. /package/cypress/integration/components/{Molecules/Typeahead.spec.js → molecules/typeahead.spec.js} +0 -0
  78. /package/cypress/integration/components/{Organisms/Donate.spec.js → organisms/donate.spec.js} +0 -0
  79. /package/cypress/integration/components/{Organisms/EmailSignUp.spec.js → organisms/emailSignUp.spec.js} +0 -0
  80. /package/cypress/integration/components/{Organisms/Header.spec.js → organisms/header.spec.js} +0 -0
  81. /package/cypress/integration/components/{Atoms/MarketingPreferencesDSForm.spec.js → organisms/marketingPreferencesDSForm.spec.js} +0 -0
  82. /package/cypress/integration/components/{Organisms/Membership.spec.js → organisms/membership.spec.js} +0 -0
@@ -0,0 +1,113 @@
1
+ describe('Button component', () => {
2
+ before(() => {
3
+ // go to button component
4
+ cy.visit('/#button');
5
+ });
6
+
7
+ describe('props and methods section', () => {
8
+ beforeEach(() => {
9
+ cy.get('[data-testid="Button-container"] button[name="rsg-usage"]')
10
+ .contains('Props & methods')
11
+ .as('propsBtn');
12
+
13
+ cy.get('@propsBtn')
14
+ .closest('[class^=rsg--tabs]')
15
+ .as('container');
16
+ });
17
+
18
+ it('is present', () => {
19
+ cy.get('@propsBtn').should('exist');
20
+ });
21
+
22
+ it('does not show table initially', () => {
23
+ cy.get('@container')
24
+ .find('table')
25
+ .should('not.exist');
26
+ });
27
+
28
+ it('shows the table on button click', () => {
29
+ cy.get('@propsBtn').click();
30
+ cy.get('@container')
31
+ .find('table')
32
+ .should('contain', 'Prop name');
33
+ });
34
+ });
35
+
36
+ describe('Plain Button: Button-example-0', () => {
37
+ beforeEach(() => {
38
+ cy.get('[data-testid="Button-example-0"')
39
+ .as('container')
40
+ .find('[class^=rsg--preview]')
41
+ .as('preview');
42
+
43
+ cy.get('@container')
44
+ .find('button')
45
+ .contains('View Code')
46
+ .as('viewCodeBtn');
47
+ });
48
+
49
+ it('renders button as a span', () => {
50
+ //verify button as a span
51
+ cy.get('[data-testid="Button-example-0"]')
52
+ .contains('My button')
53
+ .should('exist');
54
+ });
55
+
56
+ it('has view code button', () => {
57
+ cy.get('@viewCodeBtn').should('exist');
58
+ });
59
+
60
+ it('shows code on click', () => {
61
+ cy.get('@viewCodeBtn').click();
62
+ cy.get('@container')
63
+ .find('textarea')
64
+ .should('exist');
65
+ });
66
+
67
+ it('closes code on click', () => {
68
+ cy.get('@viewCodeBtn').click();
69
+ cy.get('@container')
70
+ .find('textarea')
71
+ .should('not.exist');
72
+ });
73
+ });
74
+
75
+ describe('Button as a span: Button-example-1', () => {
76
+ beforeEach(() => {
77
+ cy.get('[data-testid="Button-example-1"]')
78
+ .as('container')
79
+ .find('[class^=rsg--preview]')
80
+ .as('preview');
81
+
82
+ cy.get('@container')
83
+ .find('button')
84
+ .contains('View Code')
85
+ .as('viewCodeBtn');
86
+ });
87
+
88
+ it('renders button as a span', () => {
89
+ //verify button as a span
90
+ cy.get('[data-testid="Button-example-1"]')
91
+ .contains('My button as a span')
92
+ .should('exist');
93
+ });
94
+
95
+ it('has view code button', () => {
96
+ cy.get('@viewCodeBtn').should('exist');
97
+ });
98
+
99
+ it('shows code on click', () => {
100
+ cy.get('@viewCodeBtn').click();
101
+ cy.get('@container')
102
+ .find('textarea')
103
+ .should('exist');
104
+ });
105
+
106
+ it('closes code on click', () => {
107
+ cy.get('@viewCodeBtn').click();
108
+ cy.get('@container')
109
+ .find('textarea')
110
+ .should('not.exist');
111
+ });
112
+ });
113
+ });
@@ -0,0 +1,53 @@
1
+ describe('Button With States component', () => {
2
+ before(() => {
3
+ // go to Button With States component
4
+ cy.visit('/#button');
5
+ });
6
+
7
+ describe('props and methods section', () => {
8
+ beforeEach(() => {
9
+ cy.get('[data-testid="ButtonWithStates-container"]')
10
+ .as('container')
11
+ .find('[class^=rsg--preview]')
12
+ .as('preview');
13
+
14
+ cy.get('@container')
15
+ .find('button')
16
+ .contains('View Code')
17
+ .as('viewCodeBtn');
18
+ });
19
+
20
+ // button with Disabled and loading
21
+ it('renders button with states', () => {
22
+ cy.get('[data-testid="ButtonWithStates-examples"]')
23
+ .find('h2')
24
+ .contains('Disabled and loading')
25
+ .should('exist');
26
+ });
27
+
28
+ it('renders button as disabled', () => {
29
+ //verify button as a span
30
+ cy.get('[data-testid="ButtonWithStates-example-1"]')
31
+ .contains('Loading')
32
+ .should('be.disabled')
33
+ });
34
+
35
+ it('has view code button', () => {
36
+ cy.get('@viewCodeBtn').should('exist');
37
+ });
38
+
39
+ it('shows code on click', () => {
40
+ cy.get('@viewCodeBtn').click();
41
+ cy.get('@container')
42
+ .find('textarea')
43
+ .should('exist');
44
+ });
45
+
46
+ it('closes code on click', () => {
47
+ cy.get('@viewCodeBtn').click();
48
+ cy.get('@container')
49
+ .find('textarea')
50
+ .should('not.exist');
51
+ });
52
+ });
53
+ });
@@ -0,0 +1,68 @@
1
+ describe('Checkbox component', () => {
2
+ before(() => {
3
+ // go to checkbox component
4
+ cy.visit('/#checkbox');
5
+ });
6
+
7
+ describe('props and methods section', () => {
8
+ beforeEach(() => {
9
+ cy.get('[data-testid="Checkbox-container"] button[name="rsg-usage"]')
10
+ .contains('Props & methods')
11
+ .as('propsBtn');
12
+
13
+ cy.get('@propsBtn')
14
+ .closest('[class^=rsg--tabs]')
15
+ .as('container');
16
+ });
17
+
18
+ it('is present', () => {
19
+ cy.get('@propsBtn').should('exist');
20
+ });
21
+
22
+ it('does not show table initially', () => {
23
+ cy.get('@container')
24
+ .find('table')
25
+ .should('not.exist');
26
+ });
27
+
28
+ it('shows the table on button click', () => {
29
+ cy.get('@propsBtn').click();
30
+ cy.get('@container')
31
+ .find('table')
32
+ .should('contain', 'Prop name');
33
+ });
34
+ });
35
+
36
+ describe('Checkbox section', () => {
37
+ beforeEach(() => {
38
+ cy.get('[data-preview="Checkbox"]')
39
+ .as('preview');
40
+ });
41
+
42
+ it('should click checkboxes', () => {
43
+ cy.get('[data-preview="Checkbox"] p').contains('List of checkboxes');
44
+ cy.get('[data-testid="Checkbox-example-1"] div > label:nth-child(2)')
45
+ .contains('Tennis')
46
+ .click();
47
+ cy.get('[data-testid="Checkbox-example-1"] div > label:nth-child(3)')
48
+ .contains('Basketball')
49
+ .click();
50
+ cy.get('[data-testid="Checkbox-example-1"] div > label:nth-child(4)')
51
+ .contains('Cycling')
52
+ .click();
53
+ cy.get('[data-testid="Checkbox-example-1"] div > label:nth-child(5)')
54
+ .contains('Football')
55
+ .click();
56
+ });
57
+
58
+ it('has view code button', () => {
59
+ cy.get('[data-testid="Checkbox-examples"] [name="rsg-code-editor"]').should('exist');
60
+ });
61
+
62
+ it('shows code on click', () => {
63
+ cy.get('[data-testid="Checkbox-examples"] [name="rsg-code-editor"]').contains('View Code')
64
+ .click();
65
+ cy.get('[data-testid="Checkbox-examples"] div > textarea').should('be.visible');
66
+ });
67
+ });
68
+ });
@@ -0,0 +1,52 @@
1
+ describe('Confetti component', () => {
2
+ before(() => {
3
+ // go to confetti component
4
+ cy.visit('/#confetti');
5
+ });
6
+
7
+ describe('props and methods section', () => {
8
+ beforeEach(() => {
9
+ cy.get('[data-testid="Confetti-container"]')
10
+ .as('container')
11
+ .find('[class^=rsg--preview]')
12
+ .as('preview');
13
+
14
+ cy.get('@container')
15
+ .find('button')
16
+ .contains('View Code')
17
+ .as('viewCodeBtn');
18
+ });
19
+
20
+ it('renders button with states', () => {
21
+ cy.get('[data-testid="Confetti-examples"]')
22
+ .find('h1')
23
+ .contains('Confetti')
24
+ .should('exist');
25
+ });
26
+
27
+ it('renders confetti when "trigger confetti" is clicked', () => {
28
+ //verify button as a span
29
+ cy.get('[data-testid="Confetti-example-1"]')
30
+ .contains('trigger confetti')
31
+ .click()
32
+ });
33
+
34
+ it('has view code button', () => {
35
+ cy.get('@viewCodeBtn').should('exist');
36
+ });
37
+
38
+ it('shows code on click', () => {
39
+ cy.get('@viewCodeBtn').click();
40
+ cy.get('@container')
41
+ .find('textarea')
42
+ .should('exist');
43
+ });
44
+
45
+ it('closes code on click', () => {
46
+ cy.get('@viewCodeBtn').click();
47
+ cy.get('@container')
48
+ .find('textarea')
49
+ .should('not.exist');
50
+ });
51
+ });
52
+ });
@@ -0,0 +1,51 @@
1
+ describe('ErrorText component', () => {
2
+ before(() => {
3
+ // go to errortext component
4
+ cy.visit('/#errortext');
5
+ });
6
+
7
+ describe('props and methods section', () => {
8
+ beforeEach(() => {
9
+ cy.get('[data-testid="ErrorText-container"]')
10
+ .as('container')
11
+ .find('[class^=rsg--preview]')
12
+ .as('preview');
13
+
14
+ cy.get('@container')
15
+ .find('button')
16
+ .contains('View Code')
17
+ .as('viewCodeBtn');
18
+ });
19
+
20
+ it('error message should exist', () => {
21
+ cy.get('[data-testid="ErrorText-examples"]')
22
+ .find('h1')
23
+ .contains('ErrorText')
24
+ .should('exist');
25
+ });
26
+
27
+ it('displays error message', () => {
28
+ cy.get('[data-testid="ErrorText-example-1"] span')
29
+ .contains('This is an error')
30
+ .should('exist');
31
+ });
32
+
33
+ it('has view code button', () => {
34
+ cy.get('@viewCodeBtn').should('exist');
35
+ });
36
+
37
+ it('shows code on click', () => {
38
+ cy.get('@viewCodeBtn').click();
39
+ cy.get('@container')
40
+ .find('textarea')
41
+ .should('exist');
42
+ });
43
+
44
+ it('closes code on click', () => {
45
+ cy.get('@viewCodeBtn').click();
46
+ cy.get('@container')
47
+ .find('textarea')
48
+ .should('not.exist');
49
+ });
50
+ });
51
+ });
@@ -0,0 +1,104 @@
1
+ describe('Label component', () => {
2
+ before(() => {
3
+ // go to label component
4
+ cy.visit('/#label');
5
+ });
6
+
7
+ describe('props and methods section', () => {
8
+ beforeEach(() => {
9
+ cy.get('[data-testid="Label-container"]')
10
+ .as('container')
11
+ .find('[class^=rsg--preview]')
12
+ .as('preview');
13
+
14
+ cy.get('@container')
15
+ .find('button')
16
+ .contains('View Code')
17
+ .as('viewCodeBtn');
18
+ });
19
+
20
+ it('label should exist', () => {
21
+ cy.get('[data-testid="Label-examples"]')
22
+ .find('label')
23
+ .should('exist');
24
+ });
25
+ });
26
+
27
+ describe('Wrapping a basic text input: Label-example-0', () => {
28
+ beforeEach(() => {
29
+ cy.get('[data-testid="Label-example-0"')
30
+ .as('container')
31
+ .find('[class^=rsg--preview]')
32
+ .as('preview');
33
+
34
+ cy.get('@container')
35
+ .find('button')
36
+ .contains('View Code')
37
+ .as('viewCodeBtn');
38
+ });
39
+
40
+ it('renders label Wrapping a basic text input', () => {
41
+ cy.get('[data-testid="Label-example-0"]')
42
+ .find('label')
43
+ .contains('Wrapping a basic text input')
44
+ .should('exist');
45
+ });
46
+
47
+ it('has view code button', () => {
48
+ cy.get('@viewCodeBtn').should('exist');
49
+ });
50
+
51
+ it('shows code on click', () => {
52
+ cy.get('@viewCodeBtn').click();
53
+ cy.get('@container')
54
+ .find('textarea')
55
+ .should('exist');
56
+ });
57
+
58
+ it('closes code on click', () => {
59
+ cy.get('@viewCodeBtn').click();
60
+ cy.get('@container')
61
+ .find('textarea')
62
+ .should('not.exist');
63
+ });
64
+ });
65
+
66
+ describe('Wrapping a styled input: Label-example-1', () => {
67
+ beforeEach(() => {
68
+ cy.get('[data-testid="Label-example-1"]')
69
+ .as('container')
70
+ .find('[class^=rsg--preview]')
71
+ .as('preview');
72
+
73
+ cy.get('@container')
74
+ .find('button')
75
+ .contains('View Code')
76
+ .as('viewCodeBtn');
77
+ });
78
+
79
+ it('renders label wrapping a styled input', () => {
80
+ cy.get('[data-testid="Label-example-1"]')
81
+ .find('label')
82
+ .contains('Wrapping a styled input')
83
+ .should('exist');
84
+ });
85
+
86
+ it('has view code button', () => {
87
+ cy.get('@viewCodeBtn').should('exist');
88
+ });
89
+
90
+ it('shows code on click', () => {
91
+ cy.get('@viewCodeBtn').click();
92
+ cy.get('@container')
93
+ .find('textarea')
94
+ .should('exist');
95
+ });
96
+
97
+ it('closes code on click', () => {
98
+ cy.get('@viewCodeBtn').click();
99
+ cy.get('@container')
100
+ .find('textarea')
101
+ .should('not.exist');
102
+ });
103
+ });
104
+ });
@@ -0,0 +1,207 @@
1
+ describe('Link component', () => {
2
+ before(() => {
3
+ // go to link component
4
+ cy.visit('/#link');
5
+ });
6
+
7
+ describe('props and methods section', () => {
8
+ beforeEach(() => {
9
+ cy.get('[data-testid="Link-container"] button[name="rsg-usage"]')
10
+ .contains('Props & methods')
11
+ .as('propsBtn');
12
+
13
+ cy.get('@propsBtn')
14
+ .closest('[class^=rsg--tabs]')
15
+ .as('container');
16
+ });
17
+
18
+ it('is present', () => {
19
+ cy.get('@propsBtn').should('exist');
20
+ });
21
+
22
+ it('does not show table initially', () => {
23
+ cy.get('@container')
24
+ .find('table')
25
+ .should('not.exist');
26
+ });
27
+
28
+ it('shows the table on button click', () => {
29
+ cy.get('@propsBtn').click();
30
+ cy.get('@container')
31
+ .find('table')
32
+ .should('contain', 'Prop name');
33
+ });
34
+ });
35
+
36
+ describe('Link standard preview section', () => {
37
+ beforeEach(() => {
38
+ cy.get('[data-testid="Link-example-0"]')
39
+ .as('container')
40
+ .find('[data-preview="Link"]')
41
+ .as('preview');
42
+
43
+ cy.get('@container')
44
+ .find('button')
45
+ .contains('View Code')
46
+ .as('viewCodeBtn');
47
+ });
48
+
49
+ it('renders link standard section', () => {
50
+ cy.get('[data-testid="Link-example-0"]')
51
+ .should('exist');
52
+
53
+ cy.get('[data-testid="Link-example-0"]')
54
+ .first()
55
+ .contains('Link standard')
56
+ .should('exist');
57
+ cy.get('[data-testid="Link-example-0"] div > div:nth-child(2) > a')
58
+ .contains('Link standard icon')
59
+ .should('exist');
60
+ cy.get('[data-testid="Link-example-0"] div > div:nth-child(2) > a > span > svg')
61
+ .should('exist');
62
+ cy.get('[data-testid="Link-example-0"] div > div:nth-child(3) > a')
63
+ .contains('Link standard white')
64
+ .should('exist')
65
+ });
66
+
67
+ it('has view code button', () => {
68
+ cy.get('@viewCodeBtn').should('exist');
69
+ });
70
+
71
+ it('shows code on click', () => {
72
+ cy.get('@viewCodeBtn').click();
73
+ cy.get('@container')
74
+ .find('textarea')
75
+ .should('exist');
76
+ });
77
+
78
+ it('closes code on click', () => {
79
+ cy.get('@viewCodeBtn').click();
80
+ cy.get('@container')
81
+ .find('textarea')
82
+ .should('not.exist');
83
+ });
84
+ });
85
+
86
+ describe('Iconography section', () => {
87
+ beforeEach(() => {
88
+ cy.get('[data-testid="Link-example-2"]')
89
+ .as('container')
90
+ .find('[data-preview="Link"]')
91
+ .as('preview');
92
+
93
+ cy.get('@container')
94
+ .find('button')
95
+ .contains('View Code')
96
+ .as('viewCodeBtn');
97
+ });
98
+
99
+ it('renders link Iconography section', () => {
100
+ cy.get('[data-testid="Link-example-2"]')
101
+ .should('exist');
102
+
103
+ cy.get('[data-testid="Link-example-2"]')
104
+ .first()
105
+ .contains('Internal link')
106
+ .should('exist');
107
+ cy.get('[data-testid="Link-example-2"] div > div:nth-child(2) > a')
108
+ .contains('External link')
109
+ .should('exist');
110
+ //check icon exist
111
+ cy.get('[data-testid="Link-example-2"] div > div:nth-child(2) > a > span > svg')
112
+ .should('exist');
113
+ cy.get('[data-testid="Link-example-2"] div > div:nth-child(3) > a')
114
+ .contains('Download link')
115
+ .should('exist');
116
+ //check icon exist
117
+ cy.get('[data-testid="Link-example-2"] div > div:nth-child(3) > a > span > svg')
118
+ .should('exist');
119
+ cy.get('[data-testid="Link-example-2"] div > div:nth-child(4) > a')
120
+ .contains('Favourite link')
121
+ .should('exist');
122
+ //check icon exist
123
+ cy.get('[data-testid="Link-example-2"] div > div:nth-child(4) > a > span > svg')
124
+ .should('exist');
125
+ });
126
+
127
+ it('has view code button', () => {
128
+ cy.get('@viewCodeBtn').should('exist');
129
+ });
130
+
131
+ it('shows code on click', () => {
132
+ cy.get('@viewCodeBtn').click();
133
+ cy.get('@container')
134
+ .find('textarea')
135
+ .should('exist');
136
+ });
137
+
138
+ it('closes code on click', () => {
139
+ cy.get('@viewCodeBtn').click();
140
+ cy.get('@container')
141
+ .find('textarea')
142
+ .should('not.exist');
143
+ });
144
+ });
145
+
146
+ describe('Link as button section', () => {
147
+ beforeEach(() => {
148
+ cy.get('[data-testid="Link-example-3"]')
149
+ .as('container')
150
+ .find('[data-preview="Link"]')
151
+ .as('preview');
152
+
153
+ cy.get('@container')
154
+ .find('button')
155
+ .contains('View Code')
156
+ .as('viewCodeBtn');
157
+ });
158
+
159
+ it('renders link as buttons section', () => {
160
+ cy.get('[data-testid="Link-example-3"]')
161
+ .should('exist');
162
+
163
+ //verify all button colors
164
+ cy.get('[data-testid="Link-example-3"] div > div:nth-child(1) > a[color="black"]')
165
+ .contains('Link as button')
166
+ .should('exist');
167
+ cy.get('[data-testid="Link-example-3"] div > div:nth-child(2) > a[color="red"]')
168
+ .contains('Link as button')
169
+ .and('exist');
170
+ cy.get('[data-testid="Link-example-3"] div > div:nth-child(3) > a[color="yellow"]')
171
+ .should('exist');
172
+ cy.get('[data-testid="Link-example-3"] div > div:nth-child(4) > a[color="yellow_light"]')
173
+ .contains('Link as button')
174
+ .should('exist');
175
+ cy.get('[data-testid="Link-example-3"] div > div:nth-child(5) > a[color="yellow_dark"]')
176
+ .contains('Link as button')
177
+ .should('exist');
178
+ cy.get('[data-testid="Link-example-3"] div:nth-child(6) > div:nth-child(1) > a[color="grey"] ')
179
+ .contains('Link as button')
180
+ .should('exist');
181
+ cy.get('[data-testid="Link-example-3"] div > div > div:nth-child(6) > a[color="transparent"]')
182
+ .contains('Link as transparent button')
183
+ .should('exist');
184
+ cy.get('[data-testid="Link-example-3"] div:nth-child(3) > a[color="white"]')
185
+ .contains('White button')
186
+ .should('exist');
187
+ });
188
+
189
+ it('has view code button', () => {
190
+ cy.get('@viewCodeBtn').should('exist');
191
+ });
192
+
193
+ it('shows code on click', () => {
194
+ cy.get('@viewCodeBtn').click();
195
+ cy.get('@container')
196
+ .find('textarea')
197
+ .should('exist');
198
+ });
199
+
200
+ it('closes code on click', () => {
201
+ cy.get('@viewCodeBtn').click();
202
+ cy.get('@container')
203
+ .find('textarea')
204
+ .should('not.exist');
205
+ });
206
+ });
207
+ });