ux(transcription): show error banner when bulk mark-all-reviewed fails #627
@@ -259,12 +259,15 @@ describe('createTranscriptionBlocks.markAllReviewed', () => {
|
|||||||
expect(ctrl.blocks.every((b) => b.reviewed)).toBe(true);
|
expect(ctrl.blocks.every((b) => b.reviewed)).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('is a no-op when PUT returns non-OK', async () => {
|
it('throws and leaves blocks unchanged when PUT returns non-OK', async () => {
|
||||||
const fetchImpl = vi.fn(async (url: RequestInfo | URL, init?: RequestInit) => {
|
const fetchImpl = vi.fn(async (url: RequestInfo | URL, init?: RequestInit) => {
|
||||||
const u = url.toString();
|
const u = url.toString();
|
||||||
const method = init?.method ?? 'GET';
|
const method = init?.method ?? 'GET';
|
||||||
if (u.includes('/review-all') && method === 'PUT') {
|
if (u.includes('/review-all') && method === 'PUT') {
|
||||||
return new Response('', { status: 500 });
|
return new Response(JSON.stringify({ code: 'INTERNAL_ERROR' }), {
|
||||||
|
status: 500,
|
||||||
|
headers: { 'Content-Type': 'application/json' }
|
||||||
|
});
|
||||||
}
|
}
|
||||||
return new Response(JSON.stringify([baseBlock({ id: 'b-1', reviewed: false })]), {
|
return new Response(JSON.stringify([baseBlock({ id: 'b-1', reviewed: false })]), {
|
||||||
status: 200,
|
status: 200,
|
||||||
@@ -274,7 +277,7 @@ describe('createTranscriptionBlocks.markAllReviewed', () => {
|
|||||||
|
|
||||||
const ctrl = createTranscriptionBlocks({ documentId: () => 'doc-1', fetchImpl });
|
const ctrl = createTranscriptionBlocks({ documentId: () => 'doc-1', fetchImpl });
|
||||||
await ctrl.load();
|
await ctrl.load();
|
||||||
await ctrl.markAllReviewed();
|
await expect(ctrl.markAllReviewed()).rejects.toThrow('INTERNAL_ERROR');
|
||||||
expect(ctrl.blocks[0].reviewed).toBe(false);
|
expect(ctrl.blocks[0].reviewed).toBe(false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user