mirror of
https://github.com/bretzel-app/crumbs.git
synced 2026-10-12 20:06:57 +02:00
test: upload a real attachment in the user-deletion coverage test
The "notes, tags, and attachments" scenario previously only created a note and an API key — no attachment. Upload a PNG via the browser context so Origin is set correctly for SvelteKit's CSRF check, giving the atomic-delete path genuine attachment rows to clean up. https://claude.ai/code/session_015T2HE6VzB64ZmSSyy1Wz4R
This commit is contained in:
@@ -1,9 +1,14 @@
|
||||
import { test, expect } from './helpers/fixtures.js';
|
||||
import { readFileSync } from 'fs';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { dirname, join } from 'path';
|
||||
import { TEST_CREDENTIALS_FILE } from './global-setup';
|
||||
|
||||
const { userPassword } = JSON.parse(readFileSync(TEST_CREDENTIALS_FILE, 'utf-8'));
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
const TEST_IMAGE_PATH = join(__dirname, 'helpers', 'test-image.png');
|
||||
|
||||
/** Create a victim user via the admin API, returning the user's id. */
|
||||
async function createVictim(
|
||||
page: import('@playwright/test').Page,
|
||||
@@ -95,6 +100,25 @@ test.describe.serial('Admin — User Deletion', () => {
|
||||
data: { title: 'Victim Note #todo', content: 'content #work' }
|
||||
});
|
||||
expect(noteRes.ok()).toBe(true);
|
||||
const note = await noteRes.json();
|
||||
|
||||
// Upload an attachment on the note. Use a browser-context fetch so the
|
||||
// Origin header is set correctly for SvelteKit's CSRF check.
|
||||
const imageBase64 = readFileSync(TEST_IMAGE_PATH).toString('base64');
|
||||
const attachmentStatus = await victimPage.evaluate(
|
||||
async ({ noteId, base64 }) => {
|
||||
const bytes = Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));
|
||||
const form = new FormData();
|
||||
form.append('file', new Blob([bytes], { type: 'image/png' }), 'test-image.png');
|
||||
const r = await fetch(`/api/notes/${noteId}/attachments`, {
|
||||
method: 'POST',
|
||||
body: form
|
||||
});
|
||||
return r.status;
|
||||
},
|
||||
{ noteId: note.id, base64: imageBase64 }
|
||||
);
|
||||
expect(attachmentStatus).toBe(201);
|
||||
|
||||
// Write a preference and create an API key to exercise every table
|
||||
await victimPage.request.put('/api/preferences', {
|
||||
|
||||
Reference in New Issue
Block a user