import { readFileSync } from "node:fs"; import { resolve } from "node:path"; import { describe, expect, it } from "vitest"; import type { RecordListItem } from "./RecordList.types"; import { resolveRecordListSecondaryText } from "./RecordList.utils"; describe("RecordList", () => { it("resolves row secondary text from meta then description", () => { const withMeta: RecordListItem = { id: "one", title: "One", meta: "1 member", description: "fallback", }; const withDescription: RecordListItem = { id: "two", title: "Two", description: "Description only", }; const withNone: RecordListItem = { id: "three", title: "Three", }; expect(resolveRecordListSecondaryText(withMeta)).toBe("1 member"); expect(resolveRecordListSecondaryText(withDescription)).toBe("Description only"); expect(resolveRecordListSecondaryText(withNone)).toBeNull(); }); it("declares item-action slot and empty-state affordance", () => { const source = readFileSync( resolve(process.cwd(), "src/patterns/RecordList/RecordList.vue"), "utf8", ); expect(source).toContain(''); expect(source).toContain(''); expect(source).toContain('data-test="record-list-empty"'); }); });