// @vitest-environment jsdom import { afterEach, it, expect, vi } from 'vitest'; import { VirtualTryOnAPI } from './api'; import { TryOnRejectedError, TRY_ON_ERROR_CODES } from './tryOnErrors'; afterEach(() => vi.unstubAllGlobals()); it.each(TRY_ON_ERROR_CODES)('preserves rejection %s from the transport', async code => { vi.stubGlobal('fetch', vi.fn().mockResolvedValue({ok: false, status: 422, json: async () => ({ error: 'cannot_generate', code, retryable: false })})); await expect(new VirtualTryOnAPI('/tryon', 'key', 'visitor').tryOnSync('WA==', 'WA==')).rejects.toEqual(new TryOnRejectedError(code, false)); }); it.each([ [{error: 'cannot_generate'}, 'quality_failed'], [{error: 'bad_image'}, 'bad_image'], [{error: 'photo_body_hidden'}, 'photo_body_hidden'], [{error: 'cannot_generate', code: 'unknown'}, 'quality_failed'], ])('handles legacy Brain and error field codes', async (body, code) => { vi.stubGlobal('fetch', vi.fn().mockResolvedValue({ok: false, status: 422, json: async () => body})); await expect(new VirtualTryOnAPI('/tryon', 'key', 'visitor').tryOnSync('WA==', 'WA==')).rejects.toMatchObject({code}); });