From 1902ba1e872ec4d7fd920e5ae3a120375fe43b2c Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 30 Oct 2026 17:36:42 +0800 Subject: [PATCH] fix(admin): translate asset notification type labels Register Chinese labels and matching badge tones for balance and points increase/decrease types across message filters, list badges and details. Add regression coverage without changing notification delivery behavior. Co-Authored-By: Claude Fable 5 --- src/Messages/MessageTypes.php | 8 ++++++-- .../widget-system/message-admin-contract.test.cjs | 15 +++++++++++++++ tests/widget-system/message-admin-harness.php | 6 +++++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/Messages/MessageTypes.php b/src/Messages/MessageTypes.php index b5c301bb..1273fc17 100644 --- a/src/Messages/MessageTypes.php +++ b/src/Messages/MessageTypes.php @@ -38,6 +38,10 @@ final class MessageTypes { 'ticket_reply' => __('工单回复', 'aksrt'), 'ticket_urge' => __('工单催单', 'aksrt'), 'ticket_closed' => __('工单关闭', 'aksrt'), + 'asset_balance_increase' => __('余额增加', 'aksrt'), + 'asset_balance_decrease' => __('余额减少', 'aksrt'), + 'asset_points_increase' => __('积分增加', 'aksrt'), + 'asset_points_decrease' => __('积分减少', 'aksrt'), ]; } @@ -50,10 +54,10 @@ final class MessageTypes { if (str_starts_with($type, 'ticket_')) { return 'info'; } - if (in_array($type, ['report', 'ban_appeal'], true)) { + if (in_array($type, ['report', 'ban_appeal', 'asset_balance_decrease', 'asset_points_decrease'], true)) { return 'danger'; } - if (in_array($type, ['withdraw', 'level_up', 'medal', 'auth_apply_reply', 'download_ready'], true)) { + if (in_array($type, ['withdraw', 'level_up', 'medal', 'auth_apply_reply', 'download_ready', 'asset_balance_increase', 'asset_points_increase'], true)) { return 'success'; } if (in_array($type, ['system', 'notice'], true)) { diff --git a/tests/widget-system/message-admin-contract.test.cjs b/tests/widget-system/message-admin-contract.test.cjs index 03251053..4b3e4b0b 100644 --- a/tests/widget-system/message-admin-contract.test.cjs +++ b/tests/widget-system/message-admin-contract.test.cjs @@ -144,6 +144,21 @@ test('role broadcasts require confirmation of the current role and count on the assert.equal(nonce_checked.length, 8); }); +test('asset types use Chinese labels in filters, row badges and details', () => { + const { asset_types, filter_form, asset_table } = harness(); + assert.deepEqual(asset_types, { + asset_balance_increase: ['余额增加', 'success'], + asset_balance_decrease: ['余额减少', 'danger'], + asset_points_increase: ['积分增加', 'success'], + asset_points_decrease: ['积分减少', 'danger'], + }); + for (const [type, [label]] of Object.entries(asset_types)) { + assert.ok(filter_form.includes(``)); + } + assert.match(asset_table, /class="aksrt-msg-badge is-success"[^>]*>余额增加<\/a>/); + assert.match(asset_table, /
消息类型<\/dt>
余额增加<\/dd>/); +}); + test('single row actions cannot accidentally operate on the checked bulk selection', () => { const { single_delete } = harness(); assert.deepEqual(single_delete.sql[0].params, [8]); diff --git a/tests/widget-system/message-admin-harness.php b/tests/widget-system/message-admin-harness.php index 877903c6..1b96c9b4 100644 --- a/tests/widget-system/message-admin-harness.php +++ b/tests/widget-system/message-admin-harness.php @@ -84,7 +84,7 @@ namespace { public function get_var($sql) { return 2; } public function get_results($sql, $format) { return []; } public function get_row($sql, $format) { return ['total' => 2, 'unread' => 1, 'today' => 1, 'recipients' => 2]; } - public function get_col($sql) { return ['system']; } + public function get_col($sql) { return ['system', 'asset_balance_increase', 'asset_balance_decrease', 'asset_points_increase', 'asset_points_decrease']; } public function query($sql) { $this->queries[] = $sql; return 1; } public function esc_like($text) { return addcslashes($text, '_%\\'); } } @@ -120,6 +120,10 @@ namespace { $out['table'] = $probe->html('render_message_table', [$row, array_merge($row, ['id' => 9, 'is_read' => 1, 'read_at' => '2026-10-30 03:30:00'])], $filters, 3, false); $out['empty'] = $probe->html('render_message_table', [], $filters, 1, false); $out['cache_calls'] = $GLOBALS['cache_calls']; + $out['asset_table'] = $probe->html('render_message_table', [array_merge($row, ['type' => 'asset_balance_increase'])], $filters, 1, false); + foreach (['asset_balance_increase', 'asset_balance_decrease', 'asset_points_increase', 'asset_points_decrease'] as $type) { + $out['asset_types'][$type] = [\AKSRT\Messages\MessageTypes::label($type), \AKSRT\Messages\MessageTypes::tone($type)]; + } $wpdb->prepared = []; \AKSRT\Messages\NotificationAdminQuery::paginate($out['query_filters'], 1);