1
0
mirror of https://github.com/hotomoe/hotomoe synced 2024-12-26 20:48:13 +09:00
hotomoe/test/streaming.ts

166 lines
4.8 KiB
TypeScript
Raw Normal View History

2021-05-16 18:12:18 +09:00
import WS from 'jest-websocket-mock';
import Stream from '../src/streaming';
describe('Streaming', () => {
2021-05-23 13:34:36 +09:00
test('useChannel', async () => {
2021-05-16 18:12:18 +09:00
const server = new WS('wss://misskey.test/streaming');
const stream = new Stream('https://misskey.test', { token: 'TOKEN' });
const mainChannelReceived: any[] = [];
2021-05-23 13:34:36 +09:00
const main = stream.useChannel('main');
main.on('meUpdated', payload => {
2021-05-16 18:12:18 +09:00
mainChannelReceived.push(payload);
});
2022-01-02 02:11:25 +09:00
const ws = await server.connected;
expect(new URLSearchParams(new URL(ws.url).search).get('i')).toEqual('TOKEN');
2021-05-16 18:12:18 +09:00
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',
2021-05-16 18:12:18 +09:00
body: {
id: 'foo'
2021-05-16 18:12:18 +09:00
}
}
}));
expect(mainChannelReceived[0]).toEqual({
id: 'foo'
2021-05-16 18:12:18 +09:00
});
2021-05-17 19:57:04 +09:00
2021-06-12 23:01:48 +09:00
stream.close();
2021-05-17 19:57:04 +09:00
server.close();
});
2021-05-23 13:34:36 +09:00
test('useChannel with parameters', async () => {
2021-06-27 21:17:42 +09:00
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);
});
2022-01-02 02:11:25 +09:00
const ws = await server.connected;
expect(new URLSearchParams(new URL(ws.url).search).get('i')).toEqual('TOKEN');
2021-06-27 21:17:42 +09:00
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();
2021-05-23 13:34:36 +09:00
});
2021-06-28 17:57:15 +09:00
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' });
2022-01-02 02:11:25 +09:00
const ws = await server.connected;
expect(new URLSearchParams(new URL(ws.url).search).get('i')).toEqual('TOKEN');
2021-06-28 17:57:15 +09:00
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();
});
2021-06-28 18:34:25 +09:00
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' });
2022-01-02 02:11:25 +09:00
const ws = await server.connected;
expect(new URLSearchParams(new URL(ws.url).search).get('i')).toEqual('TOKEN');
2021-06-28 18:34:25 +09:00
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();
});
2021-05-23 13:34:36 +09:00
test('Connection#dispose', async () => {
2021-05-17 19:57:04 +09:00
const server = new WS('wss://misskey.test/streaming');
const stream = new Stream('https://misskey.test', { token: 'TOKEN' });
const mainChannelReceived: any[] = [];
2021-05-23 13:34:36 +09:00
const main = stream.useChannel('main');
2021-05-17 19:57:04 +09:00
main.on('meUpdated', payload => {
mainChannelReceived.push(payload);
});
2022-01-02 02:11:25 +09:00
const ws = await server.connected;
expect(new URLSearchParams(new URL(ws.url).search).get('i')).toEqual('TOKEN');
2021-05-17 19:57:04 +09:00
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);
2021-06-12 23:01:48 +09:00
stream.close();
2021-05-17 19:57:04 +09:00
server.close();
2021-05-16 18:12:18 +09:00
});
2021-05-17 19:57:04 +09:00
// TODO: SharedConnection#dispose して一定時間経ったら disconnect メッセージがサーバーに送られてくるかのテスト
2021-05-23 13:34:36 +09:00
// TODO: チャンネル接続が使いまわされるかのテスト
2021-05-16 18:12:18 +09:00
});