fix(api): Dateien bereits veröffentlichter oder gesperrter Karten nicht wiederverwenden
Veröffentlichen lehnt mit 403 "Diese Bilder sind bereits veröffentlicht oder
gesperrt." ab, wenn eine Datei kein read("any") trägt (ausgeblendet) oder von
einer Galerie-Zeile des Autors schon als Bild oder Vorschau verwendet wird
(auch überkreuz, auch ausgeblendete Karten). Die Nutzungsprüfung liest die
Zeilen des Autors über den vorhandenen ownerId-Index seitenweise mit Cursor
(auf die Datei-ID-Spalten gibt es keinen Index) und läuft zusammen mit dem
Anlegen je Autor nacheinander. 92 Tests.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
cd55d4c891
commit
7bbe0a9fe6
6 files changed
+235
-63
No files matched your search
@@ -7,7 +7,7 @@ const { test, afterEach } = require('node:test');
|
||||
const assert = require('node:assert/strict');
|
||||
const http = require('node:http');
|
||||
|
||||
const { createAppwrite, AppwriteError, queryEqual, queryLimit } = require('./appwrite.js');
|
||||
const { createAppwrite, AppwriteError, queryEqual, queryLimit, queryCursorAfter } = require('./appwrite.js');
|
||||
const { startFakeAppwrite } = require('./fake-appwrite.js');
|
||||
|
||||
const fakes = [];
|
||||
@@ -110,9 +110,23 @@ test('listRows schickt die Queries als queries[]-Parameter und liefert die Zeile
|
||||
assert.equal(lastCall(fake).headers['x-appwrite-key'], fake.key);
|
||||
});
|
||||
|
||||
test('queryEqual und queryLimit liefern Appwrite-JSON-Strings', () => {
|
||||
test('queryEqual, queryLimit und queryCursorAfter liefern Appwrite-JSON-Strings', () => {
|
||||
assert.equal(queryEqual('galleryId', ['x']), '{"method":"equal","attribute":"galleryId","values":["x"]}');
|
||||
assert.equal(queryLimit(100), '{"method":"limit","values":[100]}');
|
||||
assert.equal(queryCursorAfter('abc'), '{"method":"cursorAfter","values":["abc"]}');
|
||||
});
|
||||
|
||||
test('listRows blättert mit cursorAfter', async () => {
|
||||
const { appwrite } = await setup();
|
||||
for (const id of ['a', 'b', 'c', 'd', 'e']) {
|
||||
await appwrite.createRow('reports', id, { galleryId: 'g1', reason: 'spam', reporterHash: id }, []);
|
||||
}
|
||||
const first = await appwrite.listRows('reports', [queryEqual('galleryId', ['g1']), queryLimit(2)]);
|
||||
assert.deepEqual(first.map((row) => row.$id), ['a', 'b']);
|
||||
const second = await appwrite.listRows('reports', [queryEqual('galleryId', ['g1']), queryLimit(2), queryCursorAfter('b')]);
|
||||
assert.deepEqual(second.map((row) => row.$id), ['c', 'd']);
|
||||
const last = await appwrite.listRows('reports', [queryEqual('galleryId', ['g1']), queryLimit(2), queryCursorAfter('d')]);
|
||||
assert.deepEqual(last.map((row) => row.$id), ['e']);
|
||||
});
|
||||
|
||||
test('Dateien: lesen, Rechte setzen, löschen', async () => {
|
||||
|
||||
Reference in new issue
Block a user