UNPKG

@wordpress/e2e-test-utils

Version:
97 lines (96 loc) 2.65 kB
import { rest, batch } from "./rest-api"; const menusEndpoint = "/wp/v2/menus"; const menuItemsEndpoint = "/wp/v2/menu-items"; const menuItemObjectRequests = { post: (menuItem) => ({ path: "/wp/v2/posts", method: "POST", data: { title: menuItem.title, status: "publish" } }), page: (menuItem) => ({ path: "/wp/v2/pages", method: "POST", data: { title: menuItem.title, status: "publish" } }) }; const menuItemObjectMatchers = { post: (menuItem, post) => menuItem.title === post.title.raw, page: (menuItem, page) => menuItem.title === page.title.raw }; async function deleteAllMenus() { const menus = await rest({ path: menusEndpoint }); await batch( menus.map((menu) => ({ method: "DELETE", path: `${menusEndpoint}/${menu.id}?force=true` })) ); } async function createMenu(menu, menuItems) { const menuResponse = await rest({ method: "POST", path: menusEndpoint, data: menu }); if (!menuItems?.length) { return; } const objectRequests = menuItems.map((menuItem) => { const getRequest = menuItemObjectRequests[menuItem.object]; return getRequest ? getRequest(menuItem) : void 0; }).filter((request) => !!request); const objectResponses = []; for (const objectRequest of objectRequests) { const objectResponse = await rest(objectRequest); objectResponses.push(objectResponse); } const menuItemsResponse = await batch( menuItems.map((menuItem) => { const objectMatcher = menuItemObjectMatchers[menuItem.object]; let object; if (objectMatcher) { object = objectResponses.find( (objectResponse) => objectMatcher(menuItem, objectResponse) ); } return { method: "POST", path: menuItemsEndpoint, body: { menus: menuResponse.id, object_id: object?.id, url: object?.link, ...menuItem, parent: void 0 } }; }) ); await batch( menuItems.map((menuItem, index) => { const fixtureParentIndex = menuItem?.parent !== void 0; if (!fixtureParentIndex) { return void 0; } const parent = menuItemsResponse.responses[menuItem.parent].body.id; const menuItemResponse = menuItemsResponse.responses[index]; const menuItemId = menuItemResponse.body.id; return { method: "PUT", path: `${menuItemsEndpoint}/${menuItemId}`, body: { ...menuItemResponse.body, parent } }; }).filter((request) => !!request) ); } export { createMenu, deleteAllMenus }; //# sourceMappingURL=menus.js.map