feat(amazon-shopping): parse filters and extract search candidates
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { describe, it } from "node:test";
|
||||
|
||||
import {
|
||||
extractUnitCount,
|
||||
parseMoney,
|
||||
parseRating,
|
||||
parseReviewCount,
|
||||
parseStarBreakdown,
|
||||
parseUnitPrice
|
||||
} from "../src/parsers.js";
|
||||
|
||||
describe("parsers", () => {
|
||||
it("parses USD money", () => {
|
||||
assert.deepEqual(parseMoney("$19.99"), { amount: 19.99, currency: "USD", display: "$19.99" });
|
||||
});
|
||||
|
||||
it("parses rating text", () => {
|
||||
assert.equal(parseRating("4.6 out of 5 stars"), 4.6);
|
||||
});
|
||||
|
||||
it("parses review count text", () => {
|
||||
assert.equal(parseReviewCount("1,234 ratings"), 1234);
|
||||
});
|
||||
|
||||
it("parses visible star histogram percentages", () => {
|
||||
assert.deepEqual(parseStarBreakdown("5 star 72% 4 star 15% 3 star 7% 2 star 3% 1 star 3%"), {
|
||||
five: 72,
|
||||
four: 15,
|
||||
three: 7,
|
||||
two: 3,
|
||||
one: 3,
|
||||
basis: "percent"
|
||||
});
|
||||
});
|
||||
|
||||
it("extracts high-confidence unit counts", () => {
|
||||
assert.deepEqual(extractUnitCount("LED bulbs, 100 Count, daylight"), {
|
||||
count: 100,
|
||||
confidence: "high",
|
||||
source: "100 Count"
|
||||
});
|
||||
assert.deepEqual(extractUnitCount("Pack of 6 USB-C cables"), {
|
||||
count: 6,
|
||||
confidence: "high",
|
||||
source: "Pack of 6"
|
||||
});
|
||||
});
|
||||
|
||||
it("distinguishes lower-confidence unit count phrases", () => {
|
||||
assert.deepEqual(extractUnitCount("Set of 8 replacement filters"), {
|
||||
count: 8,
|
||||
confidence: "medium",
|
||||
source: "Set of 8"
|
||||
});
|
||||
assert.deepEqual(extractUnitCount("6 bulbs soft white"), {
|
||||
count: 6,
|
||||
confidence: "low",
|
||||
source: "6 bulbs"
|
||||
});
|
||||
});
|
||||
|
||||
it("parses visible unit prices", () => {
|
||||
assert.deepEqual(parseUnitPrice("$0.33/Count"), {
|
||||
amount: 0.33,
|
||||
currency: "USD",
|
||||
display: "$0.33/Count"
|
||||
});
|
||||
});
|
||||
|
||||
it("parses whole-dollar and one-decimal prices", () => {
|
||||
assert.deepEqual(parseMoney("$20"), { amount: 20, currency: "USD", display: "$20" });
|
||||
assert.deepEqual(parseMoney("$19.9"), { amount: 19.9, currency: "USD", display: "$19.9" });
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user