fix(api): parse price filters as dollars
This commit is contained in:
@@ -282,6 +282,24 @@ describe("API routes", () => {
|
||||
);
|
||||
});
|
||||
|
||||
test("kijijiRoute forwards dollar price filters to core as cents", async () => {
|
||||
const { kijijiRoute } = await import("../src/routes/kijiji");
|
||||
|
||||
await kijijiRoute(
|
||||
new Request(
|
||||
"http://localhost/api/kijiji?q=laptop&priceMin=999.99&priceMax=1000",
|
||||
),
|
||||
);
|
||||
|
||||
expect(fetchKijijiItems).toHaveBeenCalledWith(
|
||||
"laptop",
|
||||
4,
|
||||
"https://www.kijiji.ca",
|
||||
expect.objectContaining({ priceMin: 99_999, priceMax: 100_000 }),
|
||||
{},
|
||||
);
|
||||
});
|
||||
|
||||
test("kijijiRoute does not forward unstableFilter when false", async () => {
|
||||
const { kijijiRoute } = await import("../src/routes/kijiji");
|
||||
|
||||
@@ -414,6 +432,24 @@ describe("API routes", () => {
|
||||
);
|
||||
});
|
||||
|
||||
test("ebayRoute forwards dollar price filters to core as cents", async () => {
|
||||
const { ebayRoute } = await import("../src/routes/ebay");
|
||||
|
||||
fetchEbayItems.mockImplementation(() => Promise.resolve([{ title: "a" }]));
|
||||
|
||||
await ebayRoute(
|
||||
new Request(
|
||||
"http://localhost/api/ebay?q=macbook&minPrice=999.99&maxPrice=1000",
|
||||
),
|
||||
);
|
||||
|
||||
expect(fetchEbayItems).toHaveBeenCalledWith(
|
||||
"macbook",
|
||||
1,
|
||||
expect.objectContaining({ minPrice: 99_999, maxPrice: 100_000 }),
|
||||
);
|
||||
});
|
||||
|
||||
test("ebayRoute passes through scraper payload unchanged in unstable mode", async () => {
|
||||
const { ebayRoute } = await import("../src/routes/ebay");
|
||||
|
||||
@@ -730,16 +766,18 @@ describe("API routes", () => {
|
||||
expect(body.message).toBe("Invalid minPrice parameter");
|
||||
});
|
||||
|
||||
test("ebayRoute returns 400 for decimal minPrice", async () => {
|
||||
test("ebayRoute accepts decimal minPrice", async () => {
|
||||
const { ebayRoute } = await import("../src/routes/ebay");
|
||||
|
||||
const response = await ebayRoute(
|
||||
await ebayRoute(
|
||||
new Request("http://localhost/api/ebay?q=laptop&minPrice=1.5"),
|
||||
);
|
||||
|
||||
expect(response.status).toBe(400);
|
||||
const body = await response.json();
|
||||
expect(body.message).toBe("Invalid minPrice parameter");
|
||||
expect(fetchEbayItems).toHaveBeenCalledWith(
|
||||
"laptop",
|
||||
1,
|
||||
expect.objectContaining({ minPrice: 150 }),
|
||||
);
|
||||
});
|
||||
|
||||
test("ebayRoute returns 400 for non-integer maxPrice", async () => {
|
||||
@@ -766,16 +804,18 @@ describe("API routes", () => {
|
||||
expect(body.message).toBe("Invalid maxPrice parameter");
|
||||
});
|
||||
|
||||
test("ebayRoute returns 400 for decimal maxPrice", async () => {
|
||||
test("ebayRoute accepts decimal maxPrice", async () => {
|
||||
const { ebayRoute } = await import("../src/routes/ebay");
|
||||
|
||||
const response = await ebayRoute(
|
||||
await ebayRoute(
|
||||
new Request("http://localhost/api/ebay?q=laptop&maxPrice=1.5"),
|
||||
);
|
||||
|
||||
expect(response.status).toBe(400);
|
||||
const body = await response.json();
|
||||
expect(body.message).toBe("Invalid maxPrice parameter");
|
||||
expect(fetchEbayItems).toHaveBeenCalledWith(
|
||||
"laptop",
|
||||
1,
|
||||
expect.objectContaining({ maxPrice: 150 }),
|
||||
);
|
||||
});
|
||||
|
||||
test("kijijiRoute returns 400 for decimal maxPages", async () => {
|
||||
@@ -862,16 +902,20 @@ describe("API routes", () => {
|
||||
expect(body.message).toBe("Invalid priceMin parameter");
|
||||
});
|
||||
|
||||
test("kijijiRoute returns 400 for decimal priceMin", async () => {
|
||||
test("kijijiRoute accepts decimal priceMin", async () => {
|
||||
const { kijijiRoute } = await import("../src/routes/kijiji");
|
||||
|
||||
const response = await kijijiRoute(
|
||||
await kijijiRoute(
|
||||
new Request("http://localhost/api/kijiji?q=laptop&priceMin=1.5"),
|
||||
);
|
||||
|
||||
expect(response.status).toBe(400);
|
||||
const body = await response.json();
|
||||
expect(body.message).toBe("Invalid priceMin parameter");
|
||||
expect(fetchKijijiItems).toHaveBeenCalledWith(
|
||||
"laptop",
|
||||
4,
|
||||
"https://www.kijiji.ca",
|
||||
expect.objectContaining({ priceMin: 150 }),
|
||||
{},
|
||||
);
|
||||
});
|
||||
|
||||
test("kijijiRoute returns 400 for non-integer priceMin", async () => {
|
||||
@@ -934,16 +978,20 @@ describe("API routes", () => {
|
||||
expect(body.message).toBe("Invalid priceMax parameter");
|
||||
});
|
||||
|
||||
test("kijijiRoute returns 400 for decimal priceMax", async () => {
|
||||
test("kijijiRoute accepts decimal priceMax", async () => {
|
||||
const { kijijiRoute } = await import("../src/routes/kijiji");
|
||||
|
||||
const response = await kijijiRoute(
|
||||
await kijijiRoute(
|
||||
new Request("http://localhost/api/kijiji?q=laptop&priceMax=1.5"),
|
||||
);
|
||||
|
||||
expect(response.status).toBe(400);
|
||||
const body = await response.json();
|
||||
expect(body.message).toBe("Invalid priceMax parameter");
|
||||
expect(fetchKijijiItems).toHaveBeenCalledWith(
|
||||
"laptop",
|
||||
4,
|
||||
"https://www.kijiji.ca",
|
||||
expect.objectContaining({ priceMax: 150 }),
|
||||
{},
|
||||
);
|
||||
});
|
||||
|
||||
test("kijijiRoute returns 400 for non-integer priceMax", async () => {
|
||||
|
||||
Reference in New Issue
Block a user