/**
* 用户中心左侧栏图标契约(参考主题 1:1 对齐)。
*
* 硬约束:
* 1) 「我的服务 / 功能设置」两个网格使用参考主题的 icon-but-box / user-icon-but-box
* 外壳,图标全部来自主题内置 SVG sprite(aksrt_icon_markup('zibsvg-*')),
* 不再出现 Font Awesome 字形。
* 2) 侧栏其余部件(余额/积分卡、创作/推广卡、VIP 入口、抽屉触发器)同样只使用
* sprite 图标,箭头统一为 zibsvg-right,保证侧栏只剩一种图标族。
* 3) 旧的 uc-service-grid 外壳、色调底色与计数角标必须已彻底移除,不得残留。
*/
'use strict';
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');
const sidebarDir = 'inc/helpers/user-center-renderers/';
const sidebarFiles = [
'sidebar-nav.php',
'sidebar-commerce.php',
'sidebar-creator.php',
'sidebar-vip.php',
'profile-sidebar.php',
];
test('服务/设置网格使用参考主题 icon-but-box 外壳与 sprite 图标', () => {
const nav = read(sidebarDir + 'sidebar-nav.php');
assert.match(nav, /class="flex ac hh text-center icon-but-box user-icon-but-box"/);
assert.match(nav, /
<\?php echo \$icon_html;/);
assert.match(nav, /
/);
assert.match(nav, /aksrt_icon_markup\('zibsvg-' \. \(string\) \$item\['icon'\]\)/);
// 参考主题选型:我的服务 = trend-color / user-auth / order-color。
assert.match(nav, /'icon'\s+=>\s+'trend-color'/);
assert.match(nav, /'icon'\s+=>\s+'user-auth'/);
assert.match(nav, /'icon'\s+=>\s+'order-color'/);
// 功能设置 = msg-color / user-color / security-color。
assert.match(nav, /'icon'\s+=>\s+'msg-color'/);
assert.match(nav, /'icon'\s+=>\s+'user-color'/);
assert.match(nav, /'icon'\s+=>\s+'security-color'/);
// 每项都带 tab,保证 icon-but-* 类名完整且选中态可同步。
for (const tab of ['level', 'auth', 'orders', 'msg', 'profile', 'settings']) {
assert.match(nav, new RegExp(`'tab'\\s+=>\\s+'${tab}'`), `missing tab key: ${tab}`);
}
// AKSRT 的跳转契约保留
+ data-tab,不搬参考主题的 - 。
assert.match(nav, //);
assert.doesNotMatch(nav, /data-onclick/);
});
test('侧栏五个部件均不再出现 Font Awesome 字形', () => {
for (const file of sidebarFiles) {
const source = read(sidebarDir + file);
assert.doesNotMatch(source, /fa\s+fas\s+fa-/, `${file} still renders a Font Awesome glyph`);
assert.doesNotMatch(source, /