55 lines
2.7 KiB
JavaScript
55 lines
2.7 KiB
JavaScript
const { test } = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const fs = require('node:fs');
|
|
const vm = require('node:vm');
|
|
const context = vm.createContext({ URLSearchParams });
|
|
vm.runInContext(fs.readFileSync(require('node:path').join(__dirname, '../internal/transport/httpserver/console/console-core.js'), 'utf8'), context);
|
|
const { listURL, readFilters, ListPage } = context.OrbitConsole;
|
|
|
|
test('精确业务键、筛选和游标跨页保持,不静默扩展查询范围', () => {
|
|
const page = new ListPage();
|
|
page.reset({ business_key: '订单 +%_ ', state: 'NEEDS_REVIEW', created_from: '2026-09-01T00:00:00.000Z' });
|
|
assert.ok(page.accept(page.begin(), { next_cursor: 'opaque+/=' }));
|
|
assert.ok(page.move('next'));
|
|
const query = new URL(listURL('tasks', 'queue-1', page.filters, page.cursor), 'http://localhost').searchParams;
|
|
assert.equal(query.get('business_key'), '订单 +%_ ');
|
|
assert.equal(query.get('state'), 'NEEDS_REVIEW');
|
|
assert.equal(query.get('queue_id'), 'queue-1');
|
|
assert.equal(query.get('cursor'), 'opaque+/=');
|
|
assert.ok(page.move('prev'));
|
|
assert.equal(page.cursor, '');
|
|
assert.equal(page.filters.state, 'NEEDS_REVIEW');
|
|
});
|
|
test('查询重置后迟到的旧页面不会覆盖新条件和翻页状态', () => {
|
|
const page = new ListPage();
|
|
const slow = page.begin();
|
|
page.reset({ state: 'FAILED' });
|
|
const latest = page.begin();
|
|
assert.equal(page.accept(slow, { next_cursor: 'wrong' }), false);
|
|
assert.equal(page.loading, true);
|
|
assert.equal(page.move('next'), false);
|
|
assert.equal(page.accept(latest, {}), true);
|
|
assert.equal(page.next, '');
|
|
assert.equal(page.filters.state, 'FAILED');
|
|
});
|
|
test('失败保留原查询与原页,不自动回到无筛选列表', () => {
|
|
const page = new ListPage();
|
|
page.reset({ state: 'RUNNING' });
|
|
page.accept(page.begin(), { next_cursor: 'page-2' });
|
|
page.move('next');
|
|
assert.equal(page.fail(page.begin()), true);
|
|
assert.equal(page.cursor, 'page-2');
|
|
assert.equal(page.history.length, 1);
|
|
assert.equal(page.filters.state, 'RUNNING');
|
|
assert.equal(page.next, '');
|
|
});
|
|
test('时间边界验证、流程范围与无队列保护', () => {
|
|
assert.throws(() => readFilters({ created_from: '2026-09-29T12:00', created_before: '2026-09-29T11:00' }), /结束时间/);
|
|
assert.throws(() => readFilters({ created_from: 'not a date' }), /有效/);
|
|
const f = readFilters({ created_from: '2026-09-29T12:00:00+08:00', business_key: ' key ' });
|
|
assert.equal(f.created_from, '2026-09-29T04:00:00.000Z');
|
|
assert.equal(f.business_key, ' key ');
|
|
assert.throws(() => listURL('tasks', ''), /选择队列/);
|
|
assert.equal(new URL(listURL('workflows', 'ignored'), 'http://localhost').searchParams.has('queue_id'), false);
|
|
});
|