feat: add randomized portfolio hero variants

This commit is contained in:
Evandro Fonseca Junior committed 2026-07-10 02:46:42 -03:00
1 parent 812499b318
commit 9236fdd685
25 files changed
+1438 -658

No files matched your search

+87 -23
View File
@@ -1,8 +1,16 @@
import { render, screen } from "@testing-library/react";
import { fireEvent, render, screen, waitFor } from "@testing-library/react";
import type { ReactNode } from "react";
import Hero from "./Hero";
jest.mock("next/dynamic", () => () => {
const DynamicComponent = ({ variant }: { variant?: string }) => (
<div data-testid="hero-scene" data-variant={variant} />
);
DynamicComponent.displayName = "MockHeroScene";
return DynamicComponent;
});
jest.mock("framer-motion", () => {
const React = require("react");
@@ -12,6 +20,12 @@ jest.mock("framer-motion", () => {
get: (_, tag: string) => {
const Component = ({
children,
initial: _initial,
animate: _animate,
whileHover: _whileHover,
whileTap: _whileTap,
variants: _variants,
transition: _transition,
...props
}: { children?: ReactNode } & Record<string, unknown>) =>
React.createElement(tag, props, children);
@@ -29,34 +43,84 @@ jest.mock("framer-motion", () => {
};
});
function mockMatchMedia(matches = false) {
Object.defineProperty(window, "matchMedia", {
writable: true,
value: jest.fn().mockImplementation((query) => ({
matches,
media: query,
onchange: null,
addListener: jest.fn(),
removeListener: jest.fn(),
addEventListener: jest.fn(),
removeEventListener: jest.fn(),
dispatchEvent: jest.fn(),
})),
});
}
describe("Hero", () => {
it("renders the upgraded hero content and primary actions", () => {
render(<Hero />);
expect(screen.getByLabelText("evandro.dev.br")).toBeInTheDocument();
expect(
screen.getByText(
/Engenharia de software para produtos conectados, interfaces de alta performance e sistemas criticos/i,
),
).toBeInTheDocument();
expect(screen.getByText(/Iniciar projeto/i)).toBeInTheDocument();
expect(screen.getByText(/Ver projetos/i)).toBeInTheDocument();
expect(screen.getByText(/Download CV/i)).toBeInTheDocument();
expect(screen.getByText(/Execution Brief/i)).toBeInTheDocument();
beforeEach(() => {
mockMatchMedia(false);
jest.spyOn(Math, "random").mockReturnValue(0);
jest.spyOn(window, "open").mockImplementation(() => null);
});
it("renders social links and proof content", () => {
afterEach(() => {
jest.restoreAllMocks();
});
it("renders the command center hero and primary actions", async () => {
const { container } = render(<Hero />);
await waitFor(() =>
expect(container.querySelector("[data-hero-variant]")).toHaveAttribute(
"data-hero-variant",
"command-center",
),
);
expect(
screen.getByRole("heading", {
level: 1,
name: /coloque seu sistema no ar/i,
}),
).toBeInTheDocument();
expect(
screen.getByRole("button", { name: /botar meu sistema no ar/i }),
).toBeInTheDocument();
expect(
screen.getByRole("link", { name: /ver casos selecionados/i }),
).toHaveAttribute("href", "/cases");
expect(screen.getByText(/Download CV/i)).toBeInTheDocument();
expect(screen.getByTestId("hero-scene")).toHaveAttribute(
"data-variant",
"command",
);
});
it("keeps social links, proof content and WhatsApp CTA", async () => {
render(<Hero />);
expect(screen.getAllByLabelText("GitHub").length).toBeGreaterThan(0);
expect(screen.getAllByLabelText("LinkedIn").length).toBeGreaterThan(0);
expect(screen.getAllByLabelText("Email").length).toBeGreaterThan(0);
await waitFor(() =>
expect(screen.getByText(/Command center online/i)).toBeInTheDocument(),
);
expect(screen.getByLabelText("GitHub")).toBeInTheDocument();
expect(screen.getByLabelText("LinkedIn")).toBeInTheDocument();
expect(screen.getByLabelText("Email")).toBeInTheDocument();
expect(screen.getByText(/Garuva, SC \/ Brasil/i)).toBeInTheDocument();
expect(screen.getByText(/Especialidade/i)).toBeInTheDocument();
expect(screen.getByText(/Escopo/i)).toBeInTheDocument();
expect(screen.getByText(/Formato/i)).toBeInTheDocument();
expect(screen.getByText(/Scroll/i)).toBeInTheDocument();
expect(screen.getByText(/Operacao/i)).toBeInTheDocument();
expect(screen.getByText(/Clareza/i)).toBeInTheDocument();
expect(screen.getAllByText(/Resultado/i).length).toBeGreaterThan(0);
fireEvent.click(
screen.getByRole("button", { name: /botar meu sistema no ar/i }),
);
expect(window.open).toHaveBeenCalledWith(
expect.stringContaining("https://wa.me/"),
"_blank",
"noopener,noreferrer",
);
});
});