@100mslive/hms-video-store 0.2.82 → 0.2.83

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/dist/common/ui-logger.d.ts +13 -13
  2. package/dist/core/IHMSActions.d.ts +266 -264
  3. package/dist/core/IHMSNotifications.d.ts +14 -15
  4. package/dist/core/IHMSStore.d.ts +54 -56
  5. package/dist/core/hmsSDKStore/HMSNotifications.d.ts +25 -25
  6. package/dist/core/hmsSDKStore/HMSPlaylist.d.ts +21 -21
  7. package/dist/core/hmsSDKStore/HMSReactiveStore.d.ts +79 -79
  8. package/dist/core/hmsSDKStore/HMSSDKActions.d.ts +157 -157
  9. package/dist/core/hmsSDKStore/adapter.d.ts +49 -49
  10. package/dist/core/hmsSDKStore/common/mapping.d.ts +7 -7
  11. package/dist/core/hmsSDKStore/internalTypes.d.ts +4 -4
  12. package/dist/core/hmsSDKStore/sdkTypes.d.ts +3 -2
  13. package/dist/core/hmsSDKStore/sdkUtils/ActionBatcher.d.ts +19 -19
  14. package/dist/core/hmsSDKStore/sdkUtils/sdkUtils.d.ts +2 -2
  15. package/dist/core/hmsSDKStore/sdkUtils/storeMergeUtils.d.ts +14 -14
  16. package/dist/core/index.d.ts +9 -7
  17. package/dist/core/schema/device-change.d.ts +13 -13
  18. package/dist/core/schema/error.d.ts +13 -13
  19. package/dist/core/schema/index.d.ts +11 -11
  20. package/dist/core/schema/message.d.ts +31 -31
  21. package/dist/core/schema/notification.d.ts +40 -40
  22. package/dist/core/schema/peer.d.ts +67 -67
  23. package/dist/core/schema/playlist.d.ts +127 -109
  24. package/dist/core/schema/requests.d.ts +31 -31
  25. package/dist/core/schema/role.d.ts +3 -3
  26. package/dist/core/schema/room.d.ts +23 -23
  27. package/dist/core/schema/schema.d.ts +29 -29
  28. package/dist/core/schema/settings.d.ts +5 -5
  29. package/dist/core/selectors/derivedSelectors.d.ts +29 -29
  30. package/dist/core/selectors/index.d.ts +5 -5
  31. package/dist/core/selectors/playlistselectors.d.ts +3 -3
  32. package/dist/core/selectors/selectorUtils.d.ts +18 -18
  33. package/dist/core/selectors/selectors.d.ts +185 -191
  34. package/dist/core/selectors/selectorsByID.d.ts +127 -128
  35. package/dist/core/selectors/selectorsByReference.d.ts +3 -3
  36. package/dist/hms-video-store.cjs.js +1 -0
  37. package/dist/hms-video-store.esm.js +1 -5376
  38. package/dist/index.d.ts +1 -1
  39. package/package.json +21 -84
  40. package/dist/hms-video-store.cjs.development.js +0 -5468
  41. package/dist/hms-video-store.cjs.development.js.map +0 -1
  42. package/dist/hms-video-store.cjs.production.min.js +0 -2
  43. package/dist/hms-video-store.cjs.production.min.js.map +0 -1
  44. package/dist/hms-video-store.esm.js.map +0 -1
  45. package/dist/index.js +0 -8
  46. package/dist/test/fakeStore.d.ts +0 -23
  47. package/dist/test/fixtures.d.ts +0 -3
  48. package/src/common/ui-logger.ts +0 -88
  49. package/src/core/IHMSActions.ts +0 -318
  50. package/src/core/IHMSNotifications.ts +0 -16
  51. package/src/core/IHMSStore.ts +0 -60
  52. package/src/core/hmsSDKStore/HMSNotifications.ts +0 -194
  53. package/src/core/hmsSDKStore/HMSPlaylist.ts +0 -78
  54. package/src/core/hmsSDKStore/HMSReactiveStore.ts +0 -271
  55. package/src/core/hmsSDKStore/HMSSDKActions.ts +0 -1156
  56. package/src/core/hmsSDKStore/adapter.ts +0 -244
  57. package/src/core/hmsSDKStore/common/mapping.ts +0 -32
  58. package/src/core/hmsSDKStore/internalTypes.ts +0 -8
  59. package/src/core/hmsSDKStore/sdkTypes.ts +0 -55
  60. package/src/core/hmsSDKStore/sdkUtils/ActionBatcher.ts +0 -63
  61. package/src/core/hmsSDKStore/sdkUtils/sdkUtils.ts +0 -5
  62. package/src/core/hmsSDKStore/sdkUtils/storeMergeUtils.ts +0 -98
  63. package/src/core/index.ts +0 -18
  64. package/src/core/schema/device-change.ts +0 -14
  65. package/src/core/schema/error.ts +0 -13
  66. package/src/core/schema/index.ts +0 -11
  67. package/src/core/schema/message.ts +0 -35
  68. package/src/core/schema/notification.ts +0 -41
  69. package/src/core/schema/peer.ts +0 -78
  70. package/src/core/schema/playlist.ts +0 -114
  71. package/src/core/schema/requests.ts +0 -36
  72. package/src/core/schema/role.ts +0 -5
  73. package/src/core/schema/room.ts +0 -26
  74. package/src/core/schema/schema.ts +0 -94
  75. package/src/core/schema/settings.ts +0 -5
  76. package/src/core/selectors/derivedSelectors.ts +0 -81
  77. package/src/core/selectors/index.ts +0 -5
  78. package/src/core/selectors/playlistselectors.ts +0 -67
  79. package/src/core/selectors/selectorUtils.ts +0 -63
  80. package/src/core/selectors/selectors.ts +0 -400
  81. package/src/core/selectors/selectorsByID.ts +0 -401
  82. package/src/core/selectors/selectorsByReference.ts +0 -45
  83. package/src/index.ts +0 -1
  84. package/src/test/fakeStore.ts +0 -272
  85. package/src/test/fixtures.ts +0 -22
  86. package/src/test/integration/.gitkeep +0 -0
  87. package/src/test/unit/HMSNotifications.test.ts +0 -123
  88. package/src/test/unit/reactiveStore.test.ts +0 -129
  89. package/src/test/unit/roleSelectors.test.ts +0 -85
  90. package/src/test/unit/selectors.test.ts +0 -316
  91. package/src/test/unit/selectorsByReference.test.ts +0 -27
  92. package/src/test/unit/storeMergeUtils.test.ts +0 -168
@@ -1,272 +0,0 @@
1
- import {
2
- HMSMessageType,
3
- HMSPeer,
4
- HMSRoomState,
5
- HMSSpeaker,
6
- HMSStore,
7
- HMSTrack,
8
- HMSTrackID,
9
- HMSTrackSource,
10
- HMSTrackType,
11
- } from '../core';
12
- import { HMSSimulcastLayer } from '../core/hmsSDKStore/sdkTypes';
13
- import { HMSPlaylist, HMSPlaylistType, HMSRole } from '../core/schema';
14
-
15
- function makeTrack(
16
- id: HMSTrackID,
17
- type: HMSTrackType,
18
- source: HMSTrackSource,
19
- peerId: string,
20
- enabled?: boolean,
21
- ): HMSTrack {
22
- return {
23
- id: id,
24
- source: source,
25
- type: type,
26
- enabled: !!enabled,
27
- displayEnabled: true,
28
- volume: type === 'audio' ? 10 : undefined,
29
- layer: type === 'video' ? HMSSimulcastLayer.HIGH : undefined,
30
- peerId: peerId,
31
- };
32
- }
33
-
34
- export let localPeer: HMSPeer;
35
- export let remotePeerOne: HMSPeer;
36
- export let remotePeerTwo: HMSPeer;
37
- export let peerScreenSharing: HMSPeer;
38
- export let localVideo: HMSTrack;
39
- export let localAudio: HMSTrack;
40
- export let remoteVideo: HMSTrack;
41
- export let screenShare: HMSTrack;
42
- export let auxiliaryAudio: HMSTrack;
43
- export let localSpeaker: HMSSpeaker;
44
- export let screenshareAudio: HMSTrack;
45
- export let hostRole: HMSRole;
46
- export let speakerRole: HMSRole;
47
- export let playlist: HMSPlaylist<any>;
48
-
49
- export const ROLES = {
50
- HOST: 'host', // allowed to turn any of video, audio and screen on. can make a viewer speaker
51
- SPEAKER: 'speaker', // allowed to turn on audio and speak
52
- VIEWER: 'viewer', // allowed to watch and listen to other people, can't publish, can be converted to speaker
53
- NOSUBSCRIBE: 'nosubscribe', // allowed to publish but not subscribe to anything
54
- };
55
-
56
- export const makeFakeStore = (): HMSStore => {
57
- const fakeStore: HMSStore = {
58
- room: {
59
- id: '123',
60
- isConnected: true,
61
- name: 'test room',
62
- peers: ['1', '2', '3'],
63
- localPeer: '1',
64
- shareableLink: '',
65
- hasWaitingRoom: false,
66
- roomState: HMSRoomState.Disconnected,
67
- recording: {
68
- browser: {
69
- running: false,
70
- },
71
- server: {
72
- running: false,
73
- },
74
- },
75
- rtmp: {
76
- running: false,
77
- },
78
- },
79
- peers: {
80
- '1': {
81
- id: '1',
82
- name: 'test1',
83
- roleName: ROLES.HOST,
84
- isLocal: true,
85
- videoTrack: '101',
86
- audioTrack: '102',
87
- auxiliaryTracks: [],
88
- metadata: '{}',
89
- },
90
- '2': {
91
- id: '2',
92
- name: 'test2',
93
- roleName: ROLES.HOST,
94
- isLocal: false,
95
- videoTrack: '103',
96
- audioTrack: '104',
97
- auxiliaryTracks: ['105', '106', '107'],
98
- metadata: '{"hello":"world"}',
99
- },
100
- '3': {
101
- id: '3',
102
- name: 'test3',
103
- roleName: ROLES.SPEAKER,
104
- isLocal: false,
105
- videoTrack: '105',
106
- audioTrack: '106',
107
- auxiliaryTracks: [],
108
- },
109
- },
110
- tracks: {
111
- '101': makeTrack('101', 'video', 'regular', '1'),
112
- '102': makeTrack('102', 'audio', 'regular', '1'),
113
- '103': makeTrack('103', 'video', 'regular', '2'),
114
- '104': makeTrack('104', 'audio', 'regular', '2'),
115
- '105': makeTrack('105', 'video', 'screen', '2'),
116
- '106': makeTrack('106', 'audio', 'regular', '2'),
117
- '107': makeTrack('107', 'audio', 'screen', '2'),
118
- },
119
- playlist: {
120
- audio: {
121
- list: {
122
- audio1: {
123
- url: 'https://test.com/link1',
124
- type: HMSPlaylistType.audio,
125
- name: 'audio1',
126
- id: 'audio1',
127
- playing: true,
128
- selected: true,
129
- },
130
- audio2: {
131
- url: 'https://test.com/link2',
132
- type: HMSPlaylistType.audio,
133
- name: 'audio2',
134
- id: 'audio2',
135
- playing: false,
136
- selected: false,
137
- },
138
- },
139
- selection: { id: 'audio1', hasNext: true, hasPrevious: false },
140
- progress: 20,
141
- volume: 100,
142
- currentTime: 10,
143
- playbackRate: 0.5,
144
- },
145
- video: {
146
- list: {
147
- video1: {
148
- url: 'https://test.com/link1',
149
- type: HMSPlaylistType.audio,
150
- name: 'Video1',
151
- id: 'video1',
152
- playing: true,
153
- selected: true,
154
- },
155
- video2: {
156
- url: 'https://test.com/link2',
157
- type: HMSPlaylistType.audio,
158
- name: 'Video2',
159
- id: 'video2',
160
- playing: false,
161
- selected: false,
162
- },
163
- },
164
- selection: { id: 'video1', hasNext: true, hasPrevious: false },
165
- progress: 30,
166
- volume: 100,
167
- currentTime: 20,
168
- playbackRate: 1.0,
169
- },
170
- },
171
- messages: {
172
- byID: {
173
- '201': {
174
- id: '201',
175
- sender: '1',
176
- senderName: 'test1',
177
- senderRole: ROLES.HOST,
178
- read: true,
179
- type: HMSMessageType.CHAT,
180
- message: 'hello!',
181
- time: new Date(),
182
- },
183
- '202': {
184
- id: '202',
185
- sender: '2',
186
- senderName: 'test2',
187
- senderRole: ROLES.HOST,
188
- recipientPeer: '1',
189
- read: false,
190
- type: HMSMessageType.CHAT,
191
- message: 'hi!',
192
- time: new Date(),
193
- },
194
- '203': {
195
- id: '203',
196
- sender: '2',
197
- senderName: 'test2',
198
- senderRole: ROLES.HOST,
199
- recipientRoles: [ROLES.HOST],
200
- read: true,
201
- type: HMSMessageType.CHAT,
202
- message: 'hi!',
203
- time: new Date(),
204
- },
205
- },
206
- allIDs: ['201', '202', '203'],
207
- },
208
- speakers: {
209
- '102': {
210
- audioLevel: 75,
211
- peerID: '1',
212
- trackID: '102',
213
- },
214
- },
215
- settings: {
216
- audioInputDeviceId: 'testAudioIn',
217
- audioOutputDeviceId: 'testAudioOut',
218
- videoInputDeviceId: 'testVideoIn',
219
- },
220
- roleChangeRequests: [
221
- {
222
- requestedBy: '2',
223
- roleName: 'speaker',
224
- token: '123',
225
- },
226
- ],
227
- roles: {
228
- host: {
229
- name: ROLES.HOST,
230
- publishParams: { allowed: ['audio', 'video', 'screen'] },
231
- subscribeParams: { subscribeToRoles: [ROLES.HOST, ROLES.SPEAKER] },
232
- permissions: { changeRole: true, unmute: true },
233
- } as HMSRole,
234
- viewer: {
235
- name: ROLES.VIEWER,
236
- publishParams: {},
237
- subscribeParams: { subscribeToRoles: [ROLES.HOST, ROLES.SPEAKER] },
238
- } as HMSRole,
239
- speaker: {
240
- name: ROLES.SPEAKER,
241
- publishParams: { allowed: ['audio'] },
242
- subscribeParams: { subscribeToRoles: [ROLES.HOST, ROLES.SPEAKER] },
243
- } as HMSRole,
244
- nosubscribe: {
245
- name: ROLES.NOSUBSCRIBE,
246
- subscribeParams: {},
247
- } as HMSRole,
248
- },
249
- devices: {
250
- audioInput: [],
251
- audioOutput: [],
252
- videoInput: [],
253
- },
254
- errors: [],
255
- };
256
-
257
- localPeer = fakeStore.peers['1'];
258
- remotePeerOne = fakeStore.peers['2'];
259
- remotePeerTwo = fakeStore.peers['3'];
260
- peerScreenSharing = fakeStore.peers['2'];
261
- localVideo = fakeStore.tracks['101'];
262
- localAudio = fakeStore.tracks['102'];
263
- remoteVideo = fakeStore.tracks['103'];
264
- screenShare = fakeStore.tracks['105'];
265
- auxiliaryAudio = fakeStore.tracks['106'];
266
- screenshareAudio = fakeStore.tracks['107'];
267
- localSpeaker = fakeStore.speakers[localPeer.audioTrack!];
268
- hostRole = fakeStore.roles['host'];
269
- speakerRole = fakeStore.roles['speaker'];
270
- playlist = fakeStore.playlist;
271
- return fakeStore;
272
- };
@@ -1,22 +0,0 @@
1
- import { HMSPeer, HMSTrack, HMSTrackType } from '../core';
2
-
3
- let counter = 100;
4
-
5
- export const makeFakeTrack = (type?: HMSTrackType): HMSTrack => {
6
- return {
7
- enabled: false,
8
- id: String(counter++),
9
- type: type || 'video',
10
- };
11
- };
12
-
13
- export const makeFakePeer = (): HMSPeer => {
14
- return {
15
- audioTrack: '',
16
- auxiliaryTracks: [],
17
- id: String(counter++),
18
- isLocal: false,
19
- name: 'test',
20
- videoTrack: '',
21
- };
22
- };
File without changes
@@ -1,123 +0,0 @@
1
- import {
2
- HMSNotificationSeverity,
3
- HMSPeer,
4
- HMSReactiveStore,
5
- HMSStore,
6
- HMSTrack,
7
- HMSException,
8
- } from '../../core';
9
- import {
10
- PEER_NOTIFICATION_TYPES,
11
- TRACK_NOTIFICATION_TYPES,
12
- } from '../../core/hmsSDKStore/common/mapping';
13
- import { HMSNotifications } from '../../core/hmsSDKStore/HMSNotifications';
14
- import * as sdkTypes from '../../core/hmsSDKStore/sdkTypes';
15
- import { makeFakeStore } from '../fakeStore';
16
- import { makeFakePeer, makeFakeTrack } from '../fixtures';
17
-
18
- let notifications: HMSNotifications;
19
- let peer: HMSPeer;
20
- let track: HMSTrack;
21
- let fakeStore: HMSStore;
22
- let cb: jest.Mock;
23
- let unsub: () => void;
24
- beforeEach(() => {
25
- const store = HMSReactiveStore.createNewHMSStore();
26
- notifications = new HMSNotifications(store);
27
- cb = jest.fn(val => val);
28
- unsub = notifications.onNotification(cb);
29
- peer = makeFakePeer();
30
- track = makeFakeTrack();
31
- fakeStore = makeFakeStore();
32
- });
33
-
34
- function makeException(name: string): HMSException {
35
- return {
36
- name: name,
37
- } as HMSException;
38
- }
39
-
40
- describe('hms notifications tests', () => {
41
- test('when unhandled peer event on Notification not to be called', () => {
42
- notifications.sendPeerUpdate(sdkTypes.HMSPeerUpdate.BECAME_DOMINANT_SPEAKER, peer);
43
- expect(cb.mock.calls.length).toBe(0);
44
- });
45
-
46
- test('when peer joined on Notification to be called', () => {
47
- notifications.sendPeerUpdate(sdkTypes.HMSPeerUpdate.PEER_JOINED, peer);
48
- expect(cb.mock.calls.length).toBe(1);
49
- expect(cb.mock.results[0].value.type).toBe(
50
- PEER_NOTIFICATION_TYPES[sdkTypes.HMSPeerUpdate.PEER_JOINED],
51
- );
52
- expect(cb.mock.results[0].value.data).toBe(peer);
53
- expect(cb.mock.results[0].value.severity).toBe(HMSNotificationSeverity.INFO);
54
- });
55
-
56
- test('when peer left on Notification to be called', () => {
57
- notifications.sendPeerUpdate(sdkTypes.HMSPeerUpdate.PEER_LEFT, peer);
58
- expect(cb.mock.calls.length).toBe(1);
59
- expect(cb.mock.results[0].value.type).toBe(
60
- PEER_NOTIFICATION_TYPES[sdkTypes.HMSPeerUpdate.PEER_LEFT],
61
- );
62
- expect(cb.mock.results[0].value.data).toBe(peer);
63
- expect(cb.mock.results[0].value.severity).toBe(HMSNotificationSeverity.INFO);
64
- });
65
-
66
- test('when unhandled track event on Notification not to be called', () => {
67
- notifications.sendTrackUpdate(sdkTypes.HMSTrackUpdate.TRACK_DESCRIPTION_CHANGED, track.id);
68
- expect(cb.mock.calls.length).toBe(0);
69
- });
70
-
71
- test('when track added on Notification to be called', () => {
72
- notifications.sendTrackUpdate(sdkTypes.HMSTrackUpdate.TRACK_ADDED, track.id);
73
- expect(cb.mock.calls.length).toBe(1);
74
- expect(cb.mock.results[0].value.type).toBe(
75
- TRACK_NOTIFICATION_TYPES[sdkTypes.HMSTrackUpdate.TRACK_ADDED],
76
- );
77
- expect(cb.mock.results[0].value.severity).toBe(HMSNotificationSeverity.INFO);
78
- });
79
-
80
- test('when track removed on Notification to be called', () => {
81
- notifications.sendTrackUpdate(sdkTypes.HMSTrackUpdate.TRACK_REMOVED, track.id);
82
- expect(cb.mock.calls.length).toBe(1);
83
- expect(cb.mock.results[0].value.type).toBe(
84
- TRACK_NOTIFICATION_TYPES[sdkTypes.HMSTrackUpdate.TRACK_REMOVED],
85
- );
86
- expect(cb.mock.results[0].value.severity).toBe(HMSNotificationSeverity.INFO);
87
- });
88
-
89
- test('when new message received on Notification to be called', () => {
90
- const message = fakeStore.messages.byID['201'];
91
- notifications.sendMessageReceived(message);
92
- expect(cb.mock.calls.length).toBe(1);
93
- expect(cb.mock.results[0].value.data).toBe(message);
94
- expect(cb.mock.results[0].value.severity).toBe(HMSNotificationSeverity.INFO);
95
- });
96
-
97
- test('when error received on Notification to be called', () => {
98
- const error = makeException('Test');
99
- notifications.sendError(error);
100
- expect(cb.mock.calls.length).toBe(1);
101
- expect(cb.mock.results[0].value.data).toBe(error);
102
- expect(cb.mock.results[0].value.severity).toBe(HMSNotificationSeverity.ERROR);
103
- });
104
-
105
- test('when reconnected received on Notification to be called', () => {
106
- notifications.sendReconnected();
107
- expect(cb.mock.calls.length).toBe(1);
108
- });
109
-
110
- test('when reconnecting received on Notification to be called', () => {
111
- const error = makeException('Test');
112
- notifications.sendReconnecting(error);
113
- expect(cb.mock.calls.length).toBe(1);
114
- expect(cb.mock.results[0].value.data).toBe(error);
115
- expect(cb.mock.results[0].value.severity).toBe(HMSNotificationSeverity.ERROR);
116
- });
117
-
118
- test('when unsubscribed on Notification not to be called', () => {
119
- unsub();
120
- notifications.sendReconnected();
121
- expect(cb.mock.calls.length).toBe(0);
122
- });
123
- });
@@ -1,129 +0,0 @@
1
- import { HMSReactiveStore, HMSStore, IHMSStore, selectLocalPeer, selectPeers } from '../../core';
2
- import { localPeer, makeFakeStore } from '../fakeStore';
3
-
4
- let store: IHMSStore;
5
- let fakeData: HMSStore;
6
- let cb: jest.Mock;
7
- let initialState: HMSStore;
8
-
9
- beforeEach(() => {
10
- store = HMSReactiveStore.createNewHMSStore();
11
- cb = jest.fn(val => val);
12
- fakeData = makeFakeStore();
13
- store.setState(store => {
14
- Object.assign(store, fakeData);
15
- });
16
- initialState = store.getState();
17
- });
18
-
19
- const expectCalls = (n: number) => {
20
- expect(cb.mock.calls.length).toBe(n);
21
- };
22
- const expectOneCall = () => {
23
- expectCalls(1);
24
- };
25
- const expectTwoCalls = () => {
26
- expectCalls(2);
27
- };
28
-
29
- const expectCallArgs = <T>(arg1: T, arg2?: T) => {
30
- expect(cb.mock.calls[0][0]).toBe(arg1);
31
- expect(cb.mock.calls[0][1]).toBe(arg2);
32
- };
33
- const expectCallArgs2 = <T>(arg1: T, arg2?: T) => {
34
- expect(cb.mock.calls[1][0]).toBe(arg1);
35
- expect(cb.mock.calls[1][1]).toBe(arg2);
36
- };
37
-
38
- const doUnrelatedChange = () => {
39
- store.setState(draft => {
40
- draft.room.isConnected = !draft.room.isConnected;
41
- });
42
- };
43
-
44
- describe('test reactive store', () => {
45
- const expectStoreChanged = () => {
46
- expect(store.getState()).not.toBe(initialState);
47
- };
48
-
49
- const expectNoCalls = () => {
50
- expectCalls(0);
51
- };
52
-
53
- test('getState works', () => {
54
- expect(store.getState()).toEqual(fakeData);
55
- });
56
-
57
- it('sends both old and new to subscriber', () => {
58
- store.subscribe(cb, selectLocalPeer);
59
- const oldPeer = store.getState(selectLocalPeer);
60
- store.setState(draft => {
61
- draft.peers[localPeer.id].name = 'test2';
62
- });
63
- const newPeer = store.getState(selectLocalPeer);
64
- expect(newPeer).not.toBe(oldPeer);
65
- expectStoreChanged();
66
- expectOneCall();
67
- expectCallArgs(newPeer, oldPeer);
68
- });
69
-
70
- it('does not notify on no changes or unrelated changes', () => {
71
- store.subscribe(cb, selectLocalPeer);
72
- const oldPeer = store.getState(selectLocalPeer);
73
- store.setState(draft => {
74
- draft.peers[localPeer.id].name = oldPeer.name;
75
- });
76
- doUnrelatedChange();
77
- expectStoreChanged();
78
- const newPeer = store.getState(selectLocalPeer);
79
- expect(newPeer).toBe(oldPeer);
80
- expectNoCalls();
81
- });
82
-
83
- it('does not notify on unrelated changes for derived selectors', () => {
84
- store.subscribe(cb, selectPeers);
85
- doUnrelatedChange();
86
- expectStoreChanged();
87
- expectNoCalls();
88
- });
89
-
90
- it('triggers on listening to whole state without selector', () => {
91
- store.subscribe(cb);
92
- doUnrelatedChange();
93
- expectStoreChanged();
94
- expectOneCall();
95
- });
96
- });
97
-
98
- describe('store with trigger on subscribe', () => {
99
- beforeEach(() => {
100
- HMSReactiveStore.makeStoreTriggerOnSubscribe(store);
101
- });
102
-
103
- it('triggers on subscribe', () => {
104
- store.subscribe(cb, selectLocalPeer);
105
- const peer = store.getState(selectLocalPeer);
106
- expectOneCall();
107
- expectCallArgs(peer);
108
- });
109
-
110
- it('does not trigger again on unrelated change', () => {
111
- store.subscribe(cb, selectLocalPeer);
112
- const peer = store.getState(selectLocalPeer);
113
- doUnrelatedChange();
114
- expectOneCall();
115
- expectCallArgs(peer);
116
- });
117
-
118
- it('triggers on subscribe and a change', () => {
119
- store.subscribe(cb, selectLocalPeer);
120
- const oldPeer = store.getState(selectLocalPeer);
121
- store.setState(draft => {
122
- draft.peers[localPeer.id].name = 'test2';
123
- });
124
- const newPeer = store.getState(selectLocalPeer);
125
- expectTwoCalls();
126
- expectCallArgs(oldPeer);
127
- expectCallArgs2(newPeer, oldPeer);
128
- });
129
- });
@@ -1,85 +0,0 @@
1
- import {
2
- HMSStore,
3
- selectAvailableRoleNames,
4
- selectRolesMap,
5
- selectLocalPeerRole,
6
- selectRoleByRoleName,
7
- selectRoleChangeRequest,
8
- selectIsAllowedToPublish,
9
- selectIsAllowedToSubscribe,
10
- } from '../../core';
11
- import {
12
- hostRole,
13
- localPeer,
14
- makeFakeStore,
15
- remotePeerOne,
16
- ROLES,
17
- speakerRole,
18
- } from '../fakeStore';
19
-
20
- let fakeStore: HMSStore;
21
-
22
- // start from a new fake store for every test
23
- beforeEach(() => {
24
- fakeStore = makeFakeStore();
25
- });
26
-
27
- describe('test role related selectors', () => {
28
- test('select roles', () => {
29
- const storeRoles = selectRolesMap(fakeStore);
30
- expect(storeRoles.host).not.toBeUndefined();
31
- expect(storeRoles.speaker).not.toBeUndefined();
32
- expect(storeRoles.viewer).not.toBeUndefined();
33
- expect(storeRoles.student).toBeUndefined();
34
-
35
- const roleNames = selectAvailableRoleNames(fakeStore);
36
- expect(roleNames).toContain(ROLES.SPEAKER);
37
- expect(roleNames).toContain(ROLES.HOST);
38
- expect(roleNames).toContain(ROLES.VIEWER);
39
- expect(roleNames).not.toContain('student');
40
- });
41
-
42
- test('select local peer role', () => {
43
- expect(selectLocalPeerRole(fakeStore)).toBe(hostRole);
44
- });
45
-
46
- test('selectRole change request', () => {
47
- const req = selectRoleChangeRequest(fakeStore);
48
- expect(req?.requestedBy).toBe(remotePeerOne);
49
- expect(req?.role.name).toBe(ROLES.SPEAKER);
50
- expect(req?.role).toBe(speakerRole);
51
- expect(req?.token).toBe('123');
52
- });
53
-
54
- test('select role by name', () => {
55
- const storeHost = selectRoleByRoleName(ROLES.HOST)(fakeStore);
56
- expect(storeHost).not.toBeUndefined();
57
- expect(storeHost).toBe(hostRole);
58
- });
59
-
60
- test('publish params', () => {
61
- localPeer.roleName = ROLES.SPEAKER;
62
- const allowed = selectIsAllowedToPublish(fakeStore);
63
- expect(allowed.audio).toBe(true);
64
- expect(allowed.video).toBe(false);
65
- expect(allowed.screen).toBe(false);
66
- });
67
-
68
- test('publish params viewer', () => {
69
- localPeer.roleName = ROLES.VIEWER;
70
- const allowed = selectIsAllowedToPublish(fakeStore);
71
- expect(allowed.audio).toBe(false);
72
- expect(allowed.video).toBe(false);
73
- expect(allowed.screen).toBe(false);
74
- });
75
-
76
- test('is subscription allowed true', () => {
77
- localPeer.roleName = ROLES.SPEAKER;
78
- expect(selectIsAllowedToSubscribe(fakeStore)).toBe(true);
79
- });
80
-
81
- test('is subscription allowed false', () => {
82
- localPeer.roleName = ROLES.NOSUBSCRIBE;
83
- expect(selectIsAllowedToSubscribe(fakeStore)).toBe(false);
84
- });
85
- });