douyin-release-gate / verify (push) Failing after 18m54s
Add Douyin notification polling, event details, and manual multi-account private messaging. Refine environment memory settings, account operations, login collection recovery, and message UI; update tests and documentation.
69 lines
2.6 KiB
JavaScript
69 lines
2.6 KiB
JavaScript
const assert = require('node:assert/strict');
|
|
const { readFileSync } = require('node:fs');
|
|
const { createRequire } = require('node:module');
|
|
const { test } = require('node:test');
|
|
const vm = require('node:vm');
|
|
const ts = require('typescript');
|
|
|
|
const source = ts.createSourceFile(
|
|
'AccountManagementList.tsx',
|
|
readFileSync(`${__dirname}/../src/components/accounts/AccountManagementList.tsx`, 'utf8'),
|
|
ts.ScriptTarget.Latest,
|
|
true,
|
|
ts.ScriptKind.TSX,
|
|
);
|
|
const requireWeb = createRequire(`${__dirname}/../package.json`);
|
|
const { Tag } = requireWeb('antd');
|
|
let columns;
|
|
function visit(node) {
|
|
if (ts.isVariableDeclaration(node) && node.name.getText(source) === 'columns') {
|
|
columns = node.initializer.elements;
|
|
}
|
|
ts.forEachChild(node, visit);
|
|
}
|
|
visit(source);
|
|
|
|
function property(column, key) {
|
|
return column.properties.find(
|
|
(prop) => ts.isPropertyAssignment(prop) && prop.name.getText(source) === key,
|
|
)?.initializer;
|
|
}
|
|
|
|
function businessColumn() {
|
|
const column = columns.find((item) => property(item, 'title')?.text === '业务状态');
|
|
assert.ok(column, '我的账号列表必须有业务状态列');
|
|
const { outputText } = ts.transpileModule(`exports.column = (${column.getText(source)});`, {
|
|
compilerOptions: { jsx: ts.JsxEmit.ReactJSX, module: ts.ModuleKind.CommonJS },
|
|
});
|
|
const context = { exports: {}, require: requireWeb, Tag };
|
|
vm.runInNewContext(outputText, context);
|
|
return context.exports.column;
|
|
}
|
|
|
|
for (const [status, label, color] of [
|
|
['normal', '正常', 'success'],
|
|
['muted', '禁言', 'warning'],
|
|
['banned', '封禁', 'error'],
|
|
['deleted', '注销', 'default'],
|
|
]) {
|
|
test(`业务状态 ${status} 显示“${label}”及对应颜色`, () => {
|
|
const column = businessColumn();
|
|
assert.equal(column.dataIndex, 'business_status');
|
|
const result = column.render(status, { business_status: status, runtime_status: 'paused' });
|
|
assert.equal(result.type, Tag);
|
|
assert.equal(result.props.children, label);
|
|
assert.equal(result.props.color, color);
|
|
assert.equal(result.props.style, undefined, '使用默认 Tag 样式');
|
|
});
|
|
}
|
|
|
|
test('业务状态列紧邻现有状态列,运行状态判定保持不变', () => {
|
|
const titles = columns.map((column) => property(column, 'title')?.text);
|
|
const index = titles.indexOf('业务状态');
|
|
assert.ok(index > 0, '必须有独立的业务状态列');
|
|
assert.equal(titles[index - 1], '调度状态');
|
|
assert.equal(titles[index + 1], '采集状态');
|
|
const readiness = property(columns[index - 1], 'render').getText(source);
|
|
assert.match(readiness, /accountReadiness\(account, account\.environment \?\? null\)/);
|
|
});
|