Files
wordpress-theme-aksrt/tests/widget-system/post-editor-reference-contract.test.cjs
T
2026-08-26 16:59:42 +08:00

116 lines
4.6 KiB
JavaScript

const assert = require('node:assert/strict');
const fs = require('node:fs');
const path = require('node:path');
const test = require('node:test');
const root = path.resolve(__dirname, '..', '..');
const read = (file) => fs.readFileSync(path.join(root, file), 'utf8');
test('block and classic editors share the reference article extension fields', () => {
const meta = read('src/Core/PostMetaBox.php');
const fields = [
'thumbnail_url',
'cover_image',
'featured_slide',
'featured_video',
'featured_video_title',
'featured_video_episode',
'subtitle',
'views',
'like',
'show_layout',
'no_article-navs',
'article_maxheight_xz',
];
assert.ok(meta.includes("add_meta_box('post_main', __('文章扩展'"));
assert.match(meta, /\['post\.php', 'post-new\.php'\]/);
assert.match(meta, /wp_enqueue_media\(\)/);
fields.forEach((field) => assert.match(meta, new RegExp(field.replace('-', '\\-'))));
assert.doesNotMatch(meta, /custom_excerpt|header_image_mode|show_reading_progress|enable_lightbox|enable_pdf|copyright_text|is_featured/);
});
test('front submit follows the reference newposts shell and cards', () => {
const page = read('templates/pages/page-submit.php');
const main = read('templates/parts/submit/editor-main.php');
const terms = read('templates/parts/submit/sidebar-terms.php');
const pay = read('templates/parts/submit/sidebar-pay.php');
const submit = read('templates/parts/submit/sidebar-submit.php');
assert.match(page, /content-wrap newposts-wrap/);
assert.match(page, /class="content-layout"/);
assert.match(page, /class="sidebar"/);
assert.match(main, /zib-widget full-widget-sm editor-main-box/);
assert.match(main, /relative newposts-title/);
assert.match(terms, /newpost-cat-drop drop-select dropdown dependency-box/);
assert.match(pay, /zib-widget dependency-box mb10-sm newpost-pay-box/);
assert.match(pay, /pay-dawnload-edit/);
assert.match(submit, /separator muted-3-color theme-box/);
assert.match(submit, /new-posts-submit/);
});
test('front submit image and visibility actions live in the TinyMCE toolbar', () => {
const main = read('templates/parts/submit/editor-main.php');
const page = read('templates/pages/page-submit.php');
const submit = read('assets/js/front-submit.js');
const editor = read('assets/js/front-submit-editor.js');
assert.match(main, /\$toolbar1\[\]\s*=\s*'aksrt_image'/);
assert.match(main, /\$toolbar1\[\]\s*=\s*'aksrt_hide'/);
assert.match(main, /mce_external_plugins/);
assert.match(main, /aksrt_editor_tools/);
assert.match(editor, /PluginManager\.add\('aksrt_editor_tools'/);
assert.match(editor, /addButton\('aksrt_image'/);
assert.match(editor, /addButton\('aksrt_hide'/);
assert.match(editor, /type:\s*'menubutton'/);
assert.match(editor, /data-editor-media-tab="upload"/);
assert.match(editor, /data-editor-media-tab="external"/);
assert.match(editor, /\(cfg\.uploads \|\| \{\}\)\.image/);
assert.match(page, /'canUploadImage'\s*=>\s*!empty\(\$ctx\['can_upload_img'\]\)/);
assert.doesNotMatch(main, /newposts-editor-tools|data-insert-shortcode|data-insert-upload-image/);
assert.doesNotMatch(submit, /bindShortcodes|data-insert-shortcode|data-insert-upload-image/);
assert.doesNotMatch(editor, /hidecontent|shop|forum|bbs_/i);
});
test('article paid-content metabox follows the reference field set without shop enhancements', () => {
const meta = read('src/Core/ResourceMetaBox.php');
const fields = [
'pay_type',
'pay_limit',
'pay_modo',
'order_expired_s',
'points_price',
'original_price',
'promotion_tag',
'gallery_show',
'video_episode',
'video_scale_height',
'downloads',
'attributes',
'pay_doc',
'pay_details',
'pay_extra_hide',
];
assert.match(meta, /add_meta_box\('aksrt_pay_meta', __\('付费功能'/);
fields.forEach((field) => assert.match(meta, new RegExp(field)));
assert.doesNotMatch(meta, /aksrt_pay_(?:stock|purchase_limit|card_keys|free_preview|require_login|require_captcha)/);
assert.doesNotMatch(meta, /电商增强|parse_json_array/);
});
test('ordinary article editor chain does not import shop or forum routes', () => {
const files = [
'src/Core/PostMetaBox.php',
'src/Core/FrontSubmit.php',
'src/Core/FrontSubmitSave.php',
'src/Core/FrontSubmitPay.php',
'src/Core/FrontSubmitFeatured.php',
'templates/pages/page-submit.php',
'templates/parts/submit/sidebar-pay.php',
];
const source = files.map(read).join('\n');
assert.doesNotMatch(source, /shop_product|forum_post|bbs_/i);
assert.doesNotMatch(source, /aksrtpay_s|featured_payload|vip_1_(?:price|points)|vip_2_(?:price|points)/);
});