mirror of
https://gitlab.com/soapbox-pub/ditto.git
synced 2025-12-06 03:19:46 +00:00
Add tests for pleromaStatusesRoute
This commit is contained in:
parent
f27dac342f
commit
1dd50e2e63
3 changed files with 70 additions and 7 deletions
56
packages/ditto/routes/pleromaStatusesRoute.test.ts
Normal file
56
packages/ditto/routes/pleromaStatusesRoute.test.ts
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
import { DittoConf } from '@ditto/conf';
|
||||||
|
import { DittoPolyPg } from '@ditto/db';
|
||||||
|
import { TestApp } from '@ditto/mastoapi/test';
|
||||||
|
import { genEvent, MockRelay } from '@nostrify/nostrify/test';
|
||||||
|
import { assertEquals } from '@std/assert';
|
||||||
|
|
||||||
|
import { DittoPgStore } from '@/storages/DittoPgStore.ts';
|
||||||
|
import { DittoRelayStore } from '@/storages/DittoRelayStore.ts';
|
||||||
|
|
||||||
|
import route from './pleromaStatusesRoute.ts';
|
||||||
|
|
||||||
|
Deno.test('Emoji reactions', async (t) => {
|
||||||
|
await using test = createTestApp();
|
||||||
|
const { relay } = test.var;
|
||||||
|
|
||||||
|
test.user();
|
||||||
|
|
||||||
|
const note = genEvent({ kind: 1 });
|
||||||
|
await relay.event(note);
|
||||||
|
|
||||||
|
await t.step('PUT /:id/reactions/:emoji', async () => {
|
||||||
|
const response = await test.api.put(`/${note.id}/reactions/🚀`);
|
||||||
|
const json = await response.json();
|
||||||
|
|
||||||
|
assertEquals(response.status, 200);
|
||||||
|
assertEquals(json.pleroma.emoji_reactions, [{ name: '🚀', me: true, count: 1 }]);
|
||||||
|
});
|
||||||
|
|
||||||
|
await t.step('GET /:id/reactions', async () => {
|
||||||
|
const response = await test.api.get(`/${note.id}/reactions`);
|
||||||
|
const json = await response.json();
|
||||||
|
const [{ accounts }] = json;
|
||||||
|
|
||||||
|
assertEquals(response.status, 200);
|
||||||
|
assertEquals(json, [{ name: '🚀', me: true, count: 1, accounts }]);
|
||||||
|
});
|
||||||
|
|
||||||
|
await t.step('DELETE /:id/reactions/:emoji', async () => {
|
||||||
|
const response = await test.api.delete(`/${note.id}/reactions/🚀`);
|
||||||
|
const json = await response.json();
|
||||||
|
|
||||||
|
assertEquals(response.status, 200);
|
||||||
|
assertEquals(json.pleroma.emoji_reactions, []);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// TODO: modify `TestApp` itself to avoid this boilerplate.
|
||||||
|
function createTestApp(): TestApp {
|
||||||
|
const conf = new DittoConf(Deno.env);
|
||||||
|
const db = new DittoPolyPg(conf.databaseUrl);
|
||||||
|
const pool = new MockRelay();
|
||||||
|
const store = new DittoPgStore({ conf, db });
|
||||||
|
const relay = new DittoRelayStore({ conf, db, pool, relay: store });
|
||||||
|
|
||||||
|
return new TestApp(route, { conf, db, relay });
|
||||||
|
}
|
||||||
|
|
@ -60,7 +60,7 @@ route.put('/:id{[0-9a-f]{64}}/reactions/:emoji', userMiddleware(), async (c) =>
|
||||||
*/
|
*/
|
||||||
route.delete('/:id{[0-9a-f]{64}}/reactions/:emoji', userMiddleware(), async (c) => {
|
route.delete('/:id{[0-9a-f]{64}}/reactions/:emoji', userMiddleware(), async (c) => {
|
||||||
const { id, emoji } = c.req.param();
|
const { id, emoji } = c.req.param();
|
||||||
const { relay, user } = c.var;
|
const { relay, user, signal } = c.var;
|
||||||
|
|
||||||
const pubkey = await user.signer.getPublicKey();
|
const pubkey = await user.signer.getPublicKey();
|
||||||
|
|
||||||
|
|
@ -68,9 +68,7 @@ route.delete('/:id{[0-9a-f]{64}}/reactions/:emoji', userMiddleware(), async (c)
|
||||||
return c.json({ error: 'Invalid emoji' }, 400);
|
return c.json({ error: 'Invalid emoji' }, 400);
|
||||||
}
|
}
|
||||||
|
|
||||||
const [event] = await relay.query([
|
const [event] = await relay.query([{ ids: [id] }], { signal });
|
||||||
{ kinds: [1, 20], ids: [id], limit: 1 },
|
|
||||||
]);
|
|
||||||
|
|
||||||
if (!event) {
|
if (!event) {
|
||||||
return c.json({ error: 'Status not found' }, 404);
|
return c.json({ error: 'Status not found' }, 404);
|
||||||
|
|
@ -91,8 +89,7 @@ route.delete('/:id{[0-9a-f]{64}}/reactions/:emoji', userMiddleware(), async (c)
|
||||||
tags,
|
tags,
|
||||||
}, c);
|
}, c);
|
||||||
|
|
||||||
const status = renderStatus(relay, event, { viewerPubkey: pubkey });
|
const status = await renderStatus(relay, event, { viewerPubkey: pubkey });
|
||||||
|
|
||||||
return c.json(status);
|
return c.json(status);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -110,9 +110,19 @@ export class TestApp extends DittoApp implements AsyncDisposable {
|
||||||
return await this.request(path, {
|
return await this.request(path, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: { 'Content-Type': 'application/json' },
|
headers: { 'Content-Type': 'application/json' },
|
||||||
body: JSON.stringify(body),
|
body: body ? JSON.stringify(body) : undefined,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
put: async (path: string, body?: unknown): Promise<Response> => {
|
||||||
|
return await this.request(path, {
|
||||||
|
method: 'PUT',
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
body: body ? JSON.stringify(body) : undefined,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
delete: async (path: string): Promise<Response> => {
|
||||||
|
return await this.request(path, { method: 'DELETE' });
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
async [Symbol.asyncDispose](): Promise<void> {
|
async [Symbol.asyncDispose](): Promise<void> {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue