fix(qdreader): treat duplicate sign and unsupported optional tasks correctly

This commit is contained in:
2026-05-20 17:47:54 +08:00
parent 6aa020ca49
commit 85405751b8
5 changed files with 118 additions and 21 deletions
+58
View File
@@ -640,3 +640,61 @@ test('account task menu supports one-click enable and disable all optional tasks
assert.equal(disabled.chapterCard, false);
assert.equal(disabled.messageBox, false);
});
test('already signed checkin is treated as success', () => {
const store = {
qdreader_cookie_json: JSON.stringify({ '12345': cookie }),
qdreader_user_bind_json: JSON.stringify({ '12345': 'user-a' }),
};
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: 0, msg: '完成' } },
],
});
assert.match(r.replies[0], /签到结果✅\(今日已签到\)/);
assert.match(r.replies[0], /汇总:成功 1 \/ 失败 0 \/ 总计 1/);
const archive = JSON.parse(r.store.qdreader_archive_json);
const log = archive[Object.keys(archive)[0]];
assert.equal(log.okCount, 1);
assert.equal(log.failCount, 0);
});
test('sign gateway whitelist blocked optional tasks are skipped not counted as account failure', () => {
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': { extraAdv: true, lottery: true, chapterCard: true, messageBox: true } }),
};
const blocked = { body: { code: 444, message: '参数异常: url 不在允许的接口列表内' } };
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: 0, msg: '完成' } },
blocked,
blocked,
blocked,
blocked,
],
});
assert.match(r.replies[0], /每日任务⏭\(签名网关暂不支持该接口,已跳过\)/);
assert.match(r.replies[0], /每日抽奖⏭/);
assert.match(r.replies[0], /章节卡片⏭/);
assert.match(r.replies[0], /大咖荐书⏭/);
assert.match(r.replies[0], /汇总:成功 1 \/ 失败 0 \/ 总计 1/);
const archive = JSON.parse(r.store.qdreader_archive_json);
const log = archive[Object.keys(archive)[0]];
assert.equal(log.okCount, 1);
assert.equal(log.failCount, 0);
});