From c1fa5168dc4592bd430a35f55c22bc1304c94a0f Mon Sep 17 00:00:00 2001 From: Dmytro Stanchiev Date: Thu, 30 Apr 2026 22:43:52 -0400 Subject: [PATCH] test(kijiji): add live parser suite --- packages/core/test/live/ebay.live.test.ts | 29 +++++++++------- packages/core/test/live/kijiji.live.test.ts | 38 +++++++++++++++++++++ 2 files changed, 55 insertions(+), 12 deletions(-) create mode 100644 packages/core/test/live/kijiji.live.test.ts diff --git a/packages/core/test/live/ebay.live.test.ts b/packages/core/test/live/ebay.live.test.ts index d182a19..b7580a1 100644 --- a/packages/core/test/live/ebay.live.test.ts +++ b/packages/core/test/live/ebay.live.test.ts @@ -2,19 +2,24 @@ import { describe, expect, test } from "bun:test"; import fetchEbayItems from "../../src/scrapers/ebay"; const LIVE_RESULT_LIMIT = 3; +const LIVE_TEST_TIMEOUT_MS = 30_000; describe("eBay live parser", () => { - test("scrapes live search results into listing details", async () => { - const results = await fetchEbayItems("iphone", 1, { - maxItems: LIVE_RESULT_LIMIT, - }); + test( + "scrapes live search results into listing details", + async () => { + const results = await fetchEbayItems("iphone", 1, { + maxItems: LIVE_RESULT_LIMIT, + }); - expect(results.length).toBeGreaterThan(0); - for (const listing of results) { - expect(listing.url).toStartWith("https://"); - expect(listing.title.length).toBeGreaterThan(0); - expect(listing.listingPrice.cents).toBeGreaterThanOrEqual(0); - expect(listing.listingPrice.currency.length).toBeGreaterThan(0); - } - }); + expect(results.length).toBeGreaterThan(0); + for (const listing of results) { + expect(listing.url).toStartWith("https://"); + expect(listing.title.length).toBeGreaterThan(0); + expect(listing.listingPrice.cents).toBeGreaterThanOrEqual(0); + expect(listing.listingPrice.currency.length).toBeGreaterThan(0); + } + }, + LIVE_TEST_TIMEOUT_MS, + ); }); diff --git a/packages/core/test/live/kijiji.live.test.ts b/packages/core/test/live/kijiji.live.test.ts new file mode 100644 index 0000000..2230cb4 --- /dev/null +++ b/packages/core/test/live/kijiji.live.test.ts @@ -0,0 +1,38 @@ +import { describe, expect, test } from "bun:test"; +import fetchKijijiItems from "../../src/scrapers/kijiji"; + +const LIVE_TEST_TIMEOUT_MS = 30_000; + +describe("Kijiji live parser", () => { + test( + "scrapes live search results into detailed listings", + async () => { + const results = await fetchKijijiItems( + "iphone", + 1, + "https://www.kijiji.ca", + { maxPages: 1 }, + { includeImages: false, sellerDataDepth: "basic" }, + ); + + expect(results.length).toBeGreaterThan(0); + for (const listing of results) { + if (!listing.listingPrice) { + throw new Error(`Expected listing price for ${listing.url}`); + } + if (typeof listing.listingPrice.cents !== "number") { + throw new Error(`Expected listing cents for ${listing.url}`); + } + if (!listing.listingPrice.currency) { + throw new Error(`Expected listing currency for ${listing.url}`); + } + + expect(listing.url).toStartWith("https://www.kijiji.ca/"); + expect(listing.title.length).toBeGreaterThan(0); + expect(listing.listingPrice.cents).toBeGreaterThanOrEqual(0); + expect(listing.listingPrice.currency.length).toBeGreaterThan(0); + } + }, + LIVE_TEST_TIMEOUT_MS, + ); +});