57 lines
1.8 KiB
TypeScript
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");
|
|
});
|
|
});
|