fix: update all tests and MCP catalog tool for manufacturerId schema migration
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { describe, expect, test } from "bun:test";
|
||||
import { manufacturers } from "../../src/db/schema.ts";
|
||||
import { getCollectionSummary } from "../../src/server/mcp/resources/collection.ts";
|
||||
import { registerCatalogTools } from "../../src/server/mcp/tools/catalog.ts";
|
||||
import { registerCategoryTools } from "../../src/server/mcp/tools/categories.ts";
|
||||
@@ -7,6 +8,16 @@ import { registerSetupTools } from "../../src/server/mcp/tools/setups.ts";
|
||||
import { registerThreadTools } from "../../src/server/mcp/tools/threads.ts";
|
||||
import { createSecondTestUser, createTestDb } from "../helpers/db.ts";
|
||||
|
||||
async function insertManufacturer(db: any, name: string) {
|
||||
const slug = name.toLowerCase().replace(/\s+/g, "-").replace(/[^a-z0-9-]/g, "");
|
||||
const [row] = await db
|
||||
.insert(manufacturers)
|
||||
.values({ name, slug, website: `https://${slug}.com` })
|
||||
.onConflictDoUpdate({ target: manufacturers.slug, set: { name } })
|
||||
.returning();
|
||||
return row!;
|
||||
}
|
||||
|
||||
function parseResult(result: {
|
||||
content: Array<{ type: string; text: string }>;
|
||||
}) {
|
||||
@@ -256,15 +267,15 @@ describe("MCP Collection Summary Resource", () => {
|
||||
describe("MCP Catalog Tools", () => {
|
||||
test("upsert_catalog_item creates a new global item with created=true", async () => {
|
||||
const { db } = await createTestDb();
|
||||
await insertManufacturer(db, "Revelate Designs");
|
||||
const tools = registerCatalogTools(db);
|
||||
const result = await tools.upsert_catalog_item({
|
||||
brand: "Revelate Designs",
|
||||
manufacturerSlug: "revelate-designs",
|
||||
model: "Terrapin System",
|
||||
weightGrams: 235,
|
||||
priceCents: 16500,
|
||||
});
|
||||
const data = parseResult(result);
|
||||
expect(data.brand).toBe("Revelate Designs");
|
||||
expect(data.model).toBe("Terrapin System");
|
||||
expect(data.created).toBe(true);
|
||||
expect(data.id).toBeDefined();
|
||||
@@ -272,17 +283,18 @@ describe("MCP Catalog Tools", () => {
|
||||
|
||||
test("upsert_catalog_item updates existing item on brand+model match", async () => {
|
||||
const { db } = await createTestDb();
|
||||
await insertManufacturer(db, "Apidura");
|
||||
const tools = registerCatalogTools(db);
|
||||
|
||||
// Create initial item
|
||||
await tools.upsert_catalog_item({
|
||||
brand: "Apidura",
|
||||
manufacturerSlug: "apidura",
|
||||
model: "Handlebar Pack",
|
||||
});
|
||||
|
||||
// Update it
|
||||
const result = await tools.upsert_catalog_item({
|
||||
brand: "Apidura",
|
||||
manufacturerSlug: "apidura",
|
||||
model: "Handlebar Pack",
|
||||
description: "Updated description",
|
||||
weightGrams: 120,
|
||||
@@ -295,10 +307,11 @@ describe("MCP Catalog Tools", () => {
|
||||
|
||||
test("upsert_catalog_item includes attribution fields in result (SEED-03)", async () => {
|
||||
const { db } = await createTestDb();
|
||||
await insertManufacturer(db, "MSR");
|
||||
const tools = registerCatalogTools(db);
|
||||
|
||||
const result = await tools.upsert_catalog_item({
|
||||
brand: "MSR",
|
||||
manufacturerSlug: "msr",
|
||||
model: "PocketRocket 2",
|
||||
sourceUrl: "https://www.cascadedesigns.com/msr/pocket-rocket-2",
|
||||
imageCredit: "MSR Photography",
|
||||
@@ -317,13 +330,16 @@ describe("MCP Catalog Tools", () => {
|
||||
|
||||
test("bulk_upsert_catalog processes array and returns created/updated counts", async () => {
|
||||
const { db } = await createTestDb();
|
||||
await insertManufacturer(db, "Revelate Designs");
|
||||
await insertManufacturer(db, "Apidura");
|
||||
await insertManufacturer(db, "MSR");
|
||||
const tools = registerCatalogTools(db);
|
||||
|
||||
const result = await tools.bulk_upsert_catalog({
|
||||
items: [
|
||||
{ brand: "Revelate Designs", model: "Terrapin System" },
|
||||
{ brand: "Apidura", model: "Handlebar Pack" },
|
||||
{ brand: "MSR", model: "PocketRocket 2" },
|
||||
{ manufacturerSlug: "revelate-designs", model: "Terrapin System" },
|
||||
{ manufacturerSlug: "apidura", model: "Handlebar Pack" },
|
||||
{ manufacturerSlug: "msr", model: "PocketRocket 2" },
|
||||
],
|
||||
});
|
||||
const data = parseResult(result);
|
||||
@@ -335,18 +351,20 @@ describe("MCP Catalog Tools", () => {
|
||||
|
||||
test("bulk_upsert_catalog returns totalProcessed matching input length", async () => {
|
||||
const { db } = await createTestDb();
|
||||
await insertManufacturer(db, "Revelate Designs");
|
||||
await insertManufacturer(db, "Apidura");
|
||||
const tools = registerCatalogTools(db);
|
||||
|
||||
// Pre-create one item
|
||||
await tools.upsert_catalog_item({
|
||||
brand: "Revelate Designs",
|
||||
manufacturerSlug: "revelate-designs",
|
||||
model: "Terrapin System",
|
||||
});
|
||||
|
||||
const result = await tools.bulk_upsert_catalog({
|
||||
items: [
|
||||
{ brand: "Revelate Designs", model: "Terrapin System" },
|
||||
{ brand: "Apidura", model: "Handlebar Pack" },
|
||||
{ manufacturerSlug: "revelate-designs", model: "Terrapin System" },
|
||||
{ manufacturerSlug: "apidura", model: "Handlebar Pack" },
|
||||
],
|
||||
});
|
||||
const data = parseResult(result);
|
||||
|
||||
Reference in New Issue
Block a user