import { parseXlsx } from './finance-downloads.mjs' // Internal acceptance helper; callers retain their own fixture and deployment authorization. export async function verifyDownloadCenterExport(context, module, exportType, parameters, headers, tokens = [], expectedStatus = 'SUCCEEDED') { const options = { scenario: 'download-center-export', deploymentBlocker: true } const base = '/api/platform/v1/files/export-tasks' const created = await context.request('POST', base, { exportType, format: 'XLSX', taskName: `${context.marker}-${exportType}`, parameters }) const task = context.apiSuccess(module, `${exportType}创建下载任务`, created, '', options) if (!task?.id) throw new Error('下载任务创建失败') let state = task for (let attempt = 0; attempt < 45 && !['SUCCEEDED', 'FAILED', 'EXPIRED'].includes(state.status); attempt++) { if (attempt) await new Promise(resolve => setTimeout(resolve, 2000)) const response = await context.request('GET', `${base}/${encodeURIComponent(String(task.id))}`) state = context.apiSuccess(module, `${exportType}查询下载任务`, response, '', options) if (!state) throw new Error('下载任务查询失败') } context.assert(module, `${exportType}后台生成完成`, created, state.status === expectedStatus, state.failureMessage || state.status, options) if (expectedStatus === 'FAILED' && state.status === 'FAILED') { context.assert(module, `${exportType}失败原因可见`, created, Boolean(state.failureMessage), state.failureMessage || '', options) return created } if (state.status !== 'SUCCEEDED') throw new Error(`导出未完成:${state.status}`) const response = await context.requestBinary('GET', `${base}/${encodeURIComponent(String(task.id))}/download`) context.assert(module, `${exportType}下载XLSX`, response, response.http === 200 && String(response.contentType).includes('spreadsheetml'), `bytes=${response.bytes?.length || 0}`, options) const workbook = parseXlsx(response.bytes) const content = workbook.rows.flat().join('|') const valid = headers.every(header => workbook.headers.includes(header)) && tokens.every(token => content.includes(String(token))) context.assert(module, `${exportType}表头与marker内容`, response, valid, `headers=${workbook.headers.join('|')}`, options) if (!valid) throw new Error('导出文件缺少预期字段或本轮业务数据') return response }