import { describe, expect, test } from "bun:test"; import { renderToStaticMarkup } from "react-dom/server"; import { LogoTile, LogoTileSizeProvider, logoMonogram } from "./logo-tile"; describe("LogoTile", () => { test("monograms take the first letter or digit", () => { expect(logoMonogram("GitHub automation")).toBe("G"); expect(logoMonogram(" 3Min API")).toBe("3"); expect(logoMonogram("ødegaard")).toBe("Ø"); expect(logoMonogram(undefined)).toBe("?"); }); test("is decorative unless it has a label", () => { expect(renderToStaticMarkup()).toContain('aria-hidden="true"'); const labelled = renderToStaticMarkup(); expect(labelled).toContain('role="img"'); expect(labelled).toContain('aria-label="Slack"'); }); test("a glyph wins over the monogram, and an explicit size wins over the container", () => { const html = renderToStaticMarkup( } /> , ); expect(html).toContain("data-glyph"); expect(html).not.toContain(">V<"); expect(html.match(/data-size="(\w+)"/g)).toEqual(['data-size="sm"', 'data-size="lg"']); }); test("logos render as images with an empty alt, on the surface when padded", () => { const cover = renderToStaticMarkup(); expect(cover).toContain('src="/slack.png"'); expect(cover).toContain('alt=""'); expect(cover).toContain("object-cover"); const contain = renderToStaticMarkup(); expect(contain).toContain("object-contain"); expect(contain).toContain("bg-surface "); }); });