feat(home): prova no topo, contato sem atrito e conversão medida
Home mais curta (hero, vitrine de clientes, sobre, serviços, IA resumida, depoimentos e contato), faixa de clientes e telas reais no hero, sem números do GitHub. Barra de cookies fina, WhatsApp fixo no celular, formulário com e-mail opcional e alternativa por e-mail, página /ia, eventos de e-mail, redes e currículo e conversão do Ads opcional por variável. Rodapé em 3 colunas. Remove componentes órfãos (LighthouseMetrics, Skills, Experience, contagem do GitHub).
This commit is contained in:
1 parent
6e1022b58c
commit
8d07b8c6bb
60 files changed
+4392
-2124
No files matched your search
@@ -0,0 +1,68 @@
|
||||
import { render, screen } from "@testing-library/react";
|
||||
import type { Testimonial } from "@/lib/proof";
|
||||
import Testimonials from "./Testimonials";
|
||||
|
||||
/**
|
||||
* Testes de caminhos-base de Testimonials e de initials() (complemento de Testimonials.test.tsx):
|
||||
* foto presente, iniciais com 1, 2 e 3 palavras, espaços extras, e vários depoimentos.
|
||||
*/
|
||||
|
||||
const base: Testimonial = {
|
||||
quote: "Entregou no prazo combinado.",
|
||||
name: "Maria Souza",
|
||||
role: "Sócia",
|
||||
company: "Empresa de Teste",
|
||||
};
|
||||
|
||||
describe("Testimonials", () => {
|
||||
it("path: with a photo -> shows the decorative image and no initials", () => {
|
||||
const { container } = render(
|
||||
<Testimonials items={[{ ...base, photo: "/clientes/maria.jpg" }]} />,
|
||||
);
|
||||
|
||||
const image = container.querySelector("img");
|
||||
expect(image).not.toBeNull();
|
||||
expect(image).toHaveAttribute("alt", "");
|
||||
expect(image?.getAttribute("src")).toContain("maria");
|
||||
expect(screen.queryByText("MS")).toBeNull();
|
||||
});
|
||||
|
||||
it.each([
|
||||
["Maria", "M"],
|
||||
["Maria Souza", "MS"],
|
||||
["maria da silva souza", "MD"],
|
||||
[" Maria Souza ", "MS"],
|
||||
])("path: name %j without a photo -> initials %j", (name, initials) => {
|
||||
const { container } = render(<Testimonials items={[{ ...base, name }]} />);
|
||||
|
||||
expect(container.querySelector("img")).toBeNull();
|
||||
expect(
|
||||
container.querySelector("span[aria-hidden='true']"),
|
||||
).toHaveTextContent(new RegExp(`^${initials}$`));
|
||||
});
|
||||
|
||||
it("path: several testimonials -> one card each, keyed by company and name", () => {
|
||||
render(
|
||||
<Testimonials
|
||||
items={[
|
||||
base,
|
||||
{ ...base, name: "João Lima", company: "Outra Empresa" },
|
||||
{ ...base, name: "Maria Souza", company: "Outra Empresa" },
|
||||
]}
|
||||
/>,
|
||||
);
|
||||
|
||||
expect(screen.getAllByRole("listitem")).toHaveLength(3);
|
||||
expect(screen.getAllByText(/Entregou no prazo/)).toHaveLength(3);
|
||||
expect(screen.getAllByText("Sócia, Outra Empresa")).toHaveLength(2);
|
||||
});
|
||||
|
||||
it("path: a testimonial with a project -> the case link points to that project", () => {
|
||||
render(<Testimonials items={[{ ...base, projectId: "sc-plus" }]} />);
|
||||
|
||||
expect(screen.getByRole("link", { name: "Ver o case" })).toHaveAttribute(
|
||||
"href",
|
||||
"/cases/sc-plus",
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user