import { describe, it, expect } from "bun:test";
import app from "../app";
const HOME = "/";
describe("Block L10 — landing hero rewrite", () => {
it("GET / returns 200 HTML to an anonymous visitor", async () => {
const res = await app.request(HOME);
expect(res.status).toBe(200);
const ct = res.headers.get("content-type") || "";
expect(ct.toLowerCase()).toContain("text/html");
});
it("renders the hero headline", async () => {
const res = await app.request(HOME);
const body = await res.text();
expect(body).toContain("The git host built for");
});
it("renders speed-framing copy in hero lede", async () => {
const res = await app.request(HOME);
const body = await res.text();
expect(body).toContain("Spec to PR in 90 seconds");
});
it("renders primary CTAs in the hero row", async () => {
const res = await app.request(HOME);
const body = await res.text();
expect(body).toContain('href="/register"');
expect(body).toContain("Start building");
});
it("renders the register and explore nav links", async () => {
const res = await app.request(HOME);
const body = await res.text();
expect(body).toContain('href="/register"');
expect(body).toContain('href="/explore"');
expect(body).toContain('href="/pricing"');
});
it("renders the 'The git host' eyebrow or headline copy", async () => {
const res = await app.request(HOME);
const body = await res.text();
expect(body).toContain("AI-native git host");
});
it("injects SEO + Open Graph meta tags", async () => {
const res = await app.request(HOME);
const body = await res.text();
expect(body).toContain(
"<title>Gluecron — The AI-native git host</title>"
);
expect(body).toMatch(
/<meta\s+name="description"\s+content="The AI-native git host\. Spec to PR in 90 seconds\./
);
expect(body).toMatch(
/<meta\s+property="og:title"\s+content="Gluecron — The AI-native git host"/
);
expect(body).toMatch(
/<meta\s+property="og:description"\s+content="The AI-native git host\./
);
expect(body).toMatch(
/<meta\s+property="og:type"\s+content="website"/
);
expect(body).toMatch(
/<meta\s+name="twitter:card"\s+content="summary_large_image"/
);
});
it("REGRESSION: L4 counters tile section is still rendered", async () => {
const res = await app.request(HOME);
const body = await res.text();
const { buildSocialProofTiles } = await import("../views/landing");
expect(typeof buildSocialProofTiles).toBe("function");
if (body.includes("landing-counters-grid")) {
expect(body).toContain("data-counter-target");
}
});
it("REGRESSION: pricing link is present in nav or page body", async () => {
const res = await app.request(HOME);
const body = await res.text();
expect(body).toContain('href="/pricing"');
});
});
|