source: Klonkt/test/custom-emojis.test.js@ 47db4b5

main
Last change on this file since 47db4b5 was 97bacf2, checked in by Robin <roboburr@…>, 7 weeks ago

FEP-9098 emit: Klonkt bewaart + serveert custom-emoji tags (C2S inbox)

De Shaer-client toonde nog :shortcode: omdat de data ontbrak: Klonkt bewaarde de
Emoji-tags van inkomende federatie-posts niet en serveerde geen tag-array op de
C2S inbox-read. Nu: op inbound Create (en backfill) worden de Emoji-tags bewaard
in ap_timeline.emoji_json, en de inbox-read serveert ze als note.tag zodat de
client de shortcode->url map kan bouwen en de emoji inline rendert.

Changed files:
src/config/database.js

  • ap_timeline.emoji_json

src/services/ActivityPubService.js

  • extractEmojiTags(tag) + timelineEmojis(json); UPDATE emoji_json bij inbound Create + backfill

src/routes/activitypub.js

  • inbox-read serveert nu tag: timelineEmojis(t.emoji_json)

New file:
test/custom-emojis.test.js

  • extract/round-trip + geen-emoji-geval

remarks: npm test 173/173. Werkt voor NIEUWE inbound posts; bestaande timeline-rijen
hebben nog geen emoji_json (geen backfill). Eigen Klonkt-posts hebben geen custom
emojis (geen picker); losse :tekst: zonder gedefinieerde emoji blijft terecht letterlijk.

-robo
Co-Authored-By: Claude Opus 4.8 <noreply@…>

  • Property mode set to 100644
File size: 1.2 KB
Line 
1// FEP-9098: Klonkt keeps inbound custom-emoji tags and serves them on the C2S inbox read.
2import { test } from 'node:test';
3import assert from 'node:assert/strict';
4process.env.DATABASE_PATH = ':memory:';
5process.env.PUBLIC_BASE_URL = 'https://test.example';
6const dbMod = await import('../src/config/database.js');
7dbMod.initializeDatabase();
8const { extractEmojiTags, timelineEmojis } = await import('../src/services/ActivityPubService.js');
9const AP = { extractEmojiTags, timelineEmojis };
10
11test('extractEmojiTags keeps only Emoji tags; timelineEmojis round-trips', () => {
12 const tag = [
13 { type: 'Mention', href: 'https://s/u/x' },
14 { type: 'Emoji', name: ':wave:', icon: { type: 'Image', url: 'https://s/wave.png' } },
15 { type: 'Hashtag', name: '#hi' },
16 ];
17 const json = AP.extractEmojiTags(tag);
18 assert.ok(json);
19 const back = AP.timelineEmojis(json);
20 assert.equal(back.length, 1);
21 assert.equal(back[0].name, ':wave:');
22 assert.equal(back[0].icon.url, 'https://s/wave.png');
23});
24
25test('no emojis → null / undefined (nothing served)', () => {
26 assert.equal(AP.extractEmojiTags([{ type: 'Mention' }]), null);
27 assert.equal(AP.timelineEmojis(null), undefined);
28 assert.equal(AP.timelineEmojis('not json'), undefined);
29});
Note: See TracBrowser for help on using the repository browser.