/** * Script de teste: Cadastro completo de paciente * Verifica se: * 1. Paciente é cadastrado via signup * 2. Usuário é criado automaticamente no Supabase Auth * 3. Registro do paciente é criado na tabela patients */ import fetch from "node-fetch"; const SUPABASE_URL = "https://yuanqfswhberkoevtmfr.supabase.co"; const SUPABASE_ANON_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inl1YW5xZnN3aGJlcmtvZXZ0bWZyIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTQ5NTQzNjksImV4cCI6MjA3MDUzMDM2OX0.g8Fm4XAvtX46zifBZnYVH4tVuQkqUH6Ia9CXQj4DztQ"; // Gerar dados únicos para o teste const timestamp = Date.now(); const testEmail = `pacienteteste${timestamp}@gmail.com`; const testPassword = "TestePaciente123!"; console.log("\n🧪 TESTE DE CADASTRO COMPLETO DE PACIENTE\n"); console.log("=".repeat(60)); console.log(`Email de teste: ${testEmail}`); console.log(`Senha: ${testPassword}`); console.log("=".repeat(60)); async function signupPaciente() { console.log("\n📝 ETAPA 1: Cadastrar paciente via /auth/v1/signup..."); const signupData = { email: testEmail, password: testPassword, options: { data: { role: "paciente", full_name: "Paciente Teste Automático", cpf: "12345678901", telefone: "11999999999", data_nascimento: "1990-01-01", endereco: { rua: "Rua de Teste", numero: "123", bairro: "Centro", cidade: "São Paulo", estado: "SP", cep: "01000-000", }, }, }, }; try { const response = await fetch(`${SUPABASE_URL}/auth/v1/signup`, { method: "POST", headers: { "Content-Type": "application/json", apikey: SUPABASE_ANON_KEY, }, body: JSON.stringify(signupData), }); const data = await response.json(); if (!response.ok) { console.error("❌ Erro no signup:", data); return null; } console.log("✅ Signup bem-sucedido!"); console.log(" User ID:", data.id); console.log(" Email:", data.email); return data; } catch (error) { console.error("❌ Erro na requisição de signup:", error.message); return null; } } async function createPatient(userId) { console.log("\n📝 ETAPA 2: Criar registro na tabela patients..."); console.log( " ℹ️ Nota: Removendo user_id do payload (não existe na tabela)" ); const patientData = { full_name: "Paciente Teste Automático", cpf: "12345678901", email: testEmail, phone_mobile: "11999999999", birth_date: "1990-01-01", street: "Rua de Teste", number: "123", neighborhood: "Centro", city: "São Paulo", state: "SP", cep: "01000-000", }; try { const response = await fetch(`${SUPABASE_URL}/rest/v1/patients`, { method: "POST", headers: { "Content-Type": "application/json", apikey: SUPABASE_ANON_KEY, Authorization: `Bearer ${SUPABASE_ANON_KEY}`, Prefer: "return=representation", }, body: JSON.stringify(patientData), }); const data = await response.json(); if (!response.ok) { console.error("❌ Erro ao criar patient:", data); console.log( " ℹ️ Isso é normal - a tabela pode ter estrutura diferente" ); return null; } console.log("✅ Registro do paciente criado!"); console.log(" Patient ID:", data[0]?.id || data.id); console.log(" Nome:", data[0]?.full_name || data.full_name); return data; } catch (error) { console.error( "❌ Erro na requisição de criação do patient:", error.message ); return null; } } async function loginPaciente() { console.log("\n🔐 ETAPA 3: Fazer login com o paciente criado..."); const loginData = { email: testEmail, password: testPassword, }; try { const response = await fetch( `${SUPABASE_URL}/auth/v1/token?grant_type=password`, { method: "POST", headers: { "Content-Type": "application/json", apikey: SUPABASE_ANON_KEY, }, body: JSON.stringify(loginData), } ); const data = await response.json(); if (!response.ok) { console.error("❌ Erro no login:", data); if (data.error_code === "email_not_confirmed") { console.log( " ℹ️ Email não confirmado - isso é configuração do Supabase" ); console.log( " ℹ️ Para produção, configure SMTP ou desabilite confirmação" ); } return null; } console.log("✅ Login bem-sucedido!"); console.log(" Access Token:", data.access_token.substring(0, 30) + "..."); console.log(" Token Type:", data.token_type); return data; } catch (error) { console.error("❌ Erro na requisição de login:", error.message); return null; } } async function getUserInfo(accessToken) { console.log("\n👤 ETAPA 4: Buscar informações do usuário autenticado..."); try { const response = await fetch(`${SUPABASE_URL}/auth/v1/user`, { method: "GET", headers: { "Content-Type": "application/json", apikey: SUPABASE_ANON_KEY, Authorization: `Bearer ${accessToken}`, }, }); const data = await response.json(); if (!response.ok) { console.error("❌ Erro ao buscar user info:", data); return null; } console.log("✅ Informações do usuário obtidas!"); console.log(" ID:", data.id); console.log(" Email:", data.email); console.log(" Role:", data.user_metadata?.role); console.log(" Nome:", data.user_metadata?.full_name); return data; } catch (error) { console.error("❌ Erro na requisição de user info:", error.message); return null; } } async function listPatients(accessToken) { console.log("\n📋 ETAPA 5: Verificar se paciente aparece na lista..."); try { const response = await fetch( `${SUPABASE_URL}/rest/v1/patients?email=eq.${testEmail}`, { method: "GET", headers: { "Content-Type": "application/json", apikey: SUPABASE_ANON_KEY, Authorization: `Bearer ${accessToken}`, }, } ); const data = await response.json(); if (!response.ok) { console.error("❌ Erro ao listar patients:", data); return null; } if (data.length === 0) { console.log("⚠️ Paciente não encontrado na lista!"); return null; } console.log("✅ Paciente encontrado na lista!"); console.log(" Total de registros:", data.length); console.log(" Dados:", JSON.stringify(data[0], null, 2)); return data; } catch (error) { console.error("❌ Erro na requisição de listagem:", error.message); return null; } } async function runTest() { try { // NOVA ORDEM: Criar paciente PRIMEIRO, depois usuário // Etapa 1: Criar registro do paciente (SEM autenticação) console.log("\n📝 NOVA ESTRATÉGIA: Criando paciente ANTES do usuário..."); const patientResult = await createPatient(null); if (!patientResult) { console.log("\n⚠️ Não foi possível criar registro do paciente"); console.log(" ℹ️ Tentando criar usuário mesmo assim..."); } else { console.log("\n✅ Paciente criado com sucesso!"); } // Aguardar um pouco console.log("\n⏳ Aguardando 2 segundos..."); await new Promise((resolve) => setTimeout(resolve, 2000)); // Etapa 2: Signup (criar usuário de autenticação) const signupResult = await signupPaciente(); if (!signupResult || !signupResult.id) { console.log("\n❌ TESTE FALHOU: Não foi possível criar o usuário"); return; } const userId = signupResult.id; console.log("\n✅ Usuário criado após paciente!"); // Etapa 3: Login const loginResult = await loginPaciente(); if (!loginResult || !loginResult.access_token) { console.log("\n❌ TESTE FALHOU: Não foi possível fazer login"); return; } const accessToken = loginResult.access_token; // Etapa 4: Buscar informações do usuário const userInfo = await getUserInfo(accessToken); if (!userInfo) { console.log( "\n⚠️ Login bem-sucedido, mas não foi possível buscar informações do usuário" ); } // Etapa 5: Verificar se aparece na lista de pacientes const patients = await listPatients(accessToken); // Resumo final console.log("\n" + "=".repeat(60)); console.log("📊 RESUMO DO TESTE"); console.log("=".repeat(60)); console.log( `✅ Usuário criado no Supabase Auth: ${signupResult ? "SIM" : "NÃO"}` ); console.log( `✅ Registro criado na tabela patients: ${patientResult ? "SIM" : "NÃO"}` ); console.log(`✅ Login funciona: ${loginResult ? "SIM" : "NÃO"}`); console.log(`✅ Dados do usuário recuperados: ${userInfo ? "SIM" : "NÃO"}`); console.log( `✅ Paciente aparece na lista: ${ patients && patients.length > 0 ? "SIM" : "NÃO" }` ); console.log("=".repeat(60)); if (signupResult && patientResult && loginResult && userInfo && patients) { console.log("\n🎉 TESTE COMPLETO BEM-SUCEDIDO! 🎉"); console.log("\nO paciente foi cadastrado corretamente e:"); console.log(" 1. Usuário criado no Supabase Auth ✅"); console.log(" 2. Registro na tabela patients ✅"); console.log(" 3. Login funciona ✅"); console.log(" 4. Dados acessíveis via API ✅"); } else { console.log("\n⚠️ TESTE PARCIALMENTE BEM-SUCEDIDO"); console.log("Algumas etapas falharam. Verifique os logs acima."); } } catch (error) { console.error("\n❌ ERRO GERAL NO TESTE:", error); } } // Executar teste runTest();