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