{"version":3,"file":"utils/request.test.mjs","sources":["../../src/utils/request.test.ts"],"sourcesContent":["import { afterEach, describe, expect, it, rs } from '@rstest/core';\nimport { fetchJSONByUrl, postServerAPI } from './request';\n\ndescribe('request utils', () => {\n  const originalFetch = globalThis.fetch;\n  const originalNodeEnv = process.env.NODE_ENV;\n\n  afterEach(() => {\n    globalThis.fetch = originalFetch;\n    process.env.NODE_ENV = originalNodeEnv;\n  });\n\n  it('fetchJSONByUrl() parses json text payload', async () => {\n    const fetchMock = rs.fn().mockResolvedValue({\n      ok: true,\n      text: async () => '{\"name\":\"rsdoctor\"}',\n    });\n    globalThis.fetch = fetchMock as typeof fetch;\n    process.env.NODE_ENV = 'production';\n\n    const data = await fetchJSONByUrl('https://example.com/manifest.json');\n\n    expect(data).toStrictEqual({ name: 'rsdoctor' });\n    expect(fetchMock).toBeCalledTimes(1);\n  });\n\n  it('fetchJSONByUrl() throws for non-2xx response', async () => {\n    const fetchMock = rs.fn().mockResolvedValue({\n      ok: false,\n      status: 500,\n    });\n    globalThis.fetch = fetchMock as typeof fetch;\n    process.env.NODE_ENV = 'production';\n\n    await expect(\n      fetchJSONByUrl('https://example.com/manifest.json'),\n    ).rejects.toThrow('Request failed with status 500');\n  });\n\n  it('postServerAPI() sends json body and parses response json', async () => {\n    const fetchMock = rs.fn().mockResolvedValue({\n      ok: true,\n      json: async () => ({ ok: true }),\n    });\n    globalThis.fetch = fetchMock as typeof fetch;\n    process.env.NODE_ENV = 'production';\n\n    const result = await (postServerAPI as any)('/api/demo', { id: 1 });\n    const [url, init] = fetchMock.mock.calls[0];\n\n    expect(url).toContain('/api/demo?_t=');\n    expect(init).toMatchObject({\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({ id: 1 }),\n    });\n    expect(result).toStrictEqual({ ok: true });\n  });\n});\n"],"names":["describe","originalFetch","globalThis","originalNodeEnv","process","afterEach","it","fetchMock","rs","data","fetchJSONByUrl","expect","result","postServerAPI","url","init","JSON"],"mappings":";;AAGAA,SAAS,iBAAiB;IACxB,MAAMC,gBAAgBC,WAAW,KAAK;IACtC,MAAMC,kBAAkBC,QAAQ,GAAG,CAAC,QAAQ;IAE5CC,UAAU;QACRH,WAAW,KAAK,GAAGD;QACnBG,QAAQ,GAAG,CAAC,QAAQ,GAAGD;IACzB;IAEAG,GAAG,6CAA6C;QAC9C,MAAMC,YAAYC,GAAG,EAAE,GAAG,iBAAiB,CAAC;YAC1C,IAAI;YACJ,MAAM,UAAY;QACpB;QACAN,WAAW,KAAK,GAAGK;QACnBH,QAAQ,GAAG,CAAC,QAAQ,GAAG;QAEvB,MAAMK,OAAO,MAAMC,eAAe;QAElCC,OAAOF,MAAM,aAAa,CAAC;YAAE,MAAM;QAAW;QAC9CE,OAAOJ,WAAW,eAAe,CAAC;IACpC;IAEAD,GAAG,gDAAgD;QACjD,MAAMC,YAAYC,GAAG,EAAE,GAAG,iBAAiB,CAAC;YAC1C,IAAI;YACJ,QAAQ;QACV;QACAN,WAAW,KAAK,GAAGK;QACnBH,QAAQ,GAAG,CAAC,QAAQ,GAAG;QAEvB,MAAMO,OACJD,eAAe,sCACf,OAAO,CAAC,OAAO,CAAC;IACpB;IAEAJ,GAAG,4DAA4D;QAC7D,MAAMC,YAAYC,GAAG,EAAE,GAAG,iBAAiB,CAAC;YAC1C,IAAI;YACJ,MAAM,UAAa;oBAAE,IAAI;gBAAK;QAChC;QACAN,WAAW,KAAK,GAAGK;QACnBH,QAAQ,GAAG,CAAC,QAAQ,GAAG;QAEvB,MAAMQ,SAAS,MAAOC,cAAsB,aAAa;YAAE,IAAI;QAAE;QACjE,MAAM,CAACC,KAAKC,KAAK,GAAGR,UAAU,IAAI,CAAC,KAAK,CAAC,EAAE;QAE3CI,OAAOG,KAAK,SAAS,CAAC;QACtBH,OAAOI,MAAM,aAAa,CAAC;YACzB,QAAQ;YACR,SAAS;gBACP,gBAAgB;YAClB;YACA,MAAMC,KAAK,SAAS,CAAC;gBAAE,IAAI;YAAE;QAC/B;QACAL,OAAOC,QAAQ,aAAa,CAAC;YAAE,IAAI;QAAK;IAC1C;AACF"}