98 lines
3.8 KiB
TypeScript
98 lines
3.8 KiB
TypeScript
import assert, { deepStrictEqual, strictEqual } from 'assert';
|
|
import * as Misskey from 'misskey-js';
|
|
import { addCustomEmoji, createAccount, type LoginUser, resolveRemoteUser, sleep } from './utils.js';
|
|
|
|
describe('Emoji', () => {
|
|
let alice: LoginUser, bob: LoginUser;
|
|
let bobInA: Misskey.entities.UserDetailedNotMe, aliceInB: Misskey.entities.UserDetailedNotMe;
|
|
|
|
beforeAll(async () => {
|
|
[alice, bob] = await Promise.all([
|
|
createAccount('a.test'),
|
|
createAccount('b.test'),
|
|
]);
|
|
|
|
[bobInA, aliceInB] = await Promise.all([
|
|
resolveRemoteUser('b.test', bob.id, alice),
|
|
resolveRemoteUser('a.test', alice.id, bob),
|
|
]);
|
|
|
|
await bob.client.request('following/create', { userId: aliceInB.id });
|
|
await sleep();
|
|
});
|
|
|
|
test('Custom emoji are delivered with Note delivery', async () => {
|
|
const emoji = await addCustomEmoji('a.test');
|
|
await alice.client.request('notes/create', { text: `I love :${emoji.name}:` });
|
|
await sleep();
|
|
|
|
const notes = await bob.client.request('notes/timeline', {});
|
|
const noteInB = notes[0];
|
|
|
|
strictEqual(noteInB.text, `I love \u200b:${emoji.name}:\u200b`);
|
|
assert(noteInB.emojis != null);
|
|
assert(emoji.name in noteInB.emojis);
|
|
strictEqual(noteInB.emojis[emoji.name], emoji.url);
|
|
});
|
|
|
|
test('Custom emoji are delivered with Reaction delivery', async () => {
|
|
const emoji = await addCustomEmoji('a.test');
|
|
const note = (await alice.client.request('notes/create', { text: 'a' })).createdNote;
|
|
await sleep();
|
|
|
|
await alice.client.request('notes/reactions/create', { noteId: note.id, reaction: `:${emoji.name}:` });
|
|
await sleep();
|
|
|
|
const noteInB = (await bob.client.request('notes/timeline', {}))[0];
|
|
deepStrictEqual(noteInB.reactions[`:${emoji.name}@a.test:`], 1);
|
|
deepStrictEqual(noteInB.reactionEmojis[`${emoji.name}@a.test`], emoji.url);
|
|
});
|
|
|
|
test('Custom emoji are delivered with Profile delivery', async () => {
|
|
const emoji = await addCustomEmoji('a.test');
|
|
const renewedAlice = await alice.client.request('i/update', { name: `:${emoji.name}:` });
|
|
await sleep();
|
|
|
|
const renewedaliceInB = await bob.client.request('users/show', { userId: aliceInB.id });
|
|
strictEqual(renewedaliceInB.name, renewedAlice.name);
|
|
assert(emoji.name in renewedaliceInB.emojis);
|
|
strictEqual(renewedaliceInB.emojis[emoji.name], emoji.url);
|
|
});
|
|
|
|
test('Local-only custom emoji aren\'t delivered with Note delivery', async () => {
|
|
const emoji = await addCustomEmoji('a.test', { localOnly: true });
|
|
await alice.client.request('notes/create', { text: `I love :${emoji.name}:` });
|
|
await sleep();
|
|
|
|
const notes = await bob.client.request('notes/timeline', {});
|
|
const noteInB = notes[0];
|
|
|
|
strictEqual(noteInB.text, `I love \u200b:${emoji.name}:\u200b`);
|
|
// deepStrictEqual(noteInB.emojis, {}); // TODO: this fails (why?)
|
|
deepStrictEqual({ ...noteInB.emojis }, {});
|
|
});
|
|
|
|
test('Local-only custom emoji aren\'t delivered with Reaction delivery', async () => {
|
|
const emoji = await addCustomEmoji('a.test', { localOnly: true });
|
|
const note = (await alice.client.request('notes/create', { text: 'a' })).createdNote;
|
|
await sleep();
|
|
|
|
await alice.client.request('notes/reactions/create', { noteId: note.id, reaction: `:${emoji.name}:` });
|
|
await sleep();
|
|
|
|
const noteInB = (await bob.client.request('notes/timeline', {}))[0];
|
|
deepStrictEqual({ ...noteInB.reactions }, { '❤': 1 });
|
|
deepStrictEqual({ ...noteInB.reactionEmojis }, {});
|
|
});
|
|
|
|
test('Local-only custom emoji aren\'t delivered with Profile delivery', async () => {
|
|
const emoji = await addCustomEmoji('a.test', { localOnly: true });
|
|
const renewedAlice = await alice.client.request('i/update', { name: `:${emoji.name}:` });
|
|
await sleep();
|
|
|
|
const renewedaliceInB = await bob.client.request('users/show', { userId: aliceInB.id });
|
|
strictEqual(renewedaliceInB.name, renewedAlice.name);
|
|
deepStrictEqual({ ...renewedaliceInB.emojis }, {});
|
|
});
|
|
});
|