import { render, screen } from '@testing-library/react'; import { describe, it, expect } from 'vitest'; import { PuntosInflexion } from '../PuntosInflexion'; import { puntosInflexion } from '@/lib/content'; describe('', () => { it('renders the section title', () => { render(); expect(screen.getByText(/llegan a un punto de inflexión/i)).toBeInTheDocument(); }); it('renders the six inflection points from the dueña deck', () => { render(); // Each point now renders once, not twice: the mobile carousel is gone and // the conversation stacks vertically at every breakpoint. for (const name of ['Crecer', 'Consolidarse', 'Recuperar rentabilidad', 'Simplificar', 'Expandirse', 'Replantear el portafolio']) { expect(screen.getByText(new RegExp(name))).toBeInTheDocument(); } expect(screen.getAllByRole('listitem')).toHaveLength(6); }); it('answers every situation instead of only naming it', () => { render(); // The whole point of the section, and the one thing that would silently // regress back into the old mute grid: six situations, six answers, each // spoken by creeer. expect(screen.getAllByLabelText('creeer')).toHaveLength(6); for (const { respuesta } of puntosInflexion.items) { expect(screen.getByText(respuesta)).toBeInTheDocument(); } }); it('states each situation in the second person, as the dueña reads them', () => { // Her own phrasing in the 31/jul call: "estás atrapado en tu compañía", // "creciste muy rápido pero quieres expandirte". The deck's infinitives // ("Dar el siguiente salto") would put the reader outside their own story. // // Only real second-person markers count here. The first draft of this // pattern also accepted `dejó|volvió|abiertos|mismo`, which let four // impersonal lines through — "El esfuerzo dejó de traducirse en resultado" // never addresses anyone. That was the test being bent to fit the copy. for (const { situacion } of puntosInflexion.items) { expect(situacion).toMatch(/\b(tu|tus|te|ti|tienes|vas|sabes|quieres|puedes|demostraste|construiste|creciste)\b/i); } }); it('keeps the situations about the business, not about how it feels', () => { // `dolores` is four sections down and owns the feelings, in the client's // own first-person words. If a situation starts saying "siento" or "estoy // agotado", the two sections collapse into each other. for (const { situacion } of puntosInflexion.items) { expect(situacion).not.toMatch(/\b(siento|me siento|estoy|agotad|frustrad|harto)\b/i); } }); it('does NOT introduce scarcity', () => { const { container } = render(); expect(container.textContent).not.toMatch(/cupos|cohorte|generación fundadora/i); }); });