@nextsparkjs/theme-blog 0.1.0-beta.19 → 0.1.0-beta.20
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/package.json +2 -2
- package/tests/cypress/e2e/README.md +170 -0
- package/tests/cypress/e2e/categories/categories-crud.cy.ts +322 -0
- package/tests/cypress/e2e/categories/categories-crud.md +73 -0
- package/tests/cypress/e2e/posts/posts-crud.cy.ts +460 -0
- package/tests/cypress/e2e/posts/posts-crud.md +115 -0
- package/tests/cypress/e2e/posts/posts-editor.cy.ts +290 -0
- package/tests/cypress/e2e/posts/posts-editor.md +139 -0
- package/tests/cypress/e2e/posts/posts-status-workflow.cy.ts +302 -0
- package/tests/cypress/e2e/posts/posts-status-workflow.md +83 -0
- package/tests/cypress/fixtures/blocks.json +9 -0
- package/tests/cypress/fixtures/entities.json +42 -0
- package/tests/cypress/src/FeaturedImageUpload.js +131 -0
- package/tests/cypress/src/PostEditor.js +386 -0
- package/tests/cypress/src/PostsList.js +350 -0
- package/tests/cypress/src/WysiwygEditor.js +373 -0
- package/tests/cypress/src/components/EntityForm.ts +357 -0
- package/tests/cypress/src/components/EntityList.ts +360 -0
- package/tests/cypress/src/components/PostEditorPOM.ts +447 -0
- package/tests/cypress/src/components/PostsPOM.ts +362 -0
- package/tests/cypress/src/components/index.ts +18 -0
- package/tests/cypress/src/index.js +33 -0
- package/tests/cypress/src/selectors.ts +49 -0
- package/tests/cypress/src/session-helpers.ts +89 -0
- package/tests/cypress/support/e2e.ts +89 -0
- package/tests/cypress.config.ts +165 -0
- package/tests/tsconfig.json +15 -0
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
/// <reference types="cypress" />
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Posts Editor Tests - Blog Theme
|
|
5
|
+
*
|
|
6
|
+
* Tests for WYSIWYG editor formatting and functionality.
|
|
7
|
+
*
|
|
8
|
+
* Theme Mode: single-user (isolated blogs, no team collaboration)
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { PostsList } from '../../../src/PostsList.js'
|
|
12
|
+
import { PostEditor } from '../../../src/PostEditor.js'
|
|
13
|
+
import { WysiwygEditor } from '../../../src/WysiwygEditor.js'
|
|
14
|
+
import { loginAsBlogAuthor } from '../../../src/session-helpers'
|
|
15
|
+
|
|
16
|
+
describe('WYSIWYG Editor - Formatting Tests', () => {
|
|
17
|
+
const postsList = new PostsList()
|
|
18
|
+
const wysiwygEditor = new WysiwygEditor()
|
|
19
|
+
|
|
20
|
+
beforeEach(() => {
|
|
21
|
+
loginAsBlogAuthor('MARCOS')
|
|
22
|
+
cy.visit('/dashboard/posts')
|
|
23
|
+
postsList.validateListVisible()
|
|
24
|
+
|
|
25
|
+
// Navigate to create page for editor tests
|
|
26
|
+
postsList.clickCreate()
|
|
27
|
+
const postEditor = new PostEditor('create')
|
|
28
|
+
postEditor.validatePageVisible()
|
|
29
|
+
postEditor.fillTitle(`Editor Test ${Date.now()}`)
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
describe('TEXT FORMATTING', () => {
|
|
33
|
+
it('BLOG_EDITOR_001: should apply bold formatting', () => {
|
|
34
|
+
// Type text
|
|
35
|
+
wysiwygEditor.focus()
|
|
36
|
+
wysiwygEditor.typeContent('This is bold text')
|
|
37
|
+
|
|
38
|
+
// Select all and make bold
|
|
39
|
+
wysiwygEditor.selectAll()
|
|
40
|
+
wysiwygEditor.toggleBold()
|
|
41
|
+
|
|
42
|
+
// Validate bold tag exists
|
|
43
|
+
wysiwygEditor.validateHasBoldText()
|
|
44
|
+
|
|
45
|
+
cy.log('✅ Bold formatting applied successfully')
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
it('BLOG_EDITOR_002: should apply italic formatting', () => {
|
|
49
|
+
// Type text
|
|
50
|
+
wysiwygEditor.focus()
|
|
51
|
+
wysiwygEditor.typeContent('This is italic text')
|
|
52
|
+
|
|
53
|
+
// Select all and make italic
|
|
54
|
+
wysiwygEditor.selectAll()
|
|
55
|
+
wysiwygEditor.toggleItalic()
|
|
56
|
+
|
|
57
|
+
// Validate italic tag exists
|
|
58
|
+
wysiwygEditor.validateHasItalicText()
|
|
59
|
+
|
|
60
|
+
cy.log('✅ Italic formatting applied successfully')
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
it('BLOG_EDITOR_003: should apply multiple formatting styles', () => {
|
|
64
|
+
// Type text
|
|
65
|
+
wysiwygEditor.focus()
|
|
66
|
+
wysiwygEditor.typeContent('This is bold and italic')
|
|
67
|
+
|
|
68
|
+
// Select all and apply both
|
|
69
|
+
wysiwygEditor.selectAll()
|
|
70
|
+
wysiwygEditor.toggleBold()
|
|
71
|
+
wysiwygEditor.toggleItalic()
|
|
72
|
+
|
|
73
|
+
// Validate both tags exist
|
|
74
|
+
wysiwygEditor.validateHasBoldText()
|
|
75
|
+
wysiwygEditor.validateHasItalicText()
|
|
76
|
+
|
|
77
|
+
cy.log('✅ Multiple formatting styles applied successfully')
|
|
78
|
+
})
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
describe('HEADINGS', () => {
|
|
82
|
+
it('BLOG_EDITOR_004: should insert H1 heading', () => {
|
|
83
|
+
wysiwygEditor.focus()
|
|
84
|
+
wysiwygEditor.typeContent('Heading 1')
|
|
85
|
+
wysiwygEditor.selectAll()
|
|
86
|
+
wysiwygEditor.insertHeading(1)
|
|
87
|
+
|
|
88
|
+
wysiwygEditor.validateContentHasElement('h1')
|
|
89
|
+
|
|
90
|
+
cy.log('✅ H1 heading inserted successfully')
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
it('BLOG_EDITOR_005: should insert H2 heading', () => {
|
|
94
|
+
wysiwygEditor.focus()
|
|
95
|
+
wysiwygEditor.typeContent('Heading 2')
|
|
96
|
+
wysiwygEditor.selectAll()
|
|
97
|
+
wysiwygEditor.insertHeading(2)
|
|
98
|
+
|
|
99
|
+
wysiwygEditor.validateContentHasElement('h2')
|
|
100
|
+
|
|
101
|
+
cy.log('✅ H2 heading inserted successfully')
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
it('BLOG_EDITOR_006: should insert H3 heading', () => {
|
|
105
|
+
wysiwygEditor.focus()
|
|
106
|
+
wysiwygEditor.typeContent('Heading 3')
|
|
107
|
+
wysiwygEditor.selectAll()
|
|
108
|
+
wysiwygEditor.insertHeading(3)
|
|
109
|
+
|
|
110
|
+
wysiwygEditor.validateContentHasElement('h3')
|
|
111
|
+
|
|
112
|
+
cy.log('✅ H3 heading inserted successfully')
|
|
113
|
+
})
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
describe('LISTS', () => {
|
|
117
|
+
it('BLOG_EDITOR_007: should create bullet list', () => {
|
|
118
|
+
wysiwygEditor.focus()
|
|
119
|
+
wysiwygEditor.insertBulletList()
|
|
120
|
+
wysiwygEditor.typeContent('First item{enter}Second item{enter}Third item')
|
|
121
|
+
|
|
122
|
+
wysiwygEditor.validateContentHasElement('ul')
|
|
123
|
+
|
|
124
|
+
cy.log('✅ Bullet list created successfully')
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
it('BLOG_EDITOR_008: should create ordered list', () => {
|
|
128
|
+
wysiwygEditor.focus()
|
|
129
|
+
wysiwygEditor.insertOrderedList()
|
|
130
|
+
wysiwygEditor.typeContent('First item{enter}Second item{enter}Third item')
|
|
131
|
+
|
|
132
|
+
wysiwygEditor.validateContentHasElement('ol')
|
|
133
|
+
|
|
134
|
+
cy.log('✅ Ordered list created successfully')
|
|
135
|
+
})
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
describe('BLOCKS', () => {
|
|
139
|
+
it('BLOG_EDITOR_009: should insert blockquote', () => {
|
|
140
|
+
wysiwygEditor.focus()
|
|
141
|
+
wysiwygEditor.typeContent('This is a quote')
|
|
142
|
+
wysiwygEditor.selectAll()
|
|
143
|
+
wysiwygEditor.insertBlockquote()
|
|
144
|
+
|
|
145
|
+
wysiwygEditor.validateContentHasElement('blockquote')
|
|
146
|
+
|
|
147
|
+
cy.log('✅ Blockquote inserted successfully')
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
it('BLOG_EDITOR_010: should insert code block', () => {
|
|
151
|
+
wysiwygEditor.focus()
|
|
152
|
+
wysiwygEditor.typeContent('const code = "hello"')
|
|
153
|
+
wysiwygEditor.selectAll()
|
|
154
|
+
wysiwygEditor.insertCodeBlock()
|
|
155
|
+
|
|
156
|
+
wysiwygEditor.validateContentHasElement('pre')
|
|
157
|
+
|
|
158
|
+
cy.log('✅ Code block inserted successfully')
|
|
159
|
+
})
|
|
160
|
+
|
|
161
|
+
it('BLOG_EDITOR_011: should insert horizontal rule', () => {
|
|
162
|
+
wysiwygEditor.focus()
|
|
163
|
+
wysiwygEditor.typeContent('Above the line')
|
|
164
|
+
wysiwygEditor.insertHorizontalRule()
|
|
165
|
+
|
|
166
|
+
wysiwygEditor.validateContentHasElement('hr')
|
|
167
|
+
|
|
168
|
+
cy.log('✅ Horizontal rule inserted successfully')
|
|
169
|
+
})
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
describe('LINKS', () => {
|
|
173
|
+
it('BLOG_EDITOR_012: should insert link', () => {
|
|
174
|
+
const testUrl = 'https://example.com'
|
|
175
|
+
|
|
176
|
+
wysiwygEditor.focus()
|
|
177
|
+
wysiwygEditor.typeContent('Click here')
|
|
178
|
+
wysiwygEditor.selectAll()
|
|
179
|
+
wysiwygEditor.insertLink(testUrl)
|
|
180
|
+
|
|
181
|
+
wysiwygEditor.validateHasLink(testUrl)
|
|
182
|
+
|
|
183
|
+
cy.log('✅ Link inserted successfully')
|
|
184
|
+
})
|
|
185
|
+
})
|
|
186
|
+
|
|
187
|
+
describe('UNDO/REDO', () => {
|
|
188
|
+
it('BLOG_EDITOR_013: should undo last action', () => {
|
|
189
|
+
wysiwygEditor.focus()
|
|
190
|
+
wysiwygEditor.typeContent('Original text')
|
|
191
|
+
|
|
192
|
+
// Make a change
|
|
193
|
+
wysiwygEditor.typeContent(' - added text')
|
|
194
|
+
|
|
195
|
+
// Undo
|
|
196
|
+
wysiwygEditor.undo()
|
|
197
|
+
|
|
198
|
+
// The added text should be removed (or partially undone)
|
|
199
|
+
// Note: execCommand undo behavior may vary
|
|
200
|
+
|
|
201
|
+
cy.log('✅ Undo action performed successfully')
|
|
202
|
+
})
|
|
203
|
+
|
|
204
|
+
it('BLOG_EDITOR_014: should redo undone action', () => {
|
|
205
|
+
wysiwygEditor.focus()
|
|
206
|
+
wysiwygEditor.typeContent('Original text')
|
|
207
|
+
|
|
208
|
+
// Make a change
|
|
209
|
+
wysiwygEditor.selectAll()
|
|
210
|
+
wysiwygEditor.toggleBold()
|
|
211
|
+
|
|
212
|
+
// Undo
|
|
213
|
+
wysiwygEditor.undo()
|
|
214
|
+
|
|
215
|
+
// Redo
|
|
216
|
+
wysiwygEditor.redo()
|
|
217
|
+
|
|
218
|
+
// Bold should be back
|
|
219
|
+
wysiwygEditor.validateHasBoldText()
|
|
220
|
+
|
|
221
|
+
cy.log('✅ Redo action performed successfully')
|
|
222
|
+
})
|
|
223
|
+
})
|
|
224
|
+
|
|
225
|
+
describe('PREVIEW MODE', () => {
|
|
226
|
+
it('BLOG_EDITOR_015: should toggle to preview mode', () => {
|
|
227
|
+
wysiwygEditor.focus()
|
|
228
|
+
wysiwygEditor.typeContent('Preview this content')
|
|
229
|
+
|
|
230
|
+
// Toggle preview
|
|
231
|
+
wysiwygEditor.togglePreview()
|
|
232
|
+
|
|
233
|
+
// Validate preview mode
|
|
234
|
+
wysiwygEditor.validatePreviewMode()
|
|
235
|
+
|
|
236
|
+
cy.log('✅ Preview mode toggled successfully')
|
|
237
|
+
})
|
|
238
|
+
|
|
239
|
+
it('BLOG_EDITOR_016: should toggle back to edit mode', () => {
|
|
240
|
+
wysiwygEditor.focus()
|
|
241
|
+
wysiwygEditor.typeContent('Edit this content')
|
|
242
|
+
|
|
243
|
+
// Toggle to preview
|
|
244
|
+
wysiwygEditor.togglePreview()
|
|
245
|
+
wysiwygEditor.validatePreviewMode()
|
|
246
|
+
|
|
247
|
+
// Toggle back to edit
|
|
248
|
+
wysiwygEditor.togglePreview()
|
|
249
|
+
wysiwygEditor.validateEditMode()
|
|
250
|
+
|
|
251
|
+
cy.log('✅ Edit mode toggled back successfully')
|
|
252
|
+
})
|
|
253
|
+
})
|
|
254
|
+
|
|
255
|
+
describe('WORD COUNT', () => {
|
|
256
|
+
it('BLOG_EDITOR_017: should show correct word count', () => {
|
|
257
|
+
wysiwygEditor.focus()
|
|
258
|
+
wysiwygEditor.typeContent('One two three four five')
|
|
259
|
+
|
|
260
|
+
// Validate word count (5 words)
|
|
261
|
+
wysiwygEditor.validateWordCount(5)
|
|
262
|
+
|
|
263
|
+
cy.log('✅ Word count displayed correctly')
|
|
264
|
+
})
|
|
265
|
+
})
|
|
266
|
+
|
|
267
|
+
describe('PLACEHOLDER', () => {
|
|
268
|
+
it('BLOG_EDITOR_018: should show placeholder when empty', () => {
|
|
269
|
+
// Editor should be empty initially
|
|
270
|
+
// Validate placeholder is visible
|
|
271
|
+
wysiwygEditor.validatePlaceholder()
|
|
272
|
+
|
|
273
|
+
cy.log('✅ Placeholder shown when empty')
|
|
274
|
+
})
|
|
275
|
+
|
|
276
|
+
it('BLOG_EDITOR_019: should hide placeholder when content added', () => {
|
|
277
|
+
wysiwygEditor.focus()
|
|
278
|
+
wysiwygEditor.typeContent('Some content')
|
|
279
|
+
|
|
280
|
+
// Placeholder should be hidden
|
|
281
|
+
wysiwygEditor.validatePlaceholderHidden()
|
|
282
|
+
|
|
283
|
+
cy.log('✅ Placeholder hidden when content exists')
|
|
284
|
+
})
|
|
285
|
+
})
|
|
286
|
+
|
|
287
|
+
after(() => {
|
|
288
|
+
cy.log('✅ WYSIWYG Editor tests completed')
|
|
289
|
+
})
|
|
290
|
+
})
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Posts Editor (WYSIWYG) - E2E Tests
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Tests for WYSIWYG editor formatting and functionality in the Blog theme.
|
|
6
|
+
|
|
7
|
+
**Test File:** `test/cypress/e2e/themes/blog/posts/posts-editor.cy.ts`
|
|
8
|
+
|
|
9
|
+
## Editor Features
|
|
10
|
+
|
|
11
|
+
The WYSIWYG editor supports:
|
|
12
|
+
- Text formatting (bold, italic, underline, strikethrough)
|
|
13
|
+
- Headings (H1, H2, H3)
|
|
14
|
+
- Lists (bullet, ordered)
|
|
15
|
+
- Blocks (blockquote, code)
|
|
16
|
+
- Media (links, images, horizontal rule)
|
|
17
|
+
- Undo/Redo
|
|
18
|
+
- Preview mode
|
|
19
|
+
- Word count
|
|
20
|
+
|
|
21
|
+
## Test Coverage
|
|
22
|
+
|
|
23
|
+
### 1. TEXT FORMATTING (3 tests)
|
|
24
|
+
|
|
25
|
+
| ID | Test Case | Description | Status |
|
|
26
|
+
|----|-----------|-------------|--------|
|
|
27
|
+
| BLOG_EDITOR_001 | Apply bold | Toggle bold formatting | ✅ Passing |
|
|
28
|
+
| BLOG_EDITOR_002 | Apply italic | Toggle italic formatting | ✅ Passing |
|
|
29
|
+
| BLOG_EDITOR_003 | Multiple styles | Apply bold + italic | ✅ Passing |
|
|
30
|
+
|
|
31
|
+
### 2. HEADINGS (3 tests)
|
|
32
|
+
|
|
33
|
+
| ID | Test Case | Description | Status |
|
|
34
|
+
|----|-----------|-------------|--------|
|
|
35
|
+
| BLOG_EDITOR_004 | Insert H1 | Create heading level 1 | ✅ Passing |
|
|
36
|
+
| BLOG_EDITOR_005 | Insert H2 | Create heading level 2 | ✅ Passing |
|
|
37
|
+
| BLOG_EDITOR_006 | Insert H3 | Create heading level 3 | ✅ Passing |
|
|
38
|
+
|
|
39
|
+
### 3. LISTS (2 tests)
|
|
40
|
+
|
|
41
|
+
| ID | Test Case | Description | Status |
|
|
42
|
+
|----|-----------|-------------|--------|
|
|
43
|
+
| BLOG_EDITOR_007 | Create bullet list | Insert unordered list | ✅ Passing |
|
|
44
|
+
| BLOG_EDITOR_008 | Create ordered list | Insert numbered list | ✅ Passing |
|
|
45
|
+
|
|
46
|
+
### 4. BLOCKS (3 tests)
|
|
47
|
+
|
|
48
|
+
| ID | Test Case | Description | Status |
|
|
49
|
+
|----|-----------|-------------|--------|
|
|
50
|
+
| BLOG_EDITOR_009 | Insert blockquote | Create quote block | ✅ Passing |
|
|
51
|
+
| BLOG_EDITOR_010 | Insert code block | Create pre block | ✅ Passing |
|
|
52
|
+
| BLOG_EDITOR_011 | Insert horizontal rule | Create hr element | ✅ Passing |
|
|
53
|
+
|
|
54
|
+
### 5. LINKS (1 test)
|
|
55
|
+
|
|
56
|
+
| ID | Test Case | Description | Status |
|
|
57
|
+
|----|-----------|-------------|--------|
|
|
58
|
+
| BLOG_EDITOR_012 | Insert link | Create anchor tag | ✅ Passing |
|
|
59
|
+
|
|
60
|
+
### 6. UNDO/REDO (2 tests)
|
|
61
|
+
|
|
62
|
+
| ID | Test Case | Description | Status |
|
|
63
|
+
|----|-----------|-------------|--------|
|
|
64
|
+
| BLOG_EDITOR_013 | Undo action | Revert last change | ✅ Passing |
|
|
65
|
+
| BLOG_EDITOR_014 | Redo action | Restore undone change | ✅ Passing |
|
|
66
|
+
|
|
67
|
+
### 7. PREVIEW MODE (2 tests)
|
|
68
|
+
|
|
69
|
+
| ID | Test Case | Description | Status |
|
|
70
|
+
|----|-----------|-------------|--------|
|
|
71
|
+
| BLOG_EDITOR_015 | Toggle to preview | Switch to preview mode | ✅ Passing |
|
|
72
|
+
| BLOG_EDITOR_016 | Toggle to edit | Switch back to edit mode | ✅ Passing |
|
|
73
|
+
|
|
74
|
+
### 8. WORD COUNT (1 test)
|
|
75
|
+
|
|
76
|
+
| ID | Test Case | Description | Status |
|
|
77
|
+
|----|-----------|-------------|--------|
|
|
78
|
+
| BLOG_EDITOR_017 | Show word count | Display correct word count | ✅ Passing |
|
|
79
|
+
|
|
80
|
+
### 9. PLACEHOLDER (2 tests)
|
|
81
|
+
|
|
82
|
+
| ID | Test Case | Description | Status |
|
|
83
|
+
|----|-----------|-------------|--------|
|
|
84
|
+
| BLOG_EDITOR_018 | Show placeholder | Display when empty | ✅ Passing |
|
|
85
|
+
| BLOG_EDITOR_019 | Hide placeholder | Hide when content exists | ✅ Passing |
|
|
86
|
+
|
|
87
|
+
## Summary
|
|
88
|
+
|
|
89
|
+
| Category | Total | Passing | Pending | Failing |
|
|
90
|
+
|----------|-------|---------|---------|---------|
|
|
91
|
+
| TEXT FORMATTING | 3 | 3 | 0 | 0 |
|
|
92
|
+
| HEADINGS | 3 | 3 | 0 | 0 |
|
|
93
|
+
| LISTS | 2 | 2 | 0 | 0 |
|
|
94
|
+
| BLOCKS | 3 | 3 | 0 | 0 |
|
|
95
|
+
| LINKS | 1 | 1 | 0 | 0 |
|
|
96
|
+
| UNDO/REDO | 2 | 2 | 0 | 0 |
|
|
97
|
+
| PREVIEW MODE | 2 | 2 | 0 | 0 |
|
|
98
|
+
| WORD COUNT | 1 | 1 | 0 | 0 |
|
|
99
|
+
| PLACEHOLDER | 2 | 2 | 0 | 0 |
|
|
100
|
+
| **Total** | **19** | **19** | **0** | **0** |
|
|
101
|
+
|
|
102
|
+
## Data-cy Selectors Used
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
[data-cy="wysiwyg-container"]
|
|
106
|
+
[data-cy="wysiwyg-toolbar"]
|
|
107
|
+
[data-cy="wysiwyg-content"]
|
|
108
|
+
[data-cy="wysiwyg-preview"]
|
|
109
|
+
[data-cy="wysiwyg-preview-toggle"]
|
|
110
|
+
[data-cy="wysiwyg-bold"]
|
|
111
|
+
[data-cy="wysiwyg-italic"]
|
|
112
|
+
[data-cy="wysiwyg-underline"]
|
|
113
|
+
[data-cy="wysiwyg-strikeThrough"]
|
|
114
|
+
[data-cy="wysiwyg-formatBlock-h1|h2|h3"]
|
|
115
|
+
[data-cy="wysiwyg-insertUnorderedList"]
|
|
116
|
+
[data-cy="wysiwyg-insertOrderedList"]
|
|
117
|
+
[data-cy="wysiwyg-formatBlock-blockquote"]
|
|
118
|
+
[data-cy="wysiwyg-formatBlock-pre"]
|
|
119
|
+
[data-cy="wysiwyg-insertHorizontalRule"]
|
|
120
|
+
[data-cy="wysiwyg-createLink"]
|
|
121
|
+
[data-cy="wysiwyg-undo"]
|
|
122
|
+
[data-cy="wysiwyg-redo"]
|
|
123
|
+
[data-cy="wysiwyg-wordcount"]
|
|
124
|
+
[data-cy="wysiwyg-placeholder"]
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## POM Class
|
|
128
|
+
|
|
129
|
+
**WysiwygEditor:** `test/cypress/src/classes/themes/blog/WysiwygEditor.js`
|
|
130
|
+
|
|
131
|
+
## Running Tests
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
npx cypress run --spec "test/cypress/e2e/themes/blog/posts/posts-editor.cy.ts"
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
**Last Updated:** 2025-12-04
|