import assert from 'node:assert/strict';
import { JSDOM } from 'jsdom';
import { collectAmazonSearchPageData } from '../src/page-worker/web-injectors/amazon-search-parser';
const html = `
Sponsored
Brand product one
Brand product two
Amazon's Choice
Organic product
$29.99
Sponsored product
$33.93
$39.99
$0.28
Second organic product
Sponsored
Hidden preloaded product
Sponsored
Hidden accessibility product
`;
const dom = new JSDOM(html, { url: 'https://www.amazon.com/s?k=mirror' });
Object.assign(globalThis, {
document: dom.window.document,
Node: dom.window.Node,
Element: dom.window.Element,
HTMLElement: dom.window.HTMLElement,
HTMLAnchorElement: dom.window.HTMLAnchorElement,
HTMLImageElement: dom.window.HTMLImageElement,
});
async function main() {
const items = await collectAmazonSearchPageData({ pattern: 'pattern-2' });
assert.equal(items.length, 8);
const byAsin = new Map(items.map((item) => [item.asin, item]));
assert.equal(byAsin.get('B000000003')?.adType, 'organic');
assert.equal(byAsin.get('B000000004')?.adType, 'sponsoredProducts');
assert.equal(byAsin.get('B000000004')?.price, '$33.93');
assert.equal(byAsin.get('B000000004')?.strikethroughPrice, '$39.99');
assert.equal(byAsin.get('B000000004')?.link, 'https://www.amazon.com/dp/B000000004');
assert.equal(byAsin.get('B000000004')?.placement, 'middleOfSearch');
assert.equal(byAsin.get('B000000001')?.adType, 'sponsoredBrands');
assert.equal(byAsin.get('B000000002')?.adType, 'sponsoredBrands');
assert.equal(byAsin.get('B000000001')?.placement, 'topOfSearch');
assert.equal(byAsin.get('B000000001')?.placementId, byAsin.get('B000000002')?.placementId);
assert.equal(byAsin.get('B000000001')?.adProductIndex, 1);
assert.equal(byAsin.get('B000000002')?.adProductIndex, 2);
assert.equal(byAsin.get('B000000005')?.adType, 'unknownSponsored');
assert.equal(byAsin.get('B000000005')?.placement, 'bottomOfSearch');
assert.equal(byAsin.get('B000000006')?.adType, 'sponsoredDisplay');
assert.equal(byAsin.get('B000000006')?.placement, 'sidebar');
assert.equal(byAsin.get('B000000008')?.adType, 'sponsoredBrands');
assert.equal(byAsin.get('B000000008')?.adFormat, 'video');
assert.equal(byAsin.get('B000000008')?.placement, 'bottomOfSearch');
assert.equal(items.filter((item) => item.asin === 'B000000008').length, 1);
assert.equal(byAsin.has('B000000009'), false);
assert.equal(byAsin.has('B000000010'), false);
assert.deepEqual(
items.map((item) => item.pageRank),
[1, 2, 3, 4, 5, 6, 7, 8],
);
const hiddenDisclosureDom = new JSDOM(
`
Visible organic product
Sponsored
`,
{ url: 'https://www.amazon.com/s?k=mirror' },
);
Object.assign(globalThis, {
document: hiddenDisclosureDom.window.document,
Node: hiddenDisclosureDom.window.Node,
Element: hiddenDisclosureDom.window.Element,
HTMLElement: hiddenDisclosureDom.window.HTMLElement,
HTMLAnchorElement: hiddenDisclosureDom.window.HTMLAnchorElement,
HTMLImageElement: hiddenDisclosureDom.window.HTMLImageElement,
});
const hiddenDisclosureItems = await collectAmazonSearchPageData({ pattern: 'pattern-2' });
assert.equal(hiddenDisclosureItems.length, 1);
assert.equal(hiddenDisclosureItems[0].adType, 'organic');
console.log('Amazon search parser fixtures passed.');
}
main().catch((error) => {
console.error(error);
process.exitCode = 1;
});