chore: integrate misskey-js as a workspace item (git subtree) (#10409)
* Additional changes for the merge * api-misskey-js
This commit is contained in:

committed by
GitHub

parent
a529b0e5a3
commit
cee1d5e2d0
165
packages/misskey-js/test/streaming.ts
Normal file
165
packages/misskey-js/test/streaming.ts
Normal file
@@ -0,0 +1,165 @@
|
||||
import WS from 'jest-websocket-mock';
|
||||
import Stream from '../src/streaming';
|
||||
|
||||
describe('Streaming', () => {
|
||||
test('useChannel', async () => {
|
||||
const server = new WS('wss://misskey.test/streaming');
|
||||
const stream = new Stream('https://misskey.test', { token: 'TOKEN' });
|
||||
const mainChannelReceived: any[] = [];
|
||||
const main = stream.useChannel('main');
|
||||
main.on('meUpdated', payload => {
|
||||
mainChannelReceived.push(payload);
|
||||
});
|
||||
|
||||
const ws = await server.connected;
|
||||
expect(new URLSearchParams(new URL(ws.url).search).get('i')).toEqual('TOKEN');
|
||||
|
||||
const msg = JSON.parse(await server.nextMessage as string);
|
||||
const mainChannelId = msg.body.id;
|
||||
expect(msg.type).toEqual('connect');
|
||||
expect(msg.body.channel).toEqual('main');
|
||||
expect(mainChannelId != null).toEqual(true);
|
||||
|
||||
server.send(JSON.stringify({
|
||||
type: 'channel',
|
||||
body: {
|
||||
id: mainChannelId,
|
||||
type: 'meUpdated',
|
||||
body: {
|
||||
id: 'foo'
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
expect(mainChannelReceived[0]).toEqual({
|
||||
id: 'foo'
|
||||
});
|
||||
|
||||
stream.close();
|
||||
server.close();
|
||||
});
|
||||
|
||||
test('useChannel with parameters', async () => {
|
||||
const server = new WS('wss://misskey.test/streaming');
|
||||
const stream = new Stream('https://misskey.test', { token: 'TOKEN' });
|
||||
const messagingChannelReceived: any[] = [];
|
||||
const messaging = stream.useChannel('messaging', { otherparty: 'aaa' });
|
||||
messaging.on('message', payload => {
|
||||
messagingChannelReceived.push(payload);
|
||||
});
|
||||
|
||||
const ws = await server.connected;
|
||||
expect(new URLSearchParams(new URL(ws.url).search).get('i')).toEqual('TOKEN');
|
||||
|
||||
const msg = JSON.parse(await server.nextMessage as string);
|
||||
const messagingChannelId = msg.body.id;
|
||||
expect(msg.type).toEqual('connect');
|
||||
expect(msg.body.channel).toEqual('messaging');
|
||||
expect(msg.body.params).toEqual({ otherparty: 'aaa' });
|
||||
expect(messagingChannelId != null).toEqual(true);
|
||||
|
||||
server.send(JSON.stringify({
|
||||
type: 'channel',
|
||||
body: {
|
||||
id: messagingChannelId,
|
||||
type: 'message',
|
||||
body: {
|
||||
id: 'foo'
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
expect(messagingChannelReceived[0]).toEqual({
|
||||
id: 'foo'
|
||||
});
|
||||
|
||||
stream.close();
|
||||
server.close();
|
||||
});
|
||||
|
||||
test('ちゃんとチャンネルごとにidが異なる', async () => {
|
||||
const server = new WS('wss://misskey.test/streaming');
|
||||
const stream = new Stream('https://misskey.test', { token: 'TOKEN' });
|
||||
|
||||
stream.useChannel('messaging', { otherparty: 'aaa' });
|
||||
stream.useChannel('messaging', { otherparty: 'bbb' });
|
||||
|
||||
const ws = await server.connected;
|
||||
expect(new URLSearchParams(new URL(ws.url).search).get('i')).toEqual('TOKEN');
|
||||
|
||||
const msg = JSON.parse(await server.nextMessage as string);
|
||||
const messagingChannelId = msg.body.id;
|
||||
const msg2 = JSON.parse(await server.nextMessage as string);
|
||||
const messagingChannelId2 = msg2.body.id;
|
||||
|
||||
expect(messagingChannelId != null).toEqual(true);
|
||||
expect(messagingChannelId2 != null).toEqual(true);
|
||||
expect(messagingChannelId).not.toEqual(messagingChannelId2);
|
||||
|
||||
stream.close();
|
||||
server.close();
|
||||
});
|
||||
|
||||
test('Connection#send', async () => {
|
||||
const server = new WS('wss://misskey.test/streaming');
|
||||
const stream = new Stream('https://misskey.test', { token: 'TOKEN' });
|
||||
|
||||
const messaging = stream.useChannel('messaging', { otherparty: 'aaa' });
|
||||
messaging.send('read', { id: 'aaa' });
|
||||
|
||||
const ws = await server.connected;
|
||||
expect(new URLSearchParams(new URL(ws.url).search).get('i')).toEqual('TOKEN');
|
||||
|
||||
const connectMsg = JSON.parse(await server.nextMessage as string);
|
||||
const channelId = connectMsg.body.id;
|
||||
const msg = JSON.parse(await server.nextMessage as string);
|
||||
|
||||
expect(msg.type).toEqual('ch');
|
||||
expect(msg.body.id).toEqual(channelId);
|
||||
expect(msg.body.type).toEqual('read');
|
||||
expect(msg.body.body).toEqual({ id: 'aaa' });
|
||||
|
||||
stream.close();
|
||||
server.close();
|
||||
});
|
||||
|
||||
test('Connection#dispose', async () => {
|
||||
const server = new WS('wss://misskey.test/streaming');
|
||||
const stream = new Stream('https://misskey.test', { token: 'TOKEN' });
|
||||
const mainChannelReceived: any[] = [];
|
||||
const main = stream.useChannel('main');
|
||||
main.on('meUpdated', payload => {
|
||||
mainChannelReceived.push(payload);
|
||||
});
|
||||
|
||||
const ws = await server.connected;
|
||||
expect(new URLSearchParams(new URL(ws.url).search).get('i')).toEqual('TOKEN');
|
||||
|
||||
const msg = JSON.parse(await server.nextMessage as string);
|
||||
const mainChannelId = msg.body.id;
|
||||
expect(msg.type).toEqual('connect');
|
||||
expect(msg.body.channel).toEqual('main');
|
||||
expect(mainChannelId != null).toEqual(true);
|
||||
main.dispose();
|
||||
|
||||
server.send(JSON.stringify({
|
||||
type: 'channel',
|
||||
body: {
|
||||
id: mainChannelId,
|
||||
type: 'meUpdated',
|
||||
body: {
|
||||
id: 'foo'
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
expect(mainChannelReceived.length).toEqual(0);
|
||||
|
||||
stream.close();
|
||||
server.close();
|
||||
});
|
||||
|
||||
// TODO: SharedConnection#dispose して一定時間経ったら disconnect メッセージがサーバーに送られてくるかのテスト
|
||||
|
||||
// TODO: チャンネル接続が使いまわされるかのテスト
|
||||
});
|
Reference in New Issue
Block a user