339 lines
9.7 KiB
JavaScript
339 lines
9.7 KiB
JavaScript
/**
|
||
* 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();
|