Files
Cibello-app/packages/recipe-generation/test/pipeline.test.ts
T
Sven (AAMOS AI) c32a7e33c7
CI / Typecheck, test & build (push) Failing after 2s
ci: trigga på master + formatfix inför Gitea Actions
2026-08-13 17:25:14 +07:00

78 lines
2.2 KiB
TypeScript

import { describe, it, expect } from "vitest";
import { MockAamosClient } from "@app/ai-contracts";
import { runPipeline, type PipelineTarget, type PipelineIngredient } from "../src/pipeline.js";
import type { CanonicalIngredientLookup, SimilarityLookup } from "../src/verification.js";
const mockClient = new MockAamosClient();
const mockIngredients: CanonicalIngredientLookup = {
getById(id: string) {
const db: Record<string, ReturnType<CanonicalIngredientLookup["getById"]>> = {
kycklingfile: {
id: "kycklingfile",
nutritionPer100: {
basis: "per_100_g",
values: {
kcal: 165,
proteinG: 31,
carbsG: 0,
fatG: 3.6,
saturatedFatG: 1,
fiberG: 0,
sugarG: 0,
saltG: 0.1,
},
},
defaultUnit: "GRAM",
densityGPerMl: null,
gramsPerPiece: null,
allergens: [],
isVegan: false,
isVegetarian: false,
containsGluten: false,
containsLactose: false,
isPork: false,
isBeef: false,
isAlcohol: false,
},
};
return db[id] ?? undefined;
},
};
const noSimilarity: SimilarityLookup = {
async hasSimilarity() {
return false;
},
};
const catalog: PipelineIngredient[] = [
{
id: "kycklingfile",
nameSv: "kycklingfilé",
category: "kott_fagel",
defaultUnit: "GRAM",
isVegan: false,
isVegetarian: false,
containsGluten: false,
containsLactose: false,
allergens: [],
},
];
const targets: PipelineTarget[] = [
{ mealType: "dinner", mainIngredientId: "kycklingfile", dietVariant: "standard", count: 2 },
];
describe("runPipeline", () => {
it("kör med mockad klient och returnerar resultat", async () => {
const result = await runPipeline(mockClient, targets, catalog, mockIngredients, noSimilarity);
expect(result.geminiResult.status).toBe("ok");
// MockAamosClient returnerar nu kandidater för GENERATE_RECIPE_CANDIDATES
expect(result.candidates.length).toBeGreaterThan(0);
expect(result.verifiedCount + result.unverifiedCount + result.rejectedCount).toBe(
result.candidates.length,
);
});
});