@wordpress/e2e-test-utils-playwright 1.44.0 → 1.45.0

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.
@@ -57,7 +57,7 @@ async function visitSiteEditor(options = {}) {
57
57
  ".edit-site-canvas-loader, .edit-site-canvas-spinner"
58
58
  );
59
59
  try {
60
- await canvasLoader.waitFor({ state: "visible", timeout: 6e4 });
60
+ await canvasLoader.waitFor({ state: "visible", timeout: 3e3 });
61
61
  await canvasLoader.waitFor({
62
62
  state: "hidden",
63
63
  // Bigger timeout is needed for larger entities, like the Large Post
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/admin/visit-site-editor.ts"],
4
- "sourcesContent": ["/**\n * Internal dependencies\n */\nimport type { Admin } from './';\n\ninterface SiteEditorOptions {\n\tpostId?: string | number;\n\tpostType?: string;\n\tpath?: string;\n\tcanvas?: string;\n\tactiveView?: string;\n\tshowWelcomeGuide?: boolean;\n}\n\n/**\n * Visits the Site Editor main page.\n *\n * @param this\n * @param options Options to visit the site editor.\n */\nexport async function visitSiteEditor(\n\tthis: Admin,\n\toptions: SiteEditorOptions = {}\n) {\n\tconst { postId, postType, path, canvas, activeView } = options;\n\tconst query = new URLSearchParams();\n\n\tif ( postId ) {\n\t\tquery.set( 'postId', String( postId ) );\n\t}\n\tif ( postType ) {\n\t\tquery.set( 'postType', postType );\n\t}\n\tif ( path ) {\n\t\tquery.set( 'path', path );\n\t}\n\tif ( canvas ) {\n\t\tquery.set( 'canvas', canvas );\n\t}\n\tif ( activeView ) {\n\t\tquery.set( 'activeView', activeView );\n\t}\n\n\tawait this.visitAdminPage( 'site-editor.php', query.toString() );\n\n\tif ( ! options.showWelcomeGuide ) {\n\t\tawait this.editor.setPreferences( 'core/edit-site', {\n\t\t\twelcomeGuide: false,\n\t\t\twelcomeGuideStyles: false,\n\t\t\twelcomeGuidePage: false,\n\t\t\twelcomeGuideTemplate: false,\n\t\t} );\n\t}\n\n\t/**\n\t * @todo This is a workaround for the fact that the editor canvas is seen as\n\t * ready and visible before the loading spinner is hidden. Ideally, the\n\t * content underneath the loading overlay should be marked inert until the\n\t * loading is done.\n\t */\n\tif ( ! query.size || postId || canvas === 'edit' ) {\n\t\tconst canvasLoader = this.page.locator(\n\t\t\t// Spinner was used instead of the progress bar in an earlier\n\t\t\t// version of the site editor.\n\t\t\t'.edit-site-canvas-loader, .edit-site-canvas-spinner'\n\t\t);\n\n\t\ttry {\n\t\t\t// Wait for the canvas loader to appear first, so that the locator that\n\t\t\t// waits for the hidden state doesn't resolve prematurely.\n\t\t\tawait canvasLoader.waitFor( { state: 'visible', timeout: 60_000 } );\n\t\t\tawait canvasLoader.waitFor( {\n\t\t\t\tstate: 'hidden',\n\t\t\t\t// Bigger timeout is needed for larger entities, like the Large Post\n\t\t\t\t// HTML fixture that we load for performance tests, which often\n\t\t\t\t// doesn't make it under the default timeout value.\n\t\t\t\ttimeout: 60_000,\n\t\t\t} );\n\t\t} catch {\n\t\t\t// If the canvas loader is already disappeared, skip the waiting.\n\t\t\tawait this.page\n\t\t\t\t.getByRole( 'region', { name: 'Editor content' } )\n\t\t\t\t.waitFor();\n\t\t}\n\t}\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBA,eAAsB,gBAErB,UAA6B,CAAC,GAC7B;AACD,QAAM,EAAE,QAAQ,UAAU,MAAM,QAAQ,WAAW,IAAI;AACvD,QAAM,QAAQ,IAAI,gBAAgB;AAElC,MAAK,QAAS;AACb,UAAM,IAAK,UAAU,OAAQ,MAAO,CAAE;AAAA,EACvC;AACA,MAAK,UAAW;AACf,UAAM,IAAK,YAAY,QAAS;AAAA,EACjC;AACA,MAAK,MAAO;AACX,UAAM,IAAK,QAAQ,IAAK;AAAA,EACzB;AACA,MAAK,QAAS;AACb,UAAM,IAAK,UAAU,MAAO;AAAA,EAC7B;AACA,MAAK,YAAa;AACjB,UAAM,IAAK,cAAc,UAAW;AAAA,EACrC;AAEA,QAAM,KAAK,eAAgB,mBAAmB,MAAM,SAAS,CAAE;AAE/D,MAAK,CAAE,QAAQ,kBAAmB;AACjC,UAAM,KAAK,OAAO,eAAgB,kBAAkB;AAAA,MACnD,cAAc;AAAA,MACd,oBAAoB;AAAA,MACpB,kBAAkB;AAAA,MAClB,sBAAsB;AAAA,IACvB,CAAE;AAAA,EACH;AAQA,MAAK,CAAE,MAAM,QAAQ,UAAU,WAAW,QAAS;AAClD,UAAM,eAAe,KAAK,KAAK;AAAA;AAAA;AAAA,MAG9B;AAAA,IACD;AAEA,QAAI;AAGH,YAAM,aAAa,QAAS,EAAE,OAAO,WAAW,SAAS,IAAO,CAAE;AAClE,YAAM,aAAa,QAAS;AAAA,QAC3B,OAAO;AAAA;AAAA;AAAA;AAAA,QAIP,SAAS;AAAA,MACV,CAAE;AAAA,IACH,QAAQ;AAEP,YAAM,KAAK,KACT,UAAW,UAAU,EAAE,MAAM,iBAAiB,CAAE,EAChD,QAAQ;AAAA,IACX;AAAA,EACD;AACD;",
4
+ "sourcesContent": ["/**\n * Internal dependencies\n */\nimport type { Admin } from './';\n\ninterface SiteEditorOptions {\n\tpostId?: string | number;\n\tpostType?: string;\n\tpath?: string;\n\tcanvas?: string;\n\tactiveView?: string;\n\tshowWelcomeGuide?: boolean;\n}\n\n/**\n * Visits the Site Editor main page.\n *\n * @param this\n * @param options Options to visit the site editor.\n */\nexport async function visitSiteEditor(\n\tthis: Admin,\n\toptions: SiteEditorOptions = {}\n) {\n\tconst { postId, postType, path, canvas, activeView } = options;\n\tconst query = new URLSearchParams();\n\n\tif ( postId ) {\n\t\tquery.set( 'postId', String( postId ) );\n\t}\n\tif ( postType ) {\n\t\tquery.set( 'postType', postType );\n\t}\n\tif ( path ) {\n\t\tquery.set( 'path', path );\n\t}\n\tif ( canvas ) {\n\t\tquery.set( 'canvas', canvas );\n\t}\n\tif ( activeView ) {\n\t\tquery.set( 'activeView', activeView );\n\t}\n\n\tawait this.visitAdminPage( 'site-editor.php', query.toString() );\n\n\tif ( ! options.showWelcomeGuide ) {\n\t\tawait this.editor.setPreferences( 'core/edit-site', {\n\t\t\twelcomeGuide: false,\n\t\t\twelcomeGuideStyles: false,\n\t\t\twelcomeGuidePage: false,\n\t\t\twelcomeGuideTemplate: false,\n\t\t} );\n\t}\n\n\t/**\n\t * @todo This is a workaround for the fact that the editor canvas is seen as\n\t * ready and visible before the loading spinner is hidden. Ideally, the\n\t * content underneath the loading overlay should be marked inert until the\n\t * loading is done.\n\t */\n\tif ( ! query.size || postId || canvas === 'edit' ) {\n\t\tconst canvasLoader = this.page.locator(\n\t\t\t// Spinner was used instead of the progress bar in an earlier\n\t\t\t// version of the site editor.\n\t\t\t'.edit-site-canvas-loader, .edit-site-canvas-spinner'\n\t\t);\n\n\t\ttry {\n\t\t\t// Wait for the canvas loader to appear first, so that the locator that\n\t\t\t// waits for the hidden state doesn't resolve prematurely. The loader\n\t\t\t// either renders within a tick or it is skipped entirely (when the\n\t\t\t// editor finishes resolving inside the artificial-delay window in\n\t\t\t// `useIsSiteEditorLoading`), so a long visible-state timeout is just\n\t\t\t// wasted wall clock when the loader never shows up.\n\t\t\tawait canvasLoader.waitFor( { state: 'visible', timeout: 3_000 } );\n\t\t\tawait canvasLoader.waitFor( {\n\t\t\t\tstate: 'hidden',\n\t\t\t\t// Bigger timeout is needed for larger entities, like the Large Post\n\t\t\t\t// HTML fixture that we load for performance tests, which often\n\t\t\t\t// doesn't make it under the default timeout value.\n\t\t\t\ttimeout: 60_000,\n\t\t\t} );\n\t\t} catch {\n\t\t\t// If the canvas loader is already disappeared, skip the waiting.\n\t\t\tawait this.page\n\t\t\t\t.getByRole( 'region', { name: 'Editor content' } )\n\t\t\t\t.waitFor();\n\t\t}\n\t}\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBA,eAAsB,gBAErB,UAA6B,CAAC,GAC7B;AACD,QAAM,EAAE,QAAQ,UAAU,MAAM,QAAQ,WAAW,IAAI;AACvD,QAAM,QAAQ,IAAI,gBAAgB;AAElC,MAAK,QAAS;AACb,UAAM,IAAK,UAAU,OAAQ,MAAO,CAAE;AAAA,EACvC;AACA,MAAK,UAAW;AACf,UAAM,IAAK,YAAY,QAAS;AAAA,EACjC;AACA,MAAK,MAAO;AACX,UAAM,IAAK,QAAQ,IAAK;AAAA,EACzB;AACA,MAAK,QAAS;AACb,UAAM,IAAK,UAAU,MAAO;AAAA,EAC7B;AACA,MAAK,YAAa;AACjB,UAAM,IAAK,cAAc,UAAW;AAAA,EACrC;AAEA,QAAM,KAAK,eAAgB,mBAAmB,MAAM,SAAS,CAAE;AAE/D,MAAK,CAAE,QAAQ,kBAAmB;AACjC,UAAM,KAAK,OAAO,eAAgB,kBAAkB;AAAA,MACnD,cAAc;AAAA,MACd,oBAAoB;AAAA,MACpB,kBAAkB;AAAA,MAClB,sBAAsB;AAAA,IACvB,CAAE;AAAA,EACH;AAQA,MAAK,CAAE,MAAM,QAAQ,UAAU,WAAW,QAAS;AAClD,UAAM,eAAe,KAAK,KAAK;AAAA;AAAA;AAAA,MAG9B;AAAA,IACD;AAEA,QAAI;AAOH,YAAM,aAAa,QAAS,EAAE,OAAO,WAAW,SAAS,IAAM,CAAE;AACjE,YAAM,aAAa,QAAS;AAAA,QAC3B,OAAO;AAAA;AAAA;AAAA;AAAA,QAIP,SAAS;AAAA,MACV,CAAE;AAAA,IACH,QAAQ;AAEP,YAAM,KAAK,KACT,UAAW,UAAU,EAAE,MAAM,iBAAiB,CAAE,EAChD,QAAQ;AAAA,IACX;AAAA,EACD;AACD;",
6
6
  "names": []
7
7
  }
@@ -47,8 +47,12 @@ async function visitSiteEditor(options = {}) {
47
47
  '.edit-site-canvas-loader, .edit-site-canvas-spinner');
48
48
  try {
49
49
  // Wait for the canvas loader to appear first, so that the locator that
50
- // waits for the hidden state doesn't resolve prematurely.
51
- await canvasLoader.waitFor({ state: 'visible', timeout: 60_000 });
50
+ // waits for the hidden state doesn't resolve prematurely. The loader
51
+ // either renders within a tick or it is skipped entirely (when the
52
+ // editor finishes resolving inside the artificial-delay window in
53
+ // `useIsSiteEditorLoading`), so a long visible-state timeout is just
54
+ // wasted wall clock when the loader never shows up.
55
+ await canvasLoader.waitFor({ state: 'visible', timeout: 3_000 });
52
56
  await canvasLoader.waitFor({
53
57
  state: 'hidden',
54
58
  // Bigger timeout is needed for larger entities, like the Large Post
@@ -1 +1 @@
1
- {"version":3,"file":"visit-site-editor.js","sourceRoot":"","sources":["../../src/admin/visit-site-editor.ts"],"names":[],"mappings":";;AAoBA,0CAiEC;AAvED;;;;;GAKG;AACI,KAAK,UAAU,eAAe,CAEpC,UAA6B,EAAE;IAE/B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAC/D,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IAEpC,IAAK,MAAM,EAAG,CAAC;QACd,KAAK,CAAC,GAAG,CAAE,QAAQ,EAAE,MAAM,CAAE,MAAM,CAAE,CAAE,CAAC;IACzC,CAAC;IACD,IAAK,QAAQ,EAAG,CAAC;QAChB,KAAK,CAAC,GAAG,CAAE,UAAU,EAAE,QAAQ,CAAE,CAAC;IACnC,CAAC;IACD,IAAK,IAAI,EAAG,CAAC;QACZ,KAAK,CAAC,GAAG,CAAE,MAAM,EAAE,IAAI,CAAE,CAAC;IAC3B,CAAC;IACD,IAAK,MAAM,EAAG,CAAC;QACd,KAAK,CAAC,GAAG,CAAE,QAAQ,EAAE,MAAM,CAAE,CAAC;IAC/B,CAAC;IACD,IAAK,UAAU,EAAG,CAAC;QAClB,KAAK,CAAC,GAAG,CAAE,YAAY,EAAE,UAAU,CAAE,CAAC;IACvC,CAAC;IAED,MAAM,IAAI,CAAC,cAAc,CAAE,iBAAiB,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAE,CAAC;IAEjE,IAAK,CAAE,OAAO,CAAC,gBAAgB,EAAG,CAAC;QAClC,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAE,gBAAgB,EAAE;YACnD,YAAY,EAAE,KAAK;YACnB,kBAAkB,EAAE,KAAK;YACzB,gBAAgB,EAAE,KAAK;YACvB,oBAAoB,EAAE,KAAK;SAC3B,CAAE,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,IAAK,CAAE,KAAK,CAAC,IAAI,IAAI,MAAM,IAAI,MAAM,KAAK,MAAM,EAAG,CAAC;QACnD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;QACrC,6DAA6D;QAC7D,8BAA8B;QAC9B,qDAAqD,CACrD,CAAC;QAEF,IAAI,CAAC;YACJ,uEAAuE;YACvE,0DAA0D;YAC1D,MAAM,YAAY,CAAC,OAAO,CAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAE,CAAC;YACpE,MAAM,YAAY,CAAC,OAAO,CAAE;gBAC3B,KAAK,EAAE,QAAQ;gBACf,oEAAoE;gBACpE,+DAA+D;gBAC/D,mDAAmD;gBACnD,OAAO,EAAE,MAAM;aACf,CAAE,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACR,iEAAiE;YACjE,MAAM,IAAI,CAAC,IAAI;iBACb,SAAS,CAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAE;iBACjD,OAAO,EAAE,CAAC;QACb,CAAC;IACF,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"visit-site-editor.js","sourceRoot":"","sources":["../../src/admin/visit-site-editor.ts"],"names":[],"mappings":";;AAoBA,0CAqEC;AA3ED;;;;;GAKG;AACI,KAAK,UAAU,eAAe,CAEpC,UAA6B,EAAE;IAE/B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAC/D,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IAEpC,IAAK,MAAM,EAAG,CAAC;QACd,KAAK,CAAC,GAAG,CAAE,QAAQ,EAAE,MAAM,CAAE,MAAM,CAAE,CAAE,CAAC;IACzC,CAAC;IACD,IAAK,QAAQ,EAAG,CAAC;QAChB,KAAK,CAAC,GAAG,CAAE,UAAU,EAAE,QAAQ,CAAE,CAAC;IACnC,CAAC;IACD,IAAK,IAAI,EAAG,CAAC;QACZ,KAAK,CAAC,GAAG,CAAE,MAAM,EAAE,IAAI,CAAE,CAAC;IAC3B,CAAC;IACD,IAAK,MAAM,EAAG,CAAC;QACd,KAAK,CAAC,GAAG,CAAE,QAAQ,EAAE,MAAM,CAAE,CAAC;IAC/B,CAAC;IACD,IAAK,UAAU,EAAG,CAAC;QAClB,KAAK,CAAC,GAAG,CAAE,YAAY,EAAE,UAAU,CAAE,CAAC;IACvC,CAAC;IAED,MAAM,IAAI,CAAC,cAAc,CAAE,iBAAiB,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAE,CAAC;IAEjE,IAAK,CAAE,OAAO,CAAC,gBAAgB,EAAG,CAAC;QAClC,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAE,gBAAgB,EAAE;YACnD,YAAY,EAAE,KAAK;YACnB,kBAAkB,EAAE,KAAK;YACzB,gBAAgB,EAAE,KAAK;YACvB,oBAAoB,EAAE,KAAK;SAC3B,CAAE,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,IAAK,CAAE,KAAK,CAAC,IAAI,IAAI,MAAM,IAAI,MAAM,KAAK,MAAM,EAAG,CAAC;QACnD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;QACrC,6DAA6D;QAC7D,8BAA8B;QAC9B,qDAAqD,CACrD,CAAC;QAEF,IAAI,CAAC;YACJ,uEAAuE;YACvE,qEAAqE;YACrE,mEAAmE;YACnE,kEAAkE;YAClE,qEAAqE;YACrE,oDAAoD;YACpD,MAAM,YAAY,CAAC,OAAO,CAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAE,CAAC;YACnE,MAAM,YAAY,CAAC,OAAO,CAAE;gBAC3B,KAAK,EAAE,QAAQ;gBACf,oEAAoE;gBACpE,+DAA+D;gBAC/D,mDAAmD;gBACnD,OAAO,EAAE,MAAM;aACf,CAAE,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACR,iEAAiE;YACjE,MAAM,IAAI,CAAC,IAAI;iBACb,SAAS,CAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAE;iBACjD,OAAO,EAAE,CAAC;QACb,CAAC;IACF,CAAC;AACF,CAAC"}
@@ -24,39 +24,29 @@ __export(gutenberg_experiments_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(gutenberg_experiments_exports);
26
26
  async function setGutenbergExperiments(experiments) {
27
- const response = await this.request.get(
28
- "/wp-admin/admin.php?page=gutenberg-experiments"
29
- );
30
- const html = await response.text();
31
- const nonce = html.match(/name="_wpnonce" value="([^"]+)"/)[1];
32
- const formData = {
33
- option_page: "gutenberg-experiments",
34
- action: "update",
35
- _wpnonce: nonce,
36
- _wp_http_referer: "/wp-admin/admin.php?page=gutenberg-experiments",
37
- submit: "Save Changes"
38
- };
39
27
  const regularExperiments = experiments.filter(
40
28
  (exp) => exp !== "active_templates"
41
29
  );
42
30
  const hasActiveTemplates = experiments.includes("active_templates");
43
- if (regularExperiments.length > 0) {
44
- Object.assign(
45
- formData,
46
- Object.fromEntries(
47
- regularExperiments.map((experiment) => [
48
- `gutenberg-experiments[${experiment}]`,
49
- 1
50
- ])
51
- )
52
- );
31
+ const experimentsData = {};
32
+ for (const experiment of regularExperiments) {
33
+ experimentsData[experiment] = true;
53
34
  }
35
+ const settingsData = {
36
+ "gutenberg-experiments": experimentsData
37
+ };
54
38
  if (hasActiveTemplates) {
55
- formData.active_templates = 1;
39
+ settingsData.active_templates = {};
40
+ } else {
41
+ const currentSiteSettings = await this.getSiteSettings();
42
+ if (currentSiteSettings.active_templates !== null) {
43
+ settingsData.active_templates = null;
44
+ }
56
45
  }
57
- await this.request.post("/wp-admin/options.php", {
58
- form: formData,
59
- failOnStatusCode: true
46
+ await this.rest({
47
+ path: "/wp/v2/settings",
48
+ method: "POST",
49
+ data: settingsData
60
50
  });
61
51
  }
62
52
  // Annotate the CommonJS export names for ESM import in node:
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/request-utils/gutenberg-experiments.ts"],
4
- "sourcesContent": ["/**\n * Internal dependencies\n */\nimport type { RequestUtils } from './index';\n\n/**\n * Sets the Gutenberg experiments.\n *\n * @param this\n * @param experiments Array of experimental flags to enable. Pass in an empty array to disable all experiments.\n * Use 'active_templates' for the template activation feature.\n */\nasync function setGutenbergExperiments(\n\tthis: RequestUtils,\n\texperiments: string[]\n) {\n\tconst response = await this.request.get(\n\t\t'/wp-admin/admin.php?page=gutenberg-experiments'\n\t);\n\tconst html = await response.text();\n\tconst nonce = html.match( /name=\"_wpnonce\" value=\"([^\"]+)\"/ )![ 1 ];\n\n\tconst formData: Record< string, string | number > = {\n\t\toption_page: 'gutenberg-experiments',\n\t\taction: 'update',\n\t\t_wpnonce: nonce,\n\t\t_wp_http_referer: '/wp-admin/admin.php?page=gutenberg-experiments',\n\t\tsubmit: 'Save Changes',\n\t};\n\n\t// Separate regular experiments from active_templates.\n\tconst regularExperiments = experiments.filter(\n\t\t( exp ) => exp !== 'active_templates'\n\t);\n\tconst hasActiveTemplates = experiments.includes( 'active_templates' );\n\n\t// Add regular experiments to the gutenberg-experiments array.\n\tif ( regularExperiments.length > 0 ) {\n\t\tObject.assign(\n\t\t\tformData,\n\t\t\tObject.fromEntries(\n\t\t\t\tregularExperiments.map( ( experiment ) => [\n\t\t\t\t\t`gutenberg-experiments[${ experiment }]`,\n\t\t\t\t\t1,\n\t\t\t\t] )\n\t\t\t)\n\t\t);\n\t}\n\n\t// Template activation uses the active_templates checkbox field.\n\tif ( hasActiveTemplates ) {\n\t\tformData.active_templates = 1;\n\t}\n\n\tawait this.request.post( '/wp-admin/options.php', {\n\t\tform: formData,\n\t\tfailOnStatusCode: true,\n\t} );\n}\n\nexport { setGutenbergExperiments };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA,eAAe,wBAEd,aACC;AACD,QAAM,WAAW,MAAM,KAAK,QAAQ;AAAA,IACnC;AAAA,EACD;AACA,QAAM,OAAO,MAAM,SAAS,KAAK;AACjC,QAAM,QAAQ,KAAK,MAAO,iCAAkC,EAAI,CAAE;AAElE,QAAM,WAA8C;AAAA,IACnD,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,QAAQ;AAAA,EACT;AAGA,QAAM,qBAAqB,YAAY;AAAA,IACtC,CAAE,QAAS,QAAQ;AAAA,EACpB;AACA,QAAM,qBAAqB,YAAY,SAAU,kBAAmB;AAGpE,MAAK,mBAAmB,SAAS,GAAI;AACpC,WAAO;AAAA,MACN;AAAA,MACA,OAAO;AAAA,QACN,mBAAmB,IAAK,CAAE,eAAgB;AAAA,UACzC,yBAA0B,UAAW;AAAA,UACrC;AAAA,QACD,CAAE;AAAA,MACH;AAAA,IACD;AAAA,EACD;AAGA,MAAK,oBAAqB;AACzB,aAAS,mBAAmB;AAAA,EAC7B;AAEA,QAAM,KAAK,QAAQ,KAAM,yBAAyB;AAAA,IACjD,MAAM;AAAA,IACN,kBAAkB;AAAA,EACnB,CAAE;AACH;",
4
+ "sourcesContent": ["/**\n * Internal dependencies\n */\nimport type { RequestUtils } from './index';\n\n/**\n * Sets the Gutenberg experiments.\n *\n * @param this\n * @param experiments Array of experimental flags to enable. Pass in an empty array to disable all experiments.\n * Use 'active_templates' for the template activation feature.\n */\nasync function setGutenbergExperiments(\n\tthis: RequestUtils,\n\texperiments: string[]\n) {\n\t// Separate regular experiments from active_templates.\n\t// active_templates is stored as a separate option, not in the experiments array.\n\tconst regularExperiments = experiments.filter(\n\t\t( exp ) => exp !== 'active_templates'\n\t);\n\tconst hasActiveTemplates = experiments.includes( 'active_templates' );\n\n\t// Build the experiments object with boolean values.\n\t// When empty array is passed, we send an empty object to disable all experiments.\n\tconst experimentsData: Record< string, boolean > = {};\n\n\tfor ( const experiment of regularExperiments ) {\n\t\texperimentsData[ experiment ] = true;\n\t}\n\n\tconst settingsData: Record< string, unknown > = {\n\t\t'gutenberg-experiments': experimentsData,\n\t};\n\n\t// active_templates lives in a separate top-level option. Sending `{}`\n\t// enables the experiment; sending `null` deletes the option and disables\n\t// it.\n\tif ( hasActiveTemplates ) {\n\t\tsettingsData.active_templates = {};\n\t} else {\n\t\t// WP_REST_Settings_Controller rejects null updates when the stored\n\t\t// value does not match the `type: 'object'` schema (including when the\n\t\t// option is absent and `get_option` falls back to `false`), so we only\n\t\t// send null when the option actually exists.\n\t\tconst currentSiteSettings =\n\t\t\t( await this.getSiteSettings() ) as unknown as {\n\t\t\t\tactive_templates?: unknown;\n\t\t\t};\n\t\tif ( currentSiteSettings.active_templates !== null ) {\n\t\t\tsettingsData.active_templates = null;\n\t\t}\n\t}\n\n\tawait this.rest( {\n\t\tpath: '/wp/v2/settings',\n\t\tmethod: 'POST',\n\t\tdata: settingsData,\n\t} );\n}\n\nexport { setGutenbergExperiments };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA,eAAe,wBAEd,aACC;AAGD,QAAM,qBAAqB,YAAY;AAAA,IACtC,CAAE,QAAS,QAAQ;AAAA,EACpB;AACA,QAAM,qBAAqB,YAAY,SAAU,kBAAmB;AAIpE,QAAM,kBAA6C,CAAC;AAEpD,aAAY,cAAc,oBAAqB;AAC9C,oBAAiB,UAAW,IAAI;AAAA,EACjC;AAEA,QAAM,eAA0C;AAAA,IAC/C,yBAAyB;AAAA,EAC1B;AAKA,MAAK,oBAAqB;AACzB,iBAAa,mBAAmB,CAAC;AAAA,EAClC,OAAO;AAKN,UAAM,sBACH,MAAM,KAAK,gBAAgB;AAG9B,QAAK,oBAAoB,qBAAqB,MAAO;AACpD,mBAAa,mBAAmB;AAAA,IACjC;AAAA,EACD;AAEA,QAAM,KAAK,KAAM;AAAA,IAChB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACP,CAAE;AACH;",
6
6
  "names": []
7
7
  }
@@ -9,33 +9,39 @@ exports.setGutenbergExperiments = setGutenbergExperiments;
9
9
  * Use 'active_templates' for the template activation feature.
10
10
  */
11
11
  async function setGutenbergExperiments(experiments) {
12
- const response = await this.request.get('/wp-admin/admin.php?page=gutenberg-experiments');
13
- const html = await response.text();
14
- const nonce = html.match(/name="_wpnonce" value="([^"]+)"/)[1];
15
- const formData = {
16
- option_page: 'gutenberg-experiments',
17
- action: 'update',
18
- _wpnonce: nonce,
19
- _wp_http_referer: '/wp-admin/admin.php?page=gutenberg-experiments',
20
- submit: 'Save Changes',
21
- };
22
12
  // Separate regular experiments from active_templates.
13
+ // active_templates is stored as a separate option, not in the experiments array.
23
14
  const regularExperiments = experiments.filter((exp) => exp !== 'active_templates');
24
15
  const hasActiveTemplates = experiments.includes('active_templates');
25
- // Add regular experiments to the gutenberg-experiments array.
26
- if (regularExperiments.length > 0) {
27
- Object.assign(formData, Object.fromEntries(regularExperiments.map((experiment) => [
28
- `gutenberg-experiments[${experiment}]`,
29
- 1,
30
- ])));
16
+ // Build the experiments object with boolean values.
17
+ // When empty array is passed, we send an empty object to disable all experiments.
18
+ const experimentsData = {};
19
+ for (const experiment of regularExperiments) {
20
+ experimentsData[experiment] = true;
31
21
  }
32
- // Template activation uses the active_templates checkbox field.
22
+ const settingsData = {
23
+ 'gutenberg-experiments': experimentsData,
24
+ };
25
+ // active_templates lives in a separate top-level option. Sending `{}`
26
+ // enables the experiment; sending `null` deletes the option and disables
27
+ // it.
33
28
  if (hasActiveTemplates) {
34
- formData.active_templates = 1;
29
+ settingsData.active_templates = {};
30
+ }
31
+ else {
32
+ // WP_REST_Settings_Controller rejects null updates when the stored
33
+ // value does not match the `type: 'object'` schema (including when the
34
+ // option is absent and `get_option` falls back to `false`), so we only
35
+ // send null when the option actually exists.
36
+ const currentSiteSettings = (await this.getSiteSettings());
37
+ if (currentSiteSettings.active_templates !== null) {
38
+ settingsData.active_templates = null;
39
+ }
35
40
  }
36
- await this.request.post('/wp-admin/options.php', {
37
- form: formData,
38
- failOnStatusCode: true,
41
+ await this.rest({
42
+ path: '/wp/v2/settings',
43
+ method: 'POST',
44
+ data: settingsData,
39
45
  });
40
46
  }
41
47
  //# sourceMappingURL=gutenberg-experiments.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gutenberg-experiments.js","sourceRoot":"","sources":["../../src/request-utils/gutenberg-experiments.ts"],"names":[],"mappings":";;AA4DS,0DAAuB;AAvDhC;;;;;;GAMG;AACH,KAAK,UAAU,uBAAuB,CAErC,WAAqB;IAErB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CACtC,gDAAgD,CAChD,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAE,iCAAiC,CAAG,CAAE,CAAC,CAAE,CAAC;IAEpE,MAAM,QAAQ,GAAsC;QACnD,WAAW,EAAE,uBAAuB;QACpC,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,KAAK;QACf,gBAAgB,EAAE,gDAAgD;QAClE,MAAM,EAAE,cAAc;KACtB,CAAC;IAEF,sDAAsD;IACtD,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,CAC5C,CAAE,GAAG,EAAG,EAAE,CAAC,GAAG,KAAK,kBAAkB,CACrC,CAAC;IACF,MAAM,kBAAkB,GAAG,WAAW,CAAC,QAAQ,CAAE,kBAAkB,CAAE,CAAC;IAEtE,8DAA8D;IAC9D,IAAK,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAG,CAAC;QACrC,MAAM,CAAC,MAAM,CACZ,QAAQ,EACR,MAAM,CAAC,WAAW,CACjB,kBAAkB,CAAC,GAAG,CAAE,CAAE,UAAU,EAAG,EAAE,CAAC;YACzC,yBAA0B,UAAW,GAAG;YACxC,CAAC;SACD,CAAE,CACH,CACD,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,IAAK,kBAAkB,EAAG,CAAC;QAC1B,QAAQ,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAE,uBAAuB,EAAE;QACjD,IAAI,EAAE,QAAQ;QACd,gBAAgB,EAAE,IAAI;KACtB,CAAE,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"gutenberg-experiments.js","sourceRoot":"","sources":["../../src/request-utils/gutenberg-experiments.ts"],"names":[],"mappings":";;AA6DS,0DAAuB;AAxDhC;;;;;;GAMG;AACH,KAAK,UAAU,uBAAuB,CAErC,WAAqB;IAErB,sDAAsD;IACtD,iFAAiF;IACjF,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,CAC5C,CAAE,GAAG,EAAG,EAAE,CAAC,GAAG,KAAK,kBAAkB,CACrC,CAAC;IACF,MAAM,kBAAkB,GAAG,WAAW,CAAC,QAAQ,CAAE,kBAAkB,CAAE,CAAC;IAEtE,oDAAoD;IACpD,kFAAkF;IAClF,MAAM,eAAe,GAA8B,EAAE,CAAC;IAEtD,KAAM,MAAM,UAAU,IAAI,kBAAkB,EAAG,CAAC;QAC/C,eAAe,CAAE,UAAU,CAAE,GAAG,IAAI,CAAC;IACtC,CAAC;IAED,MAAM,YAAY,GAA8B;QAC/C,uBAAuB,EAAE,eAAe;KACxC,CAAC;IAEF,sEAAsE;IACtE,yEAAyE;IACzE,MAAM;IACN,IAAK,kBAAkB,EAAG,CAAC;QAC1B,YAAY,CAAC,gBAAgB,GAAG,EAAE,CAAC;IACpC,CAAC;SAAM,CAAC;QACP,mEAAmE;QACnE,uEAAuE;QACvE,uEAAuE;QACvE,6CAA6C;QAC7C,MAAM,mBAAmB,GACxB,CAAE,MAAM,IAAI,CAAC,eAAe,EAAE,CAE7B,CAAC;QACH,IAAK,mBAAmB,CAAC,gBAAgB,KAAK,IAAI,EAAG,CAAC;YACrD,YAAY,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACtC,CAAC;IACF,CAAC;IAED,MAAM,IAAI,CAAC,IAAI,CAAE;QAChB,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,YAAY;KAClB,CAAE,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"visit-site-editor.d.ts","sourceRoot":"","sources":["../../src/admin/visit-site-editor.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;AAEhC,UAAU,iBAAiB;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACpC,IAAI,EAAE,KAAK,EACX,OAAO,GAAE,iBAAsB,iBA+D/B"}
1
+ {"version":3,"file":"visit-site-editor.d.ts","sourceRoot":"","sources":["../../src/admin/visit-site-editor.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;AAEhC,UAAU,iBAAiB;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACpC,IAAI,EAAE,KAAK,EACX,OAAO,GAAE,iBAAsB,iBAmE/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"gutenberg-experiments.d.ts","sourceRoot":"","sources":["../../src/request-utils/gutenberg-experiments.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;;;GAMG;AACH,iBAAe,uBAAuB,CACrC,IAAI,EAAE,YAAY,EAClB,WAAW,EAAE,MAAM,EAAE,iBA4CrB;AAED,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
1
+ {"version":3,"file":"gutenberg-experiments.d.ts","sourceRoot":"","sources":["../../src/request-utils/gutenberg-experiments.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;;;GAMG;AACH,iBAAe,uBAAuB,CACrC,IAAI,EAAE,YAAY,EAClB,WAAW,EAAE,MAAM,EAAE,iBA6CrB;AAED,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/e2e-test-utils-playwright",
3
- "version": "1.44.0",
3
+ "version": "1.45.0",
4
4
  "description": "End-To-End (E2E) test utils for WordPress.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -54,5 +54,5 @@
54
54
  "publishConfig": {
55
55
  "access": "public"
56
56
  },
57
- "gitHead": "b862d8c84121a47bbeff882f6c87e61681ce2e0d"
57
+ "gitHead": "8c229eaed0e88c9827e2da3d73a78f9ddd77714b"
58
58
  }