+
diff --git a/tests/widget-system/message-center-contract.test.cjs b/tests/widget-system/message-center-contract.test.cjs
index bdd795ca..873dc047 100644
--- a/tests/widget-system/message-center-contract.test.cjs
+++ b/tests/widget-system/message-center-contract.test.cjs
@@ -45,6 +45,30 @@ test('message center URL helper builds every view from the configured alias', ()
});
});
+test('message pagination setting switches between cumulative loading and numeric replacement', () => {
+ const result = spawnSync(process.env.PHP_BINARY || 'php', [path.join(__dirname, 'message-center-pagination-harness.php')], {
+ cwd: root,
+ encoding: 'utf8',
+ });
+ assert.equal(result.status, 0, result.stderr || result.stdout);
+ assert.deepEqual(JSON.parse(result.stdout), {
+ ajax_items: 40,
+ ajax_has_more: true,
+ ajax_has_numbers: false,
+ default_items: 20,
+ default_has_more: false,
+ default_numbers: true,
+ default_current_2: true,
+ });
+
+ const script = read('assets/js/messages.js');
+ const styles = read('assets/css/frontend/messages.css');
+ assert.match(script, /data-message-next-page|dataset\.messageNextPage/);
+ assert.match(script, /appendMessagePage\(result\.data\.content\)/);
+ assert.match(styles, /\.messages-pagination__more/);
+ assert.match(styles, /\.messages-pagination__button\.is-current/);
+});
+
test('tabs, pagination, actions, and detail all replace DOM fragments', () => {
const center = read('inc/modules/message-center.php');
const script = read('assets/js/messages.js');
diff --git a/tests/widget-system/message-center-pagination-harness.php b/tests/widget-system/message-center-pagination-harness.php
new file mode 100644
index 00000000..2d7a2d9b
--- /dev/null
+++ b/tests/widget-system/message-center-pagination-harness.php
@@ -0,0 +1,74 @@
+= 1; $number--) {
+ $items[] = [
+ 'id' => (string) $number,
+ 'type' => 'comment_reply',
+ 'title' => '消息 ' . $number,
+ 'desc' => '内容',
+ 'url' => '',
+ 'read' => 0,
+ 'created_at' => '2026-08-25 12:00:00',
+ ];
+ }
+ return $items;
+ }
+}
+
+namespace AKSRT\Settings {
+ final class Settings {
+ public static string $paginateType = 'ajax_lists';
+
+ public static function notification_settings(): array {
+ return ['paginate_type' => self::$paginateType];
+ }
+ }
+}
+
+namespace {
+ require_once dirname(__DIR__, 2) . '/inc/modules/message-center.php';
+
+ function render_pagination_mode(string $type): string {
+ \AKSRT\Settings\Settings::$paginateType = $type;
+ ob_start();
+ aksrt_render_message_center_list(1, 'unread', 2);
+ return (string) ob_get_clean();
+ }
+
+ $ajax = render_pagination_mode('ajax_lists');
+ $numbers = render_pagination_mode('default');
+
+ echo json_encode([
+ 'ajax_items' => substr_count($ajax, ' str_contains($ajax, 'messages-pagination--numbers'),
+ 'default_items' => substr_count($numbers, '