Desinger-System / scripts /error_test.js
o134's picture
Upload folder using huggingface_hub
1804b24 verified
Raw
History Blame Contribute Delete
2.63 kB
import postgres from 'postgres';
import path from 'path';
import fs from 'fs';
// 1. Load DATABASE_URL from .env
const envPath = path.resolve('artifacts/api-server/.env');
const envContent = fs.readFileSync(envPath, 'utf8');
const dbUrlMatch = envContent.match(/DATABASE_URL=(.+)/);
if (!dbUrlMatch) {
console.error("DATABASE_URL not found in .env");
process.exit(1);
}
const DATABASE_URL = dbUrlMatch[1].trim();
const sql = postgres(DATABASE_URL);
// Test IDs
const USER_A = 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11';
const USER_B = 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12';
async function runErrorTests() {
try {
console.log("--- Starting Backend Error Testing ---");
const runAsUser = async (userId, queryFn) => {
return await sql.begin(async (tx) => {
await tx.unsafe(`SET LOCAL role TO authenticated`);
await tx.unsafe(`SET LOCAL "request.jwt.claims" TO '{"sub": "${userId}"}'`);
return await queryFn(tx);
});
};
// Test 1: Insert missing required field (DB Level)
console.log("\nTest 1: Inserting missing required field...");
try {
await runAsUser(USER_A, tx => tx.unsafe(`INSERT INTO clients (user_id) VALUES ('${USER_A}')`));
console.log("FAIL: Inserted client without name!");
} catch (err) {
console.log(`✓ Caught expected DB error: ${err.message}`);
}
// Test 2: Invalid UUID format
console.log("\nTest 2: Using invalid UUID format...");
try {
await runAsUser(USER_A, tx => tx.unsafe(`SELECT * FROM clients WHERE user_id = 'not-a-uuid'`));
console.log("FAIL: DB allowed invalid UUID query!");
} catch (err) {
console.log(`✓ Caught expected UUID error: ${err.message}`);
}
// Test 3: Unauthorized Update (RLS)
// First, insert as User A
await sql.unsafe(`DELETE FROM clients WHERE name = 'Error Test Client'`);
await runAsUser(USER_A, tx => tx.unsafe(`INSERT INTO clients (name, user_id) VALUES ('Error Test Client', '${USER_A}')`));
console.log("\nTest 3: User B tries to update User A's client (RLS Check)...");
const updateResult = await runAsUser(USER_B, tx => tx.unsafe(`UPDATE clients SET name = 'Hacked' WHERE name = 'Error Test Client'`));
if (updateResult.count === 0) {
console.log("✓ User B update failed (0 rows affected) as expected due to RLS.");
} else {
console.log("FAIL: User B successfully updated User A's client!");
}
console.log("\n--- Backend Error Testing Completed ---");
} catch (err) {
console.error("Error during testing:", err);
} finally {
await sql.end();
}
}
runErrorTests();