import assert from "node:assert/strict"; import { readFile } from "node:fs/promises"; import { join } from "node:path"; import { describe, it } from "node:test"; import { extractSearchPage } from "../src/search-page.js"; const fixturePath = join(import.meta.dirname, "fixtures", "search-results.html"); describe("extractSearchPage", () => { it("extracts normalized product candidates from sanitized search HTML", async () => { const html = await readFile(fixturePath, "utf8"); const extracted = extractSearchPage(html, "https://www.amazon.com/s?k=led+bulbs"); assert.equal(extracted.status, "ok"); assert.equal(extracted.products.length, 2); assert.equal(extracted.products[0]?.asin, "B0TESTLED1"); assert.equal(extracted.products[0]?.url, "https://www.amazon.com/dp/B0TESTLED1"); assert.equal(extracted.products[0]?.price?.amount, 18.99); assert.equal(extracted.products[0]?.unitPrice?.amount, 0.38); assert.equal(extracted.products[0]?.rating, 4.6); assert.equal(extracted.products[0]?.reviewCount, 1234); assert.equal(extracted.products[0]?.delivery?.free, true); assert.equal(extracted.products[0]?.isSponsored, false); assert.equal(extracted.products[1]?.isSponsored, true); assert.equal(extracted.nextPageUrl, "https://www.amazon.com/s?k=led+bulbs&page=2"); }); it("detects Amazon challenge pages", () => { const extracted = extractSearchPage("