57 lines
1.7 KiB
TypeScript
57 lines
1.7 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import { describe, it } from "node:test";
|
|
|
|
import { extractWidthInches, formatWidthInches } from "../src/product-metrics.js";
|
|
import type { ProductSearchResult } from "../src/types.js";
|
|
|
|
function product(overrides: Partial<ProductSearchResult>): ProductSearchResult {
|
|
return {
|
|
asin: "B0WIDTH001",
|
|
title: "Base Product",
|
|
url: "https://www.amazon.com/dp/B0WIDTH001",
|
|
specs: [],
|
|
bullets: [],
|
|
matchedFilters: [],
|
|
missingFields: [],
|
|
extractionNotes: [],
|
|
...overrides
|
|
};
|
|
}
|
|
|
|
describe("product metrics", () => {
|
|
it("extracts explicit W dimensions from overall product specs", () => {
|
|
const width = extractWidthInches(product({
|
|
specs: [{ name: "Product Dimensions", value: "35\"D x 83.4\"W x 31\"H" }]
|
|
}));
|
|
|
|
assert.equal(width, 83.4);
|
|
});
|
|
|
|
it("uses dimension order labels when W is not repeated in the value", () => {
|
|
const width = extractWidthInches(product({
|
|
specs: [{ name: "Item Dimensions D x W x H", value: "35 x 108 x 31 inches" }]
|
|
}));
|
|
|
|
assert.equal(width, 108);
|
|
});
|
|
|
|
it("ignores non-overall width specs before falling back to title width", () => {
|
|
const width = extractWidthInches(product({
|
|
title: "83 Inch Sofa Bed",
|
|
specs: [
|
|
{ name: "Seat Interior Width", value: "65 Inches" },
|
|
{ name: "Arm Width", value: "5 Inches" },
|
|
{ name: "Minimum Required Door Width", value: "72 Inches" }
|
|
]
|
|
}));
|
|
|
|
assert.equal(width, 83);
|
|
});
|
|
|
|
it("formats unknown and decimal widths", () => {
|
|
assert.equal(formatWidthInches(undefined), "unknown");
|
|
assert.equal(formatWidthInches(83.4), "83.4\"");
|
|
assert.equal(formatWidthInches(108), "108\"");
|
|
});
|
|
});
|