2024-02-16 12:00:36 +00:00
|
|
|
/**
|
|
|
|
* External dependencies
|
|
|
|
*/
|
|
|
|
import { readFile } from 'fs/promises';
|
|
|
|
import Handlebars from 'handlebars';
|
|
|
|
import {
|
|
|
|
CreatePostPayload,
|
|
|
|
Post,
|
|
|
|
} from '@wordpress/e2e-test-utils-playwright/build-types/request-utils/posts';
|
|
|
|
import { RequestUtils } from '@wordpress/e2e-test-utils-playwright';
|
|
|
|
|
|
|
|
export type TestingPost = {
|
|
|
|
post: Post;
|
|
|
|
deletePost: () => Promise< void >;
|
|
|
|
};
|
|
|
|
|
|
|
|
Handlebars.registerPartial(
|
|
|
|
'wp-block',
|
|
|
|
`
|
|
|
|
<!-- wp:{{blockName}} {{{stringify attributes}}} -->
|
|
|
|
{{> @partial-block }}
|
|
|
|
<!-- /wp:{{blockName}} -->
|
|
|
|
`
|
|
|
|
);
|
|
|
|
|
|
|
|
Handlebars.registerHelper( 'stringify', function ( context ) {
|
|
|
|
return JSON.stringify( context );
|
|
|
|
} );
|
|
|
|
|
|
|
|
export const deletePost = async ( requestUtils: RequestUtils, id: number ) => {
|
|
|
|
return requestUtils.rest( {
|
|
|
|
method: 'DELETE',
|
|
|
|
path: `/wp/v2/posts/${ id }`,
|
|
|
|
params: {
|
|
|
|
force: true,
|
|
|
|
},
|
|
|
|
} );
|
|
|
|
};
|
|
|
|
|
|
|
|
const posts: number[] = [];
|
|
|
|
|
|
|
|
const createPost = async (
|
|
|
|
requestUtils: RequestUtils,
|
|
|
|
payload: CreatePostPayload
|
|
|
|
) => {
|
2024-02-29 02:43:59 +00:00
|
|
|
// The underlying createPost method passes the payload as URI params, triggering URI too long errors
|
|
|
|
// if you pass long blog post content.
|
|
|
|
const post = await requestUtils.rest( {
|
|
|
|
method: 'POST',
|
|
|
|
path: `/wp/v2/posts`,
|
|
|
|
data: { ...payload },
|
|
|
|
} );
|
2024-02-16 12:00:36 +00:00
|
|
|
posts.push( post.id );
|
|
|
|
return post;
|
|
|
|
};
|
|
|
|
|
|
|
|
export type PostPayload = Partial< CreatePostPayload >;
|
|
|
|
|
|
|
|
export const createPostFromTemplate = async (
|
|
|
|
requestUtils: RequestUtils,
|
|
|
|
post: PostPayload,
|
|
|
|
templatePath: string,
|
|
|
|
data: unknown
|
|
|
|
) => {
|
|
|
|
const templateContent = await readFile( templatePath, 'utf8' );
|
|
|
|
const content = Handlebars.compile( templateContent )( data );
|
|
|
|
|
|
|
|
const payload: CreatePostPayload = {
|
|
|
|
status: 'publish',
|
|
|
|
date_gmt: new Date().toISOString(),
|
|
|
|
content,
|
|
|
|
...post,
|
|
|
|
};
|
|
|
|
|
|
|
|
return createPost( requestUtils, payload );
|
|
|
|
};
|