muddle/tests/amezing.test.ts
2026-10-23 09:12:49 -04:00

44 lines
1.4 KiB
TypeScript

import { expect, test } from "bun:test";
import { App } from "../index.ts";
import { resolveConfig } from "../core/config.ts";
import { createViews } from "../views/api.ts";
import {
amezingIntegration,
amezingStyles,
accentStyle,
} from "../modules/amezing/index.ts";
function createAmezingApp() {
const views = createViews({ viewsDir: process.cwd() });
return App.create({
config: resolveConfig(),
views,
integrations: [amezingIntegration()],
});
}
test("amezing integration mounts the theme components and assets", async () => {
const app = await createAmezingApp();
const response = await app.fetch(
new Request("https://example.test/_muddle/amezing/closable.js"),
);
expect(response.status).toBe(200);
const font = await app.fetch(
new Request("https://example.test/fonts/commissioner.woff2"),
);
expect(font.status).toBe(200);
const styles = await app.fetch(
new Request("https://example.test/_muddle/amezing.css"),
);
expect((await styles.text()).length).toBeGreaterThan(0);
});
test("amezing accent colors map presets to inline variables", () => {
expect(accentStyle("purple")).toContain("--accent-light-h:254.11766");
expect(accentStyle(["red", "green"])).toContain("--accent-dark-h:90");
expect(() => accentStyle("nope")).toThrow();
});
test("amezing ships the compiled theme stylesheet", async () => {
expect(await amezingStyles()).toContain("#site-header");
});