feat: add public question bank sync worker

This commit is contained in:
Codex
2026-06-29 09:38:11 +08:00
parent f63f8491f6
commit 6f0083bd13
20 changed files with 632 additions and 39 deletions

View File

@@ -3824,6 +3824,25 @@ async function testPublicQuestionBankAdoption() {
'public bank sync should identify the source question that conflicts with tenant edits',
);
const conflictList = await request('/api/tenant-content/public-question-banks/conflicts', {
tenantId: PARTNER_TENANT_ID,
userId: PARTNER_TENANT_ADMIN_USER_ID,
query: { adoptionId: adopted.item.id },
});
assert.equal(conflictList.item?.syncStatus, 'failed', 'conflict list should expose failed adoption sync status');
assert.ok(conflictList.item?.conflictCount >= 1, 'conflict list should expose conflict count');
assert.ok(
conflictList.item?.conflicts?.some(item => item.sourceQuestionId === ids.question && item.action === 'conflict'),
'conflict list should expose source question conflict details',
);
const crossTenantConflictListDenied = await request('/api/tenant-content/public-question-banks/conflicts', {
userId: TENANT_ADMIN_USER_ID,
query: { adoptionId: adopted.item.id },
expectStatus: 404,
});
assert.equal(crossTenantConflictListDenied.code, 'QUESTION_BANK_ADOPTION_NOT_FOUND', 'public bank conflicts must be tenant isolated');
const collectionAfterConflict = await request('/api/catalog/question-collections/questions', {
tenantId: PARTNER_TENANT_ID,
userId: false,