import { describe, expect, it } from "vitest"; import { Builder } from "./builder.js"; describe("Builder", () => { it("builds text, number, select, people, and file values", () => { expect(Builder.richText("hello")).toEqual([["hello"]]); expect(Builder.number(42)).toEqual([["42"]]); expect(Builder.number(Number.NaN)).toEqual([]); expect(Builder.select("Open")).toEqual([["Open"]]); expect(Builder.multiSelect("Bug", "Urgent")).toEqual([["Bug,Urgent"]]); expect(Builder.status("In progress")).toEqual([["In progress"]]); expect(Builder.people("ada@example.com")).toEqual([{ email: "ada@example.com" }]); expect(Builder.file("https://example.com/file.pdf", "File")).toEqual([ ["File", [["a", "https://example.com/file.pdf"]]], ]); }); it("builds dates and date ranges", () => { expect(Builder.date("2026-08-26")).toEqual([ ["‣", [["d", { type: "date", start_date: "2026-08-26" }]]], ]); expect(Builder.dateTime("2026-08-26T10:30:00Z", "America/New_York")).toEqual([ [ "‣", [ [ "d", { type: "datetime", start_date: "2026-08-26", start_time: "10:30", time_zone: "America/New_York", }, ], ], ], ]); expect(Builder.dateRange("2026-08-26", "2026-08-27")).toEqual([ [ "‣", [ [ "d", { type: "daterange", start_date: "2026-08-26", end_date: "2026-08-27", }, ], ], ], ]); }); it("builds places, relations, icons, and covers", () => { expect(Builder.place({ lat: 40.7128, lon: -74.006, name: "New York" })).toEqual({ lat: 40.7128, lon: -74.006, name: "New York", }); expect(Builder.relation("project-1")).toEqual({ type: "primaryKey", value: "project-1", }); expect(Builder.notionIcon("checkmark", "green")).toEqual({ type: "notion", icon: "checkmark", color: "green", }); expect(Builder.imageIcon("https://example.com/icon.png")).toEqual({ type: "image", url: "https://example.com/icon.png", }); expect(Builder.imageCover("https://example.com/cover.png", 0.25)).toEqual({ type: "image", url: "https://example.com/cover.png", position: 0.25, }); }); });