import test from "node:test" import assert from "node:assert/strict" import {buildSearchParams, fetchGalleries, readResponse} from "lionwebsite-frontend-shared" test("keyword request never hand-builds the query string", () => { assert.deepEqual(buildSearchParams({keyword: "cat girl"}), {keyword: "cat girl"}) }) test("next page forwards the upstream cursor instead of the keyword", () => { const params = buildSearchParams({ keyword: "cat girl", direction: "next", href: "https://exhentai.org/?f_search=cat+girl&next=777", }) assert.equal(params.next, "777") assert.equal(params.keyword, "cat girl") }) test("fetchGalleries decodes object and JSON-string payloads identically", async () => { const asObject = {get: async () => ({data: {result: "success", data: [{gid: 1}], next: "n1"}})} const asString = {get: async () => ({data: {result: "success", data: '[{"gid":1}]', next: "n1"}})} const one = await fetchGalleries(asObject, {keyword: "k"}) const two = await fetchGalleries(asString, {keyword: "k"}) assert.deepEqual(one.galleries, two.galleries) assert.equal(one.pagination.next, "n1") }) test("fetchGalleries surfaces the backend message on failure", async () => { const http = {get: async () => ({data: {result: "failure", data: "没有搜索到结果"}})} await assert.rejects(() => fetchGalleries(http, {keyword: "k"}), error => error.payload === "没有搜索到结果") }) test("readResponse keeps all four pagination cursors", () => { const parsed = readResponse({data: {result: "success", data: "[]", first: "f", previous: "p", next: "n", last: "l"}}) assert.deepEqual(parsed.pagination, {first: "f", previous: "p", next: "n", last: "l"}) })