From 188a80ddd68ad2101bd8eb39eac46d22ed251b56 Mon Sep 17 00:00:00 2001 From: deflis Date: Mon, 2 Nov 2026 01:21:22 +0900 Subject: [PATCH] =?UTF-8?q?RankingBuilder=E3=81=AE=E7=A9=BA=E3=83=A9?= =?UTF-8?q?=E3=83=B3=E3=82=AD=E3=83=B3=E3=82=B0=E6=99=82=E3=81=AE=E8=A9=B3?= =?UTF-8?q?=E7=B4=B0=E5=8F=96=E5=BE=97=E3=82=92=E6=8A=91=E6=AD=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ranking.ts | 4 ++++ test/ranking.test.ts | 25 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/ranking.ts b/src/ranking.ts index bdcbaea..46fe2d5 100644 --- a/src/ranking.ts +++ b/src/ranking.ts @@ -181,6 +181,10 @@ export default class RankingBuilder { options?: ExecuteOptions ): Promise>[]> { const ranking = await this.execute(options); + if (ranking.length === 0) { + return []; + } + const fields$ = Array.isArray(fields) ? fields.length == 0 ? [] diff --git a/test/ranking.test.ts b/test/ranking.test.ts index 7ea0f30..d3a46a4 100644 --- a/test/ranking.test.ts +++ b/test/ranking.test.ts @@ -314,6 +314,31 @@ describe("RankingBuilder", () => { }); describe("executeWithFields", async () => { + test.each([{ fields: [] }, { fields: [Fields.title] }])( + "ランキングが空なら詳細取得を行わない (fields = $fields)", + async ({ fields }) => { + const mockRankingRequest = vi.fn(); + const mockNovelRequest = vi.fn(); + + server.use( + http.get("https://api.syosetu.com/rank/rankget/", ({ request }) => { + mockRankingRequest(); + return responseGzipOrJson([], new URL(request.url)); + }), + http.get("https://api.syosetu.com/novelapi/api/", ({ request }) => { + mockNovelRequest(); + return responseGzipOrJson([{ allcount: 0 }], new URL(request.url)); + }) + ); + + const result = await ranking().executeWithFields(fields); + + expect(result).toEqual([]); + expect(mockRankingRequest).toHaveBeenCalledTimes(1); + expect(mockNovelRequest).not.toHaveBeenCalled(); + } + ); + test("fields = default", async () => { const mockFn = vi.fn(); const mockFn2 = vi.fn();