125 lines
3.6 KiB
JavaScript
125 lines
3.6 KiB
JavaScript
|
|
#!/usr/bin/env node
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Test Script: Upload Database Integration
|
|||
|
|
*
|
|||
|
|
* This script tests that file uploads are properly recorded in PostgreSQL
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
const { pool } = require("./config/database");
|
|||
|
|
|
|||
|
|
async function testUploadDatabase() {
|
|||
|
|
console.log("🔍 Testing Upload Database Integration...\n");
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
// Test 1: Check if uploads table exists
|
|||
|
|
console.log("1️⃣ Checking uploads table...");
|
|||
|
|
const tableCheck = await pool.query(`
|
|||
|
|
SELECT EXISTS (
|
|||
|
|
SELECT FROM information_schema.tables
|
|||
|
|
WHERE table_name = 'uploads'
|
|||
|
|
);
|
|||
|
|
`);
|
|||
|
|
|
|||
|
|
if (tableCheck.rows[0].exists) {
|
|||
|
|
console.log(" ✅ uploads table exists\n");
|
|||
|
|
} else {
|
|||
|
|
console.log(" ❌ uploads table not found\n");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Test 2: Check table structure
|
|||
|
|
console.log("2️⃣ Checking table structure...");
|
|||
|
|
const columns = await pool.query(`
|
|||
|
|
SELECT column_name, data_type, is_nullable
|
|||
|
|
FROM information_schema.columns
|
|||
|
|
WHERE table_name = 'uploads'
|
|||
|
|
ORDER BY ordinal_position;
|
|||
|
|
`);
|
|||
|
|
|
|||
|
|
console.log(" Columns:");
|
|||
|
|
columns.rows.forEach((col) => {
|
|||
|
|
console.log(
|
|||
|
|
` - ${col.column_name} (${col.data_type}) ${
|
|||
|
|
col.is_nullable === "YES" ? "NULL" : "NOT NULL"
|
|||
|
|
}`
|
|||
|
|
);
|
|||
|
|
});
|
|||
|
|
console.log();
|
|||
|
|
|
|||
|
|
// Test 3: Check indexes
|
|||
|
|
console.log("3️⃣ Checking indexes...");
|
|||
|
|
const indexes = await pool.query(`
|
|||
|
|
SELECT indexname, indexdef
|
|||
|
|
FROM pg_indexes
|
|||
|
|
WHERE tablename = 'uploads';
|
|||
|
|
`);
|
|||
|
|
|
|||
|
|
console.log(` Found ${indexes.rows.length} index(es):`);
|
|||
|
|
indexes.rows.forEach((idx) => {
|
|||
|
|
console.log(` - ${idx.indexname}`);
|
|||
|
|
});
|
|||
|
|
console.log();
|
|||
|
|
|
|||
|
|
// Test 4: Query existing uploads
|
|||
|
|
console.log("4️⃣ Querying existing uploads...");
|
|||
|
|
const uploads = await pool.query(`
|
|||
|
|
SELECT id, filename, original_name, file_size, mime_type, created_at
|
|||
|
|
FROM uploads
|
|||
|
|
ORDER BY created_at DESC
|
|||
|
|
LIMIT 10;
|
|||
|
|
`);
|
|||
|
|
|
|||
|
|
console.log(` Found ${uploads.rows.length} upload(s) in database:`);
|
|||
|
|
if (uploads.rows.length > 0) {
|
|||
|
|
uploads.rows.forEach((upload) => {
|
|||
|
|
console.log(
|
|||
|
|
` - [${upload.id}] ${upload.original_name} (${upload.filename})`
|
|||
|
|
);
|
|||
|
|
console.log(
|
|||
|
|
` Size: ${(upload.file_size / 1024).toFixed(2)}KB | Type: ${
|
|||
|
|
upload.mime_type
|
|||
|
|
}`
|
|||
|
|
);
|
|||
|
|
console.log(` Uploaded: ${upload.created_at}`);
|
|||
|
|
});
|
|||
|
|
} else {
|
|||
|
|
console.log(" No uploads found yet. Upload a file to test!");
|
|||
|
|
}
|
|||
|
|
console.log();
|
|||
|
|
|
|||
|
|
// Test 5: Check foreign key constraint
|
|||
|
|
console.log("5️⃣ Checking foreign key constraints...");
|
|||
|
|
const fkeys = await pool.query(`
|
|||
|
|
SELECT conname, conrelid::regclass, confrelid::regclass
|
|||
|
|
FROM pg_constraint
|
|||
|
|
WHERE contype = 'f' AND conrelid = 'uploads'::regclass;
|
|||
|
|
`);
|
|||
|
|
|
|||
|
|
if (fkeys.rows.length > 0) {
|
|||
|
|
console.log(` Found ${fkeys.rows.length} foreign key(s):`);
|
|||
|
|
fkeys.rows.forEach((fk) => {
|
|||
|
|
console.log(` - ${fk.conname}: ${fk.conrelid} -> ${fk.confrelid}`);
|
|||
|
|
});
|
|||
|
|
} else {
|
|||
|
|
console.log(" No foreign keys found");
|
|||
|
|
}
|
|||
|
|
console.log();
|
|||
|
|
|
|||
|
|
console.log("✅ Database integration test complete!\n");
|
|||
|
|
console.log("📋 Summary:");
|
|||
|
|
console.log(" - Database: skyartshop");
|
|||
|
|
console.log(" - Table: uploads");
|
|||
|
|
console.log(" - Records: " + uploads.rows.length);
|
|||
|
|
console.log(" - Status: Ready for production ✨\n");
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error("❌ Test failed:", error.message);
|
|||
|
|
console.error(error);
|
|||
|
|
} finally {
|
|||
|
|
await pool.end();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Run test
|
|||
|
|
testUploadDatabase().catch(console.error);
|