11import { test , expect } from 'e2e/test-utils'
2- import { createColor , getRgb } from '~stackable/plugins/global-settings/colors/util'
32
4- test . describe ( 'Global Settigs ' , ( ) => {
3+ test . describe ( 'Global Settings ' , ( ) => {
54 let pid = null
65
76 // Create Posts for testing
@@ -22,6 +21,7 @@ test.describe( 'Global Settigs', () => {
2221 editor,
2322 } ) => {
2423 await page . getByLabel ( 'Stackable Settings' ) . click ( )
24+ await page . getByRole ( 'button' , { name : 'Global Color Palette' } ) . click ( )
2525
2626 // Add a new Global Color
2727 const panel = page . locator ( '.ugb-global-settings-color-picker ' ) . filter ( { hasText : 'Global Colors' } )
@@ -51,18 +51,31 @@ test.describe( 'Global Settigs', () => {
5151
5252 // Verify the newly added global color is in the color picker
5353 await expect ( page . getByRole ( 'heading' , { name : 'Global Colors' } ) ) . toBeVisible ( )
54- await expect ( page . getByLabel ( `Color: Custom Color ${ count } ` ) ) . toBeVisible ( )
54+
55+ // For WP 6.7 and below, the label for colors has a prefix `Color: `
56+ // For WP 6.8 the prefix was removed.
57+ const regex = new RegExp ( `^(?:Color:\\s*)?Custom Color ${ count } $` )
58+
59+ await expect ( page . getByLabel ( regex ) ) . toBeVisible ( )
5560
5661 // Verify the color value
57- await page . getByLabel ( `Color: Custom Color ${ count } ` ) . click ( )
62+ await page . getByLabel ( regex ) . click ( )
5863 await expect ( page . getByLabel ( 'Hex color' ) ) . toHaveValue ( hexValue )
5964
6065 // Click on the color picker button to close the popup
6166 await page . locator ( '.stk-color-palette-control .stk-control-content > .components-dropdown > .components-button' ) . first ( ) . click ( )
6267
6368 // Delete added Global Color
6469 await page . getByLabel ( 'Stackable Settings' ) . click ( )
65- await panel . locator ( `.ugb-global-settings-color-picker__color-indicators > div > div:nth-child(${ count } ) > button.stk-global-settings-color-picker__delete-button` ) . click ( )
70+
71+ page . on ( 'dialog' , async dialog => await dialog . accept ( ) )
72+ const deleteRequest = page . waitForResponse ( response => response . url ( ) . includes ( 'wp/v2/settings' ) && response . request ( ) . method ( ) === 'POST' )
73+
74+ await globalColors . getByLabel ( 'Delete' ) . nth ( count - 1 ) . click ( )
75+
76+ await deleteRequest
77+ const _count = ( await globalColors . evaluate ( node => Array . from ( node . childNodes ) ) ) . length
78+ expect ( _count ) . toBeLessThan ( count )
6679 } )
6780
6881 test ( 'Global Typography Styles should be applied when adding a heading' , async ( {
@@ -93,56 +106,81 @@ test.describe( 'Global Settigs', () => {
93106
94107 await expect ( editor . canvas . locator ( '[data-type="stackable/heading"] > .stk-block-heading > h2[role="textbox"]' ) ) . toHaveCSS ( 'font-size' , '32px' )
95108
96- // Reset Global Typography Styles
97- await page . getByLabel ( 'Stackable Settings' ) . click ( )
98- await page . locator ( '.ugb-global-settings-typography-control' ) . nth ( 1 ) . getByRole ( 'button' , { name : 'Reset' } ) . click ( )
109+ // Reset Global Typography Styles
110+ await page . getByLabel ( 'Stackable Settings' ) . click ( )
111+
112+ const resetButton = page . locator ( '.ugb-global-settings-typography-control' ) . nth ( 1 ) . getByLabel ( 'Reset' )
113+ const deleteRequest = page . waitForResponse ( response => response . url ( ) . includes ( 'wp/v2/settings' ) && response . request ( ) . method ( ) === 'POST' )
114+ await resetButton . click ( )
115+
116+ await deleteRequest
117+ await expect ( resetButton ) . not . toBeVisible ( )
99118 } )
100119
101120 test ( 'When a default block is created, adding the block should have the default block\'s attributes' , async ( {
102121 page,
103122 editor,
104123 } ) => {
105- // Generate a color
106- const color = createColor ( )
107-
108124 await page . getByLabel ( 'Stackable Settings' ) . click ( )
109125 await page . getByRole ( 'button' , { name : 'Block Defaults' } ) . click ( )
110126
111127 // Open the Default Text Block Editor
112128 const defaultBlockPagePromise = page . waitForEvent ( 'popup' )
129+
130+ // Reset the block defaults first if it has been edited
131+ const resetButton = page . locator ( '.components-panel__body' , { hasText : 'Block Defaults' } ) . locator ( '.stk-block-default-control' , { hasText : / ^ T e x t $ / } ) . first ( ) . getByLabel ( 'Reset' )
132+
133+ if ( await resetButton . isVisible ( ) ) {
134+ await resetButton . click ( )
135+ }
136+
113137 const textBlock = page . locator ( '.components-panel__body' , { hasText : 'Block Defaults' } ) . locator ( '.stk-block-default-control' , { hasText : / ^ T e x t $ / } ) . first ( ) . getByLabel ( 'Edit' )
114138 await textBlock . click ( )
115139 const defaultBlockPage = await defaultBlockPagePromise
116140
117141 // Set a color for the default Text Block
118142 await defaultBlockPage . locator ( '.stk-color-palette-control .stk-control-content > .components-dropdown > .components-button' ) . first ( ) . click ( )
119- await defaultBlockPage . getByLabel ( 'Hex color' ) . fill ( color )
143+ await defaultBlockPage . getByLabel ( 'Hex color' ) . fill ( 'ff0000' )
120144 await defaultBlockPage . locator ( '.stk-color-palette-control .stk-control-content > .components-dropdown > .components-button' ) . first ( ) . click ( )
121145
146+ // The default timeout is 30s, extend it to 90s
147+ const updateRequest = defaultBlockPage . waitForResponse ( response => response . url ( ) . includes ( 'update_block_style' ) && response . request ( ) . method ( ) === 'POST' , { timeout : 90_000 } )
148+
122149 // In older WP versions, the button text is 'Update' instead of 'Save'
123- if ( await defaultBlockPage . getByRole ( 'button' , { name : 'Save' , exact : true } ) . isVisible ( ) ) {
150+ if ( await defaultBlockPage . getByRole ( 'button' , {
151+ name : 'Save' , exact : true , disabled : false ,
152+ } ) . isVisible ( ) ) {
124153 await defaultBlockPage . getByRole ( 'button' , { name : 'Save' , exact : true } ) . click ( )
125- } else {
154+ } else if ( await defaultBlockPage . getByRole ( 'button' , { name : 'Update' , disabled : false } ) . isVisible ( ) ) {
126155 await defaultBlockPage . getByRole ( 'button' , { name : 'Update' } ) . click ( )
127156 }
128157
129- await defaultBlockPage . close ( )
158+ // Make sure default block has been updated
159+ await ( await updateRequest ) . finished ( )
130160
131161 // Insert a Stackable Text Block, and check if the color is the same as the one set in the default block
132- await page . reload ( )
133- await editor . insertBlock ( {
134- name : 'stackable/text' ,
135- attributes : {
136- text : 'test' ,
137- } ,
138- } )
139-
140- await expect ( editor . canvas . locator ( '[data-type="stackable/text"] > .stk-block-text > p[role="textbox"]' ) ) . toHaveCSS ( 'color' , `rgb(${ getRgb ( color ) } )` )
162+ const timeouts = [ 1_000 , 5_000 , 30_000 ]
163+ for ( const timeout of timeouts ) {
164+ try {
165+ await page . reload ( )
166+ await editor . insertBlock ( {
167+ name : 'stackable/text' ,
168+ attributes : {
169+ text : 'test' ,
170+ } ,
171+ } )
172+
173+ await expect ( editor . canvas . locator ( '[data-type="stackable/text"] > .stk-block-text > p[role="textbox"]' ) ) . toHaveCSS ( 'color' , 'rgb(255, 0, 0)' )
174+ break
175+ } catch ( e ) {
176+ // Ignore the error and try again because the default block might not be updated yet
177+ await page . waitForTimeout ( timeout )
178+ }
179+ }
141180
142181 // Reset Default Block
143182 await page . getByLabel ( 'Stackable Settings' ) . click ( )
144183 await page . getByRole ( 'button' , { name : 'Block Defaults' } ) . click ( )
145184 await page . locator ( '.components-panel__body' , { hasText : 'Block Defaults' } ) . locator ( '.stk-block-default-control' , { hasText : / ^ T e x t $ / } ) . first ( ) . getByLabel ( 'Reset' ) . click ( )
146185 } )
147186} )
148-
0 commit comments