From 4eafb0c5d05f90abaf9b80b416f404a8e539372b Mon Sep 17 00:00:00 2001 From: Rodribm10 Date: Mon, 13 Apr 2026 23:11:47 -0300 Subject: [PATCH] test: smoke test do App com mock do supabase Co-Authored-By: Claude Sonnet 4.6 --- src/__tests__/App.test.tsx | 25 +++++++++++++++++++++++ src/__tests__/setup.ts | 42 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 src/__tests__/App.test.tsx create mode 100644 src/__tests__/setup.ts diff --git a/src/__tests__/App.test.tsx b/src/__tests__/App.test.tsx new file mode 100644 index 0000000..8cbe6c7 --- /dev/null +++ b/src/__tests__/App.test.tsx @@ -0,0 +1,25 @@ +import { render, screen, waitFor } from '@testing-library/react' +import { describe, it, expect } from 'vitest' +import App from '@/App' + +describe('App', () => { + it('renderiza título premium', () => { + render() + expect(screen.getByRole('heading', { name: /reserva rede 1001/i })).toBeInTheDocument() + }) + + it('exibe marcas retornadas do supabase após carregar', async () => { + render() + await waitFor(() => { + expect(screen.getByText('Hotel 1001 Noites')).toBeInTheDocument() + expect(screen.getByText('Dolce Amore')).toBeInTheDocument() + }) + }) + + it('não mostra estado de loading após fetch completar', async () => { + render() + await waitFor(() => { + expect(screen.queryByText(/carregando marcas/i)).not.toBeInTheDocument() + }) + }) +}) diff --git a/src/__tests__/setup.ts b/src/__tests__/setup.ts new file mode 100644 index 0000000..6ef4a0e --- /dev/null +++ b/src/__tests__/setup.ts @@ -0,0 +1,42 @@ +import '@testing-library/jest-dom/vitest' +import { cleanup } from '@testing-library/react' +import { afterEach, vi } from 'vitest' + +afterEach(() => { + cleanup() +}) + +// Mock do Supabase client — imita from('marcas').select('*').eq('ativa', true).order('nome') +vi.mock('@/lib/supabase', () => { + const mockMarcas = [ + { + id: '3fac5ed4-100f-4c0a-82ce-06110758b9c9', + nome: 'Hotel 1001 Noites', + categorias: ['Standard', 'Superior', 'Luxo'], + permanencias: ['3hrs', '6hrs', 'Pernoite'], + descricao: null, + ativa: true, + created_at: '2026-04-13T00:00:00Z', + updated_at: '2026-04-13T00:00:00Z', + }, + { + id: '11111111-1111-1111-1111-111111111111', + nome: 'Dolce Amore', + categorias: ['Suite Master', 'Apartamento'], + permanencias: ['3hrs', '4hrs'], + descricao: null, + ativa: true, + created_at: '2026-04-13T00:00:00Z', + updated_at: '2026-04-13T00:00:00Z', + }, + ] + + const orderFn = vi.fn(() => Promise.resolve({ data: mockMarcas, error: null })) + const eqFn = vi.fn(() => ({ order: orderFn })) + const selectFn = vi.fn(() => ({ eq: eqFn, order: orderFn })) + const fromFn = vi.fn(() => ({ select: selectFn })) + + return { + supabase: { from: fromFn }, + } +})