Hero: replace particle field with cobe globe (Capricorn view, multi-axis drag, reduced-motion safe), telemetry HUD with pointer parallax, particle text build effect, Space Grotesk display font. SEO: short titles with template, PT-BR accents, twitter cards on dynamic cases, escaped JSON-LD via lib/jsonld.ts, CSP report-only, 25 service FAQs answer-first. Design: fix TW4 layered reset killing spacing utilities, literal @theme tokens, mobile hero overflow, header overlap, empty case cards. Remove framer-motion (unified on motion/react), header version badge, phone number from hero CTA. Production build verified (24 static pages).
37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
import { render } from "@testing-library/react";
|
|
import fc from "fast-check";
|
|
import Footer from "./Footer";
|
|
|
|
describe("Footer responsive structure", () => {
|
|
it("keeps the responsive design-system structure across renders", () => {
|
|
fc.assert(
|
|
fc.property(fc.integer({ min: 1, max: 5 }), (renderCount) => {
|
|
for (let index = 0; index < renderCount; index += 1) {
|
|
const { container, unmount } = render(<Footer />);
|
|
const footer = container.querySelector("footer");
|
|
const grid = footer?.querySelector(".ds-grid-2");
|
|
|
|
expect(footer).toHaveClass("ds-section");
|
|
expect(
|
|
footer?.querySelector(".ds-section-shell"),
|
|
).toBeInTheDocument();
|
|
expect(grid).toBeInTheDocument();
|
|
expect(grid?.querySelectorAll(":scope > .ds-card")).toHaveLength(2);
|
|
|
|
unmount();
|
|
}
|
|
}),
|
|
{ numRuns: 25 },
|
|
);
|
|
});
|
|
|
|
it("uses the mobile-first grid primitive instead of the legacy grid contract", () => {
|
|
const { container } = render(<Footer />);
|
|
const grid = container.querySelector(".ds-grid-2");
|
|
|
|
expect(grid).toBeInTheDocument();
|
|
expect(grid).not.toHaveClass("grid-cols-1");
|
|
expect(grid).not.toHaveClass("lg:grid-cols-3");
|
|
});
|
|
});
|