Align homepage and category discovery, modern widgets, admin controls, quotes, and comments with the reference theme. Remove superseded paths and add rendering and behavior coverage. Update stale asset and finance contracts; all 760 Node tests and 139 widget assertions pass.
53 lines
2.9 KiB
JavaScript
53 lines
2.9 KiB
JavaScript
const test = require('node:test')
|
|
const assert = require('node:assert/strict')
|
|
const fs = require('node:fs')
|
|
const path = require('node:path')
|
|
|
|
const root = path.resolve(__dirname, '../..')
|
|
const core = require(path.join(root, 'assets/widgets/admin-core.js'))
|
|
const admin = fs.readFileSync(path.join(root, 'assets/widgets/admin.js'), 'utf8')
|
|
const controller = fs.readFileSync(path.join(root, 'src/WidgetSystem/AdminFormController.php'), 'utf8')
|
|
const transfer = fs.readFileSync(path.join(root, 'src/WidgetSystem/TransferController.php'), 'utf8')
|
|
const renderer = fs.readFileSync(path.join(root, 'src/WidgetSystem/FormRenderer.php'), 'utf8')
|
|
const styles = fs.readFileSync(path.join(root, 'assets/widgets/admin.css'), 'utf8')
|
|
|
|
test('lazy widget forms resolve assigned instances across core and customizer markup', () => {
|
|
assert.equal(core.resolveWidgetNumber('widget-aksrt_widget_posts[12][title]', 'widget-aksrt_widget_posts-12', '__i__'), '12')
|
|
assert.equal(core.resolveWidgetNumber('', 'widget-aksrt_widget_posts-8', '__i__'), '8')
|
|
assert.equal(core.resolveWidgetNumber('', '', '4'), '4')
|
|
assert.equal(core.resolveWidgetNumber('', '', '__i__'), '')
|
|
assert.equal(core.resolveWidgetNumber('', 'widget-aksrt_widget_posts-0', ''), '')
|
|
assert.match(admin, /customize-control-widget_form \.aksrt-widget-form-lazy/)
|
|
})
|
|
|
|
test('lazy form AJAX failures remain retryable and instance filters match WordPress widget forms', () => {
|
|
assert.match(admin, /data\('loading', false\)/)
|
|
assert.match(controller, /apply_filters\('widget_form_callback', \$instance, \$widget\)/)
|
|
})
|
|
|
|
test('sidebar toolbars open one contextual import, export, or template dialog', () => {
|
|
assert.match(admin, /widgets-holder-wrap:not\(#available-widgets\)/)
|
|
assert.match(admin, /control-section-sidebar/)
|
|
assert.match(admin, /data-aksrt-transfer-action/)
|
|
assert.match(admin, /data-sidebar-id/)
|
|
assert.match(admin, /data-transfer-tab/)
|
|
assert.match(transfer, /aksrt-widget-transfer-modal__dialog/)
|
|
assert.match(transfer, /aksrt_widgets_template_preview/)
|
|
assert.doesNotMatch(transfer, /aksrt-widget-transfer__grid/)
|
|
assert.doesNotMatch(transfer, /function sidebar_select/)
|
|
assert.match(admin, /aksrt-widget-customizer-remove/)
|
|
})
|
|
|
|
test('widget fields follow the current CSF compact palette and cloneable group patterns', () => {
|
|
assert.match(renderer, /aksrt-widget-palette-choice/)
|
|
assert.match(renderer, /<details class="aksrt-widget-repeater__row"/)
|
|
assert.match(renderer, /data-min-items=/)
|
|
assert.match(admin, /function updateRepeaterControls/)
|
|
assert.match(styles, /\.aksrt-widget-choices--palette/)
|
|
assert.match(styles, /\.aksrt-widget-repeater__bar/)
|
|
assert.match(styles, /\.customize-control-widget_form \.aksrt-widget-field__label/)
|
|
assert.match(admin, /if \(!response\?\.success \|\| !response\.data\) \{/)
|
|
assert.match(admin, /responseJSON\?\.data\?\.message/)
|
|
assert.doesNotMatch(admin, /if \(!response\?\.success\) throw new Error/)
|
|
})
|