@wordpress/e2e-test-utils
Version:
End-To-End (E2E) test utils for WordPress.
97 lines (96 loc) • 2.65 kB
JavaScript
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