Files
creator-hub/web/tests/monitoring-account-list.test.cjs
T

43 lines
1.8 KiB
JavaScript

const assert = require('node:assert/strict');
const { readFileSync } = require('node:fs');
const { test } = require('node:test');
const ts = require('typescript');
const source = ts.createSourceFile(
'MonitoringAccountList.tsx',
readFileSync(`${__dirname}/../src/components/accounts/MonitoringAccountList.tsx`, 'utf8'),
ts.ScriptTarget.Latest,
true,
ts.ScriptKind.TSX,
);
const code = source.getFullText();
test('监控账号列表使用 Table,一行一个账号,保留详情入口和操作', () => {
assert.match(code, /<Table\b/);
assert.match(code, /rowKey="id"/);
assert.match(code, /loading=\{pending\}/);
assert.match(code, /history\.push\(`\/accounts\/monitoring\/\$\{account\.id\}`\)/);
for (const action of ['openTags(account)', 'syncCompetitor(account)', 'toggleCompetitor(account)', 'deleteAccount(account)']) {
assert.ok(code.includes(action), `${action} 应留在表格行操作中`);
}
assert.doesNotMatch(code, /<Listy\b/);
});
test('粉丝、关注、作品分别占一列,单元格只显示数值', () => {
assert.doesNotMatch(code, /title: '账号数据'/);
for (const [title, value] of [
['粉丝', 'account.follower_count'],
['关注', 'account.following_count'],
['作品', 'account.work_count ?? account.aweme_count ?? null'],
]) {
assert.ok(code.includes(`title: '${title}',\n render: (_, account) => formatCount(${value}),`), `${title} 应为单独数值列`);
}
});
test('列表不展示冗长的平台账号,保留画像统计及同步异常', () => {
assert.doesNotMatch(code, /row\.platform_account_key|account\.platform_account_key/);
for (const field of ['follower_count', 'following_count', 'work_count', 'latest_published_at', 'last_sync_at', 'sync_error']) {
assert.ok(code.includes(`account.${field}`), `${field} 应保留在表格中`);
}
});