1 | import { SocketIoChannel } from '../../src/channel';
|
2 |
|
3 | describe('SocketIoChannel', () => {
|
4 | let channel;
|
5 | let socket;
|
6 |
|
7 | beforeEach(() => {
|
8 | const channelName = 'some.channel';
|
9 | let listeners = [];
|
10 | socket = {
|
11 | emit: (event, data) => listeners.filter(([e]) => e === event).forEach(([, fn]) => fn(channelName, data)),
|
12 | on: (event, fn) => listeners.push([event, fn]),
|
13 | removeListener: (event, fn) => {
|
14 | listeners = listeners.filter(([e, f]) => (!fn ? e !== event : e !== event || f !== fn));
|
15 | },
|
16 | };
|
17 |
|
18 | channel = new SocketIoChannel(socket, channelName, {
|
19 | namespace: false,
|
20 | });
|
21 | });
|
22 |
|
23 | test('triggers all listeners for an event', () => {
|
24 | const l1 = jest.fn();
|
25 | const l2 = jest.fn();
|
26 | const l3 = jest.fn();
|
27 | channel.listen('MyEvent', l1);
|
28 | channel.listen('MyEvent', l2);
|
29 | channel.listen('MyOtherEvent', l3);
|
30 |
|
31 | socket.emit('MyEvent', {});
|
32 |
|
33 | expect(l1).toBeCalled();
|
34 | expect(l2).toBeCalled();
|
35 | expect(l3).not.toBeCalled();
|
36 |
|
37 | socket.emit('MyOtherEvent', {});
|
38 |
|
39 | expect(l3).toBeCalled();
|
40 | });
|
41 |
|
42 | test('can remove a listener for an event', () => {
|
43 | const l1 = jest.fn();
|
44 | const l2 = jest.fn();
|
45 | const l3 = jest.fn();
|
46 | channel.listen('MyEvent', l1);
|
47 | channel.listen('MyEvent', l2);
|
48 | channel.listen('MyOtherEvent', l3);
|
49 |
|
50 | channel.stopListening('MyEvent', l1);
|
51 |
|
52 | socket.emit('MyEvent', {});
|
53 |
|
54 | expect(l1).not.toBeCalled();
|
55 | expect(l2).toBeCalled();
|
56 | expect(l3).not.toBeCalled();
|
57 |
|
58 | socket.emit('MyOtherEvent', {});
|
59 |
|
60 | expect(l3).toBeCalled();
|
61 | });
|
62 |
|
63 | test('can remove all listeners for an event', () => {
|
64 | const l1 = jest.fn();
|
65 | const l2 = jest.fn();
|
66 | const l3 = jest.fn();
|
67 | channel.listen('MyEvent', l1);
|
68 | channel.listen('MyEvent', l2);
|
69 | channel.listen('MyOtherEvent', l3);
|
70 |
|
71 | channel.stopListening('MyEvent');
|
72 |
|
73 | socket.emit('MyEvent', {});
|
74 |
|
75 | expect(l1).not.toBeCalled();
|
76 | expect(l2).not.toBeCalled();
|
77 | expect(l3).not.toBeCalled();
|
78 |
|
79 | socket.emit('MyOtherEvent', {});
|
80 |
|
81 | expect(l3).toBeCalled();
|
82 | });
|
83 | });
|