fix(qdreader): separate account replies and verify adv tasks
This commit is contained in:
@@ -25,6 +25,8 @@ function runPlugin({ pluginCode = code, filename = pluginPath, content = '', sto
|
||||
let listenIndex = 0;
|
||||
const baseSender = {
|
||||
reply: (msg) => replies.push(String(msg)),
|
||||
push: (msg) => replies.push(typeof msg === 'string' ? msg : String((msg && (msg.content || msg.message || msg.text)) || JSON.stringify(msg))),
|
||||
sendText: (msg) => replies.push(String(msg)),
|
||||
getMessage: () => content,
|
||||
getContent: () => content,
|
||||
isAdmin: () => admin,
|
||||
@@ -35,6 +37,8 @@ function runPlugin({ pluginCode = code, filename = pluginPath, content = '', sto
|
||||
console,
|
||||
Buffer,
|
||||
sender: { ...baseSender, ...senderOverrides },
|
||||
sendText: (msg) => replies.push(String(msg)),
|
||||
push: (msg) => replies.push(typeof msg === 'string' ? msg : String((msg && (msg.content || msg.message || msg.text)) || JSON.stringify(msg))),
|
||||
GetUserID: () => userId,
|
||||
GetContent: () => content,
|
||||
getContent: () => content,
|
||||
@@ -618,6 +622,24 @@ test('delete all command clears only current user saved cookies', () => {
|
||||
assert.deepEqual(JSON.parse(r.store.qdreader_remark_json), { '67890': '副号' });
|
||||
});
|
||||
|
||||
test('manual sign replies per account first and summary separately for multi-account runs', () => {
|
||||
const store = {
|
||||
qdreader_cookie_json: JSON.stringify({ '12345': cookie, '67890': cookie.replace(/12345/g, '67890') }),
|
||||
qdreader_user_bind_json: JSON.stringify({ '12345': 'user-a', '67890': 'user-a' }),
|
||||
qdreader_remark_json: JSON.stringify({ '12345': '主号', '67890': '副号' }),
|
||||
};
|
||||
const r = runPlugin({ content: '启点签到', store, userId: 'user-a' });
|
||||
assert.equal(r.replies.length, 3);
|
||||
assert.match(r.replies[0], /12\*\*\*45(主号)/);
|
||||
assert.match(r.replies[0], /完全体任务完成/);
|
||||
assert.doesNotMatch(r.replies[0], /67\*\*\*90/);
|
||||
assert.match(r.replies[1], /67\*\*\*90(副号)/);
|
||||
assert.match(r.replies[1], /完全体任务完成/);
|
||||
assert.doesNotMatch(r.replies[1], /12\*\*\*45/);
|
||||
assert.match(r.replies[2], /汇总:成功 2 \/ 失败 0 \/ 总计 2/);
|
||||
assert.match(r.replies[2], /日志已归档/);
|
||||
});
|
||||
|
||||
test('manual sign only runs current user accounts while cron runs all accounts', () => {
|
||||
const store = {
|
||||
qdreader_cookie_json: JSON.stringify({ '12345': cookie, '67890': cookie.replace(/12345/g, '67890') }),
|
||||
@@ -628,7 +650,8 @@ test('manual sign only runs current user accounts while cron runs all accounts',
|
||||
assert.match(manual.replies[0], /总计 1/);
|
||||
const cron = runPlugin({ content: '', store: { ...store }, userId: 'cron', globals: { Date: fixedDateClass('2026-05-19T07:01:00.000+08:00') } });
|
||||
assert.equal(cron.calls.length, 8);
|
||||
assert.match(cron.replies[0], /总计 2/);
|
||||
assert.equal(cron.replies.length, 3);
|
||||
assert.match(cron.replies[2], /总计 2/);
|
||||
});
|
||||
|
||||
test('unbound global cookies are not visible or usable by normal users', () => {
|
||||
@@ -842,6 +865,44 @@ test('adv task does not report success when only unrelated task is finished afte
|
||||
assert.match(r.replies[0], /汇总:成功 0 \/ 失败 1 \/ 总计 1/);
|
||||
});
|
||||
|
||||
test('adv task reports failure when submitted target ids remain unfinished even if unrelated actionable task exists', () => {
|
||||
const store = {
|
||||
qdreader_cookie_json: JSON.stringify({ '12345': cookie }),
|
||||
qdreader_user_bind_json: JSON.stringify({ '12345': 'user-a' }),
|
||||
qdreader_task_pref_json: JSON.stringify({ '12345': { adv: true } }),
|
||||
};
|
||||
const r = runPlugin({
|
||||
content: '启点签到',
|
||||
store,
|
||||
userId: 'user-a',
|
||||
requests: [
|
||||
{ body: { code: 0, data: { headers: { 'QD-Sign': 'sig' } } } },
|
||||
{ statusCode: 200, body: { code: 1, msg: '今日已签到' } },
|
||||
{ body: { code: 0, data: { headers: { 'QD-Sign': 'sig' } } } },
|
||||
{ statusCode: 200, body: { code: 1, msg: '无可领取礼包' } },
|
||||
{ body: { code: 0, data: { headers: { 'QD-Sign': 'sig' } } } },
|
||||
{ statusCode: 200, body: { code: 0, Data: { VideoRewardTab: { TaskList: [
|
||||
{ TaskId: 'target-a', Title: '看视频领福利A', IsFinished: 0 },
|
||||
{ TaskId: 'target-b', Title: '看视频领福利B', IsFinished: 0 },
|
||||
{ TaskId: '1165585369246138370', Title: '每日签到', IsFinished: 0 },
|
||||
] } } } },
|
||||
{ body: { code: 0, data: { headers: { 'QD-Sign': 'sig' } } } },
|
||||
{ statusCode: 200, body: { result: 9, message: '' } },
|
||||
{ body: { code: 0, data: { headers: { 'QD-Sign': 'sig' } } } },
|
||||
{ statusCode: 200, body: { result: 9, message: '' } },
|
||||
{ body: { code: 0, data: { headers: { 'QD-Sign': 'sig' } } } },
|
||||
{ statusCode: 200, body: { code: 0, Data: { VideoRewardTab: { TaskList: [
|
||||
{ TaskId: 'target-a', Title: '看视频领福利A', IsFinished: 0 },
|
||||
{ TaskId: 'target-b', Title: '看视频领福利B', IsFinished: 0 },
|
||||
{ TaskId: 'unrelated-actionable', Title: '其它视频福利', IsFinished: 1 },
|
||||
{ TaskId: '1165585369246138370', Title: '每日签到', IsFinished: 0 },
|
||||
] } } } },
|
||||
],
|
||||
});
|
||||
assert.match(r.replies[0], /激励任务❌\(已提交 2 个视频任务,仍有 2 个未完成,跳过 1 个需其它入口任务\)/);
|
||||
assert.match(r.replies[0], /汇总:成功 0 \/ 失败 1 \/ 总计 1/);
|
||||
});
|
||||
|
||||
test('adv task skips non-ad entries that must be handled by their own modules', () => {
|
||||
const store = {
|
||||
qdreader_cookie_json: JSON.stringify({ '12345': cookie }),
|
||||
|
||||
Reference in New Issue
Block a user