Prefer error_code when present and route projectMembers/freeformDoc/ taskRuns/chatSessions failures through the shared structured parser. Co-authored-by: Cursor <cursoragent@cursor.com>
30 lines
1.0 KiB
TypeScript
30 lines
1.0 KiB
TypeScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { updateFreeformDoc } from './freeformDoc';
|
|
import { ProjectSettingsApiError } from './projectSettingsError';
|
|
|
|
test('updateFreeformDoc exposes CONCURRENCY_CONFLICT on 409', async () => {
|
|
const originalFetch = globalThis.fetch;
|
|
globalThis.fetch = async () =>
|
|
new Response(
|
|
JSON.stringify({
|
|
error_code: 'CONCURRENCY_CONFLICT',
|
|
message: '文档已被更新产生版本冲突,请刷新重试',
|
|
}),
|
|
{ status: 409, headers: { 'Content-Type': 'application/json' } },
|
|
);
|
|
try {
|
|
await assert.rejects(
|
|
() => updateFreeformDoc('doc_fixture', { contentMarkdown: 'x', expectedVersion: 1 }),
|
|
(err: unknown) => {
|
|
assert.ok(err instanceof ProjectSettingsApiError);
|
|
assert.equal((err as ProjectSettingsApiError).status, 409);
|
|
assert.equal((err as ProjectSettingsApiError).code, 'CONCURRENCY_CONFLICT');
|
|
return true;
|
|
},
|
|
);
|
|
} finally {
|
|
globalThis.fetch = originalFetch;
|
|
}
|
|
});
|