riseup-squad18/MEDICONNECT 2/scripts/test-cadastro-paciente-completo.js

339 lines
9.7 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 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();