import type { Note } from "$lib/model"; import { MemoryRouter, Route } from "@solidjs/router"; import { cleanup, render, screen } from "@solidjs/testing-library"; import { afterEach, describe, expect, it, vi } from "vitest"; import { NoteCard } from "../NoteCard"; vi.mock("$lib/density-context", () => ({ useDensity: vi.fn(() => "comfortable") })); const mockNote: Note = { id: "note-1", owner_did: "did:plc:test123", title: "Test Note", body: "This is the body of the test note with some **markdown** content.", tags: ["rust", "learning"], visibility: { type: "Private" }, created_at: "2026-01-01T10:00:00Z", updated_at: "2026-01-01T12:00:00Z", }; describe("NoteCard", () => { afterEach(cleanup); it("renders note title", () => { render(() => ( } /> )); expect(screen.getByText("Test Note")).toBeInTheDocument(); }); it("renders truncated body preview", () => { render(() => ( } /> )); expect(screen.getByText(/This is the body/)).toBeInTheDocument(); }); it("renders tags", () => { render(() => ( } /> )); expect(screen.getByText("rust")).toBeInTheDocument(); expect(screen.getByText("learning")).toBeInTheDocument(); }); it("links to note view page", () => { render(() => ( } /> )); const link = screen.getByRole("link"); expect(link).toHaveAttribute("href", "/notes/note-1"); }); it("shows +N for excess tags", () => { const noteWithManyTags: Note = { ...mockNote, tags: ["tag1", "tag2", "tag3", "tag4", "tag5"] }; render(() => ( } /> )); expect(screen.getByText("+2")).toBeInTheDocument(); }); });