← back to Govarbitrage

src/lib/marketplace-links.test.ts

50 lines

import { describe, expect, it } from "vitest";
import { searchQuery, auctionNetworkLinks, boardLinks, internationalNetworkLinks, internationalTopLinks } from "./marketplace-links";

describe("searchQuery", () => {
  it("prefers manufacturer + model and strips lot/qty noise", () => {
    expect(searchQuery({ title: "Computer Tables (4 EA)", manufacturer: "Herman Miller", model: "Aeron B" })).toBe(
      "Herman Miller Aeron B",
    );
    expect(searchQuery({ title: "HOSPITAL STRECHERS (1 LOT)" })).toBe("HOSPITAL STRECHERS");
    expect(searchQuery({ title: "Lot of 12 Apple MacBook Pro 14" })).toContain("Apple MacBook Pro 14");
  });

  it("ignores generic manufacturer/model values", () => {
    expect(searchQuery({ title: "Mixed Metals Scrap", manufacturer: "Assorted", model: "Various" })).toBe(
      "Mixed Metals Scrap",
    );
  });
});

describe("link builders", () => {
  it("produces auction + resale + retail links, encoded", () => {
    const links = auctionNetworkLinks({ title: "Toyota Forklift", category: "Industrial" });
    const labels = links.map((l) => l.label);
    expect(labels).toContain("eBay Sold");
    expect(labels).toContain("GovDeals");
    expect(labels).toContain("MachineryTrader"); // category specialist
    expect(links.every((l) => l.url.includes("Toyota") || l.url.includes("Forklift"))).toBe(true);
  });

  it("adds DOTmed for medical items and produces board links", () => {
    const med = auctionNetworkLinks({ title: "Patient Transfer Chair", category: "Medical" });
    expect(med.map((l) => l.label)).toContain("DOTmed");
    const boards = boardLinks({ title: "Patient Transfer Chair" });
    expect(boards.map((l) => l.label)).toEqual(
      expect.arrayContaining(["Reddit", "r/Flipping", "Facebook Marketplace", "Discord (Disboard)"]),
    );
  });

  it("covers all five international regions with encoded queries", () => {
    const intl = internationalNetworkLinks({ title: "Toyota Forklift" });
    expect(intl.map((r) => r.region)).toEqual(["Europe", "Japan", "Hong Kong", "Australia", "China"]);
    const allUrls = intl.flatMap((r) => r.links.map((l) => l.url));
    expect(allUrls.some((u) => u.includes("yahoo.co.jp"))).toBe(true);
    expect(allUrls.some((u) => u.includes("taobao.com"))).toBe(true);
    expect(allUrls.some((u) => u.includes("graysonline.com"))).toBe(true);
    expect(allUrls.every((u) => u.includes("Toyota") || u.includes("Forklift"))).toBe(true);
    expect(internationalTopLinks({ title: "Toyota Forklift" })).toHaveLength(4);
  });
});