Files
goodgo-platform/e2e/api/listings-media.spec.ts
Ho Ngoc Hai 2502aa69b7 fix: production readiness — resolve build, lint, and code quality issues
- Fix Next.js build failure: remove duplicate route at (dashboard)/listings/[id]
  that conflicted with (public)/listings/[id] (same URL path in two route groups)
- Fix 772 ESLint errors: auto-fix import ordering (import-x/order), remove unused
  imports/variables, convert empty interfaces to type aliases, replace require()
  with ESM imports, fix consistent-type-imports violations
- Add CLAUDE.md for developer onboarding documentation
- All checks pass: 0 lint errors, typecheck clean, 230 tests passing, build success

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-08 07:15:06 +07:00

74 lines
2.1 KiB
TypeScript

import { test, expect, registerUser, createListing } from '../fixtures';
test.describe('POST /listings/:id/media — Media upload', () => {
let accessToken: string;
let listingId: string;
test.beforeAll(async ({ request }) => {
const { accessToken: token } = await registerUser(request);
accessToken = token;
// Create a listing to attach media to
const { listing } = await createListing(request, token);
listingId = listing.id;
});
test('rejects unauthenticated media upload', async ({ request }) => {
const res = await request.post(`/listings/${listingId}/media`, {
multipart: {
file: {
name: 'test.jpg',
mimeType: 'image/jpeg',
buffer: Buffer.from('fake-jpeg-data'),
},
},
});
expect(res.status()).toBe(401);
});
test('rejects upload without file', async ({ request }) => {
const res = await request.post(`/listings/${listingId}/media`, {
headers: { Authorization: `Bearer ${accessToken}` },
multipart: {
caption: 'Missing file',
},
});
expect(res.ok()).toBeFalsy();
expect([400, 422]).toContain(res.status());
});
test('rejects upload with invalid MIME type', async ({ request }) => {
const res = await request.post(`/listings/${listingId}/media`, {
headers: { Authorization: `Bearer ${accessToken}` },
multipart: {
file: {
name: 'test.pdf',
mimeType: 'application/pdf',
buffer: Buffer.from('fake-pdf-data'),
},
},
});
expect(res.ok()).toBeFalsy();
expect([400, 415, 422]).toContain(res.status());
});
test('rejects upload for non-existent listing', async ({ request }) => {
const res = await request.post('/listings/non-existent-id/media', {
headers: { Authorization: `Bearer ${accessToken}` },
multipart: {
file: {
name: 'test.jpg',
mimeType: 'image/jpeg',
buffer: Buffer.from('fake-jpeg-data'),
},
},
});
expect(res.ok()).toBeFalsy();
expect([400, 404]).toContain(res.status());
});
});