Files
portifolio-evandrodevbr/app/components/story/notebookProjects.test.ts
T

57 lines
1.8 KiB
TypeScript

import { type PortfolioProject, portfolio } from "@/lib/portfolio-data";
import { selectNotebookProjects } from "./notebookProjects";
const projectsFixture = portfolio.projects as PortfolioProject[];
describe("selectNotebookProjects", () => {
it("returns the four ordered projects with local screenshots", () => {
const result = selectNotebookProjects(projectsFixture);
expect(result.map((project) => project.id)).toEqual([
"nutriscan",
"sc-plus",
"sev-modaintima",
"as-servicos",
]);
expect(
result.every((project) =>
project.screenshotSrc.startsWith("/assets/prints/"),
),
).toBe(true);
});
it("omits a project when its screenshot mapping is missing", () => {
const result = selectNotebookProjects([
...projectsFixture,
{ ...projectsFixture[0], id: "unknown-live-project" },
]);
expect(
result.some((project) => project.id === "unknown-live-project"),
).toBe(false);
});
it("omits a project without an approved demo URL", () => {
const projectsWithoutDemoUrl = projectsFixture.map((project) =>
project.id === "nutriscan" ? { ...project, demoUrl: null } : project,
) as unknown as PortfolioProject[];
const result = selectNotebookProjects(projectsWithoutDemoUrl);
expect(result.some((project) => project.id === "nutriscan")).toBe(false);
});
it("copies only the browser contract fields", () => {
const [project] = selectNotebookProjects(projectsFixture);
expect(project).toEqual({
id: "nutriscan",
title: "NutriScan",
subtitle: "Análise Nutricional Inteligente",
demoUrl: "https://nutriscan.evandro.dev.br",
technologies: expect.arrayContaining(["Next.js 14", "TypeScript"]),
screenshotSrc: "/assets/prints/print-nutriscan.png",
});
expect(project).not.toHaveProperty("description");
});
});