test-upload.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import * as dotenv from 'dotenv';
  2. import * as fs from 'fs';
  3. import path from 'path';
  4. import { uploadMedia } from '../src/actions/media';
  5. import { mediaBucketName } from '../src/lib/config';
  6. import minioClient from '../src/lib/minio';
  7. import { cleanupMediaRecord } from './helpers/media-cleanup';
  8. dotenv.config({ path: path.resolve(process.cwd(), '.env') });
  9. async function runTest() {
  10. console.log('--- Environment Check ---');
  11. console.log('MINIO_ENDPOINT:', process.env.MINIO_ENDPOINT);
  12. console.log('-------------------------');
  13. if (!fs.existsSync('test_sample.mp4')) {
  14. console.error('Missing test_sample.mp4 in project root.');
  15. process.exit(1);
  16. }
  17. console.log('Starting end-to-end upload test...');
  18. console.log('1. Calling uploadMedia action...');
  19. let mediaId: string | null = null;
  20. let failed = false;
  21. try {
  22. const fileBuffer = fs.readFileSync('test_sample.mp4');
  23. const result = await uploadMedia({
  24. name: 'e2e-upload-test_sample.mp4',
  25. type: 'video/mp4',
  26. size: fileBuffer.byteLength,
  27. arrayBuffer: async () => fileBuffer.buffer.slice(
  28. fileBuffer.byteOffset,
  29. fileBuffer.byteOffset + fileBuffer.byteLength
  30. ),
  31. }, {
  32. enqueue: false,
  33. });
  34. mediaId = result.media.id;
  35. console.log('Action returned successfully.');
  36. console.log('Media ID:', result.media.id);
  37. console.log('Resource ID:', result.resource.id);
  38. console.log('\n2. Verifying database record...');
  39. if (result.media.status !== 'pending' || !result.media.storageKey) {
  40. console.error('Upload did not create the expected pending media record.');
  41. process.exit(1);
  42. }
  43. console.log('Database record verification passed.');
  44. console.log('\n3. Verifying MinIO file...');
  45. await minioClient.statObject(mediaBucketName, result.media.storageKey);
  46. console.log('MinIO file verification passed.');
  47. } catch (error: any) {
  48. console.error('\nTest failed.');
  49. console.error('Error Message:', error.message);
  50. if (error.code) console.error('Error Code:', error.code);
  51. failed = true;
  52. } finally {
  53. if (mediaId) {
  54. await cleanupMediaRecord(mediaId);
  55. }
  56. }
  57. process.exit(failed ? 1 : 0);
  58. }
  59. runTest();