Geert Rademakes 3fdd5d130f fix: Update test scripts to work with ES modules and fix import issues
- Fix test-s3.js to use direct AWS SDK imports instead of TypeScript services
- Rename test-complete-setup.js to .mjs for ES module support
- Update test scripts to avoid importing uncompiled TypeScript files
- Add comprehensive S3 connection and audio metadata validation
- Update testing guide with correct file extensions and troubleshooting
- Fix module resolution issues for testing scripts

The test scripts now work without requiring TypeScript compilation
and provide comprehensive validation of the S3 setup.
2025-08-06 14:19:05 +02:00

95 lines
3.5 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.

import { S3Client, ListBucketsCommand, CreateBucketCommand, HeadBucketCommand } from '@aws-sdk/client-s3';
// Test S3 service configuration
const s3Client = new S3Client({
endpoint: 'http://localhost:9000',
region: 'us-east-1',
credentials: {
accessKeyId: 'minioadmin',
secretAccessKey: 'minioadmin',
},
forcePathStyle: true,
});
const bucketName = 'music-files';
async function testS3Connection() {
try {
console.log('🧪 Testing S3/MinIO connection...');
// Test connection by listing buckets
const buckets = await s3Client.send(new ListBucketsCommand({}));
console.log('✅ S3 connection successful');
console.log(' Available buckets:', buckets.Buckets?.map(b => b.Name).join(', ') || 'none');
// Test if our bucket exists
try {
await s3Client.send(new HeadBucketCommand({ Bucket: bucketName }));
console.log(`✅ Bucket '${bucketName}' exists`);
} catch (error) {
if (error.name === 'NotFound') {
console.log(`⚠️ Bucket '${bucketName}' doesn't exist, creating...`);
await s3Client.send(new CreateBucketCommand({ Bucket: bucketName }));
console.log(`✅ Bucket '${bucketName}' created successfully`);
} else {
throw error;
}
}
// Test audio file validation (simple regex test)
const audioExtensions = ['.mp3', '.wav', '.flac', '.m4a', '.aac'];
const testFiles = ['song.mp3', 'track.wav', 'music.flac', 'test.txt'];
console.log('\n🎵 Testing audio file validation:');
testFiles.forEach(file => {
const extension = file.toLowerCase().substring(file.lastIndexOf('.'));
const isValidAudio = audioExtensions.includes(extension);
console.log(` ${isValidAudio ? '✅' : '❌'} ${file}: ${isValidAudio ? 'Valid audio' : 'Not audio'}`);
});
// Test file size formatting
const formatFileSize = (bytes) => {
if (bytes === 0) return '0 Bytes';
const k = 1024;
const sizes = ['Bytes', 'KB', 'MB', 'GB'];
const i = Math.floor(Math.log(bytes) / Math.log(k));
return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
};
console.log('\n📏 Testing file size formatting:');
const testSizes = [1024, 5242880, 1073741824];
testSizes.forEach(size => {
console.log(` ${formatFileSize(size)} (${size} bytes)`);
});
// Test duration formatting
const formatDuration = (seconds) => {
const minutes = Math.floor(seconds / 60);
const remainingSeconds = Math.floor(seconds % 60);
return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;
};
console.log('\n⏱ Testing duration formatting:');
const testDurations = [61, 125.5, 3600];
testDurations.forEach(duration => {
console.log(` ${formatDuration(duration)} (${duration} seconds)`);
});
console.log('\n🎉 All tests passed! S3 storage is ready to use.');
console.log('\n📋 Next steps:');
console.log(' 1. Start backend: npm run dev');
console.log(' 2. Start frontend: cd ../frontend && npm run dev');
console.log(' 3. Open browser: http://localhost:5173');
} catch (error) {
console.error('❌ Test failed:', error.message);
console.log('\n💡 Troubleshooting:');
console.log(' 1. Make sure MinIO is running:');
console.log(' docker-compose -f docker-compose.dev.yml up -d');
console.log(' 2. Check MinIO logs:');
console.log(' docker logs minio');
console.log(' 3. Verify MinIO is accessible at: http://localhost:9000');
}
}
testS3Connection();