@100mslive/hms-video-store 0.2.82-alpha.1 → 0.2.82-alpha.13

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 (55) hide show
  1. package/dist/core/IHMSActions.d.ts +1 -1
  2. package/dist/core/hmsSDKStore/HMSSDKActions.d.ts +1 -1
  3. package/dist/core/hmsSDKStore/sdkTypes.d.ts +3 -3
  4. package/dist/core/index.d.ts +2 -2
  5. package/dist/core/selectors/selectors.d.ts +3 -9
  6. package/dist/core/selectors/selectorsByID.d.ts +1 -1
  7. package/dist/core/selectors/selectorsByReference.d.ts +1 -1
  8. package/dist/hms-video-store.cjs.js +1 -1
  9. package/dist/hms-video-store.esm.js +1 -1
  10. package/package.json +5 -36
  11. package/src/common/ui-logger.ts +0 -88
  12. package/src/core/IHMSActions.ts +0 -317
  13. package/src/core/IHMSNotifications.ts +0 -16
  14. package/src/core/IHMSStore.ts +0 -59
  15. package/src/core/hmsSDKStore/HMSNotifications.ts +0 -170
  16. package/src/core/hmsSDKStore/HMSPlaylist.ts +0 -77
  17. package/src/core/hmsSDKStore/HMSReactiveStore.ts +0 -262
  18. package/src/core/hmsSDKStore/HMSSDKActions.ts +0 -1113
  19. package/src/core/hmsSDKStore/adapter.ts +0 -234
  20. package/src/core/hmsSDKStore/common/mapping.ts +0 -32
  21. package/src/core/hmsSDKStore/internalTypes.ts +0 -8
  22. package/src/core/hmsSDKStore/sdkTypes.ts +0 -51
  23. package/src/core/hmsSDKStore/sdkUtils/ActionBatcher.ts +0 -60
  24. package/src/core/hmsSDKStore/sdkUtils/sdkUtils.ts +0 -5
  25. package/src/core/hmsSDKStore/sdkUtils/storeMergeUtils.ts +0 -95
  26. package/src/core/index.ts +0 -16
  27. package/src/core/schema/device-change.ts +0 -14
  28. package/src/core/schema/error.ts +0 -13
  29. package/src/core/schema/index.ts +0 -11
  30. package/src/core/schema/message.ts +0 -35
  31. package/src/core/schema/notification.ts +0 -41
  32. package/src/core/schema/peer.ts +0 -72
  33. package/src/core/schema/playlist.ts +0 -114
  34. package/src/core/schema/requests.ts +0 -36
  35. package/src/core/schema/role.ts +0 -5
  36. package/src/core/schema/room.ts +0 -26
  37. package/src/core/schema/schema.ts +0 -94
  38. package/src/core/schema/settings.ts +0 -5
  39. package/src/core/selectors/derivedSelectors.ts +0 -75
  40. package/src/core/selectors/index.ts +0 -5
  41. package/src/core/selectors/playlistselectors.ts +0 -71
  42. package/src/core/selectors/selectorUtils.ts +0 -63
  43. package/src/core/selectors/selectors.ts +0 -347
  44. package/src/core/selectors/selectorsByID.ts +0 -370
  45. package/src/core/selectors/selectorsByReference.ts +0 -34
  46. package/src/index.ts +0 -1
  47. package/src/test/fakeStore.ts +0 -272
  48. package/src/test/fixtures.ts +0 -22
  49. package/src/test/integration/.gitkeep +0 -0
  50. package/src/test/unit/HMSNotifications.test.ts +0 -105
  51. package/src/test/unit/reactiveStore.test.ts +0 -129
  52. package/src/test/unit/roleSelectors.test.ts +0 -78
  53. package/src/test/unit/selectors.test.ts +0 -316
  54. package/src/test/unit/selectorsByReference.test.ts +0 -23
  55. package/src/test/unit/storeMergeUtils.test.ts +0 -165
@@ -1,105 +0,0 @@
1
- import { HMSNotificationSeverity, HMSPeer, HMSReactiveStore, HMSStore, HMSTrack, HMSException } from '../../core';
2
- import { PEER_NOTIFICATION_TYPES, TRACK_NOTIFICATION_TYPES } from '../../core/hmsSDKStore/common/mapping';
3
- import { HMSNotifications } from '../../core/hmsSDKStore/HMSNotifications';
4
- import * as sdkTypes from '../../core/hmsSDKStore/sdkTypes';
5
- import { makeFakeStore } from '../fakeStore';
6
- import { makeFakePeer, makeFakeTrack } from '../fixtures';
7
-
8
- let notifications: HMSNotifications;
9
- let peer: HMSPeer;
10
- let track: HMSTrack;
11
- let fakeStore: HMSStore;
12
- let cb: jest.Mock;
13
- let unsub: () => void;
14
- beforeEach(() => {
15
- const store = HMSReactiveStore.createNewHMSStore();
16
- notifications = new HMSNotifications(store);
17
- cb = jest.fn(val => val);
18
- unsub = notifications.onNotification(cb);
19
- peer = makeFakePeer();
20
- track = makeFakeTrack();
21
- fakeStore = makeFakeStore();
22
- });
23
-
24
- function makeException(name: string): HMSException {
25
- return {
26
- name: name,
27
- } as HMSException;
28
- }
29
-
30
- describe('hms notifications tests', () => {
31
- test('when unhandled peer event on Notification not to be called', () => {
32
- notifications.sendPeerUpdate(sdkTypes.HMSPeerUpdate.BECAME_DOMINANT_SPEAKER, peer);
33
- expect(cb.mock.calls.length).toBe(0);
34
- });
35
-
36
- test('when peer joined on Notification to be called', () => {
37
- notifications.sendPeerUpdate(sdkTypes.HMSPeerUpdate.PEER_JOINED, peer);
38
- expect(cb.mock.calls.length).toBe(1);
39
- expect(cb.mock.results[0].value.type).toBe(PEER_NOTIFICATION_TYPES[sdkTypes.HMSPeerUpdate.PEER_JOINED]);
40
- expect(cb.mock.results[0].value.data).toBe(peer);
41
- expect(cb.mock.results[0].value.severity).toBe(HMSNotificationSeverity.INFO);
42
- });
43
-
44
- test('when peer left on Notification to be called', () => {
45
- notifications.sendPeerUpdate(sdkTypes.HMSPeerUpdate.PEER_LEFT, peer);
46
- expect(cb.mock.calls.length).toBe(1);
47
- expect(cb.mock.results[0].value.type).toBe(PEER_NOTIFICATION_TYPES[sdkTypes.HMSPeerUpdate.PEER_LEFT]);
48
- expect(cb.mock.results[0].value.data).toBe(peer);
49
- expect(cb.mock.results[0].value.severity).toBe(HMSNotificationSeverity.INFO);
50
- });
51
-
52
- test('when unhandled track event on Notification not to be called', () => {
53
- notifications.sendTrackUpdate(sdkTypes.HMSTrackUpdate.TRACK_DESCRIPTION_CHANGED, track.id);
54
- expect(cb.mock.calls.length).toBe(0);
55
- });
56
-
57
- test('when track added on Notification to be called', () => {
58
- notifications.sendTrackUpdate(sdkTypes.HMSTrackUpdate.TRACK_ADDED, track.id);
59
- expect(cb.mock.calls.length).toBe(1);
60
- expect(cb.mock.results[0].value.type).toBe(TRACK_NOTIFICATION_TYPES[sdkTypes.HMSTrackUpdate.TRACK_ADDED]);
61
- expect(cb.mock.results[0].value.severity).toBe(HMSNotificationSeverity.INFO);
62
- });
63
-
64
- test('when track removed on Notification to be called', () => {
65
- notifications.sendTrackUpdate(sdkTypes.HMSTrackUpdate.TRACK_REMOVED, track.id);
66
- expect(cb.mock.calls.length).toBe(1);
67
- expect(cb.mock.results[0].value.type).toBe(TRACK_NOTIFICATION_TYPES[sdkTypes.HMSTrackUpdate.TRACK_REMOVED]);
68
- expect(cb.mock.results[0].value.severity).toBe(HMSNotificationSeverity.INFO);
69
- });
70
-
71
- test('when new message received on Notification to be called', () => {
72
- const message = fakeStore.messages.byID['201'];
73
- notifications.sendMessageReceived(message);
74
- expect(cb.mock.calls.length).toBe(1);
75
- expect(cb.mock.results[0].value.data).toBe(message);
76
- expect(cb.mock.results[0].value.severity).toBe(HMSNotificationSeverity.INFO);
77
- });
78
-
79
- test('when error received on Notification to be called', () => {
80
- const error = makeException('Test');
81
- notifications.sendError(error);
82
- expect(cb.mock.calls.length).toBe(1);
83
- expect(cb.mock.results[0].value.data).toBe(error);
84
- expect(cb.mock.results[0].value.severity).toBe(HMSNotificationSeverity.ERROR);
85
- });
86
-
87
- test('when reconnected received on Notification to be called', () => {
88
- notifications.sendReconnected();
89
- expect(cb.mock.calls.length).toBe(1);
90
- });
91
-
92
- test('when reconnecting received on Notification to be called', () => {
93
- const error = makeException('Test');
94
- notifications.sendReconnecting(error);
95
- expect(cb.mock.calls.length).toBe(1);
96
- expect(cb.mock.results[0].value.data).toBe(error);
97
- expect(cb.mock.results[0].value.severity).toBe(HMSNotificationSeverity.ERROR);
98
- });
99
-
100
- test('when unsubscribed on Notification not to be called', () => {
101
- unsub();
102
- notifications.sendReconnected();
103
- expect(cb.mock.calls.length).toBe(0);
104
- });
105
- });
@@ -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,78 +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 { hostRole, localPeer, makeFakeStore, remotePeerOne, ROLES, speakerRole } from '../fakeStore';
12
-
13
- let fakeStore: HMSStore;
14
-
15
- // start from a new fake store for every test
16
- beforeEach(() => {
17
- fakeStore = makeFakeStore();
18
- });
19
-
20
- describe('test role related selectors', () => {
21
- test('select roles', () => {
22
- const storeRoles = selectRolesMap(fakeStore);
23
- expect(storeRoles.host).not.toBeUndefined();
24
- expect(storeRoles.speaker).not.toBeUndefined();
25
- expect(storeRoles.viewer).not.toBeUndefined();
26
- expect(storeRoles.student).toBeUndefined();
27
-
28
- const roleNames = selectAvailableRoleNames(fakeStore);
29
- expect(roleNames).toContain(ROLES.SPEAKER);
30
- expect(roleNames).toContain(ROLES.HOST);
31
- expect(roleNames).toContain(ROLES.VIEWER);
32
- expect(roleNames).not.toContain('student');
33
- });
34
-
35
- test('select local peer role', () => {
36
- expect(selectLocalPeerRole(fakeStore)).toBe(hostRole);
37
- });
38
-
39
- test('selectRole change request', () => {
40
- const req = selectRoleChangeRequest(fakeStore);
41
- expect(req?.requestedBy).toBe(remotePeerOne);
42
- expect(req?.role.name).toBe(ROLES.SPEAKER);
43
- expect(req?.role).toBe(speakerRole);
44
- expect(req?.token).toBe('123');
45
- });
46
-
47
- test('select role by name', () => {
48
- const storeHost = selectRoleByRoleName(ROLES.HOST)(fakeStore);
49
- expect(storeHost).not.toBeUndefined();
50
- expect(storeHost).toBe(hostRole);
51
- });
52
-
53
- test('publish params', () => {
54
- localPeer.roleName = ROLES.SPEAKER;
55
- const allowed = selectIsAllowedToPublish(fakeStore);
56
- expect(allowed.audio).toBe(true);
57
- expect(allowed.video).toBe(false);
58
- expect(allowed.screen).toBe(false);
59
- });
60
-
61
- test('publish params viewer', () => {
62
- localPeer.roleName = ROLES.VIEWER;
63
- const allowed = selectIsAllowedToPublish(fakeStore);
64
- expect(allowed.audio).toBe(false);
65
- expect(allowed.video).toBe(false);
66
- expect(allowed.screen).toBe(false);
67
- });
68
-
69
- test('is subscription allowed true', () => {
70
- localPeer.roleName = ROLES.SPEAKER;
71
- expect(selectIsAllowedToSubscribe(fakeStore)).toBe(true);
72
- });
73
-
74
- test('is subscription allowed false', () => {
75
- localPeer.roleName = ROLES.NOSUBSCRIBE;
76
- expect(selectIsAllowedToSubscribe(fakeStore)).toBe(false);
77
- });
78
- });
@@ -1,316 +0,0 @@
1
- import {
2
- auxiliaryAudio,
3
- hostRole,
4
- localAudio,
5
- localPeer,
6
- localSpeaker,
7
- localVideo,
8
- makeFakeStore,
9
- peerScreenSharing,
10
- remoteVideo,
11
- screenShare,
12
- screenshareAudio,
13
- playlist,
14
- remotePeerTwo,
15
- remotePeerOne,
16
- } from '../fakeStore';
17
- import {
18
- HMSStore,
19
- selectCameraStreamByPeerID,
20
- selectDominantSpeaker,
21
- selectHMSMessages,
22
- selectHMSMessagesCount,
23
- selectIsConnectedToRoom,
24
- selectIsLocalAudioEnabled,
25
- selectIsLocalScreenShared,
26
- selectIsLocalVideoDisplayEnabled,
27
- selectIsLocalVideoEnabled,
28
- selectIsPeerAudioEnabled,
29
- selectIsPeerVideoEnabled,
30
- selectIsSomeoneScreenSharing,
31
- selectLocalAudioTrackID,
32
- selectLocalMediaSettings,
33
- selectLocalPeer,
34
- selectLocalPeerID,
35
- selectLocalVideoTrackID,
36
- selectPeerAudioByID,
37
- selectPeerByID,
38
- selectPeerScreenSharing,
39
- selectPeersScreenSharing,
40
- selectPeersWithAudioStatus,
41
- selectRemotePeers,
42
- selectRoom,
43
- selectAuxiliaryAudioByPeerID,
44
- selectScreenShareByPeerID,
45
- selectSpeakers,
46
- selectUnreadHMSMessagesCount,
47
- selectScreenShareAudioByPeerID,
48
- selectAudioVolumeByPeerID,
49
- selectAudioTrackVolume,
50
- selectIsLocallyMutedByPeerID,
51
- selectIsAudioLocallyMuted,
52
- selectVideoTrackByPeerID,
53
- selectAudioTrackByPeerID,
54
- selectTrackAudioByID,
55
- selectSimulcastLayerByTrack,
56
- selectDegradedTracks,
57
- selectPermissions,
58
- selectRoomState,
59
- HMSRoomState,
60
- selectIsInPreview,
61
- selectRoomStarted,
62
- selectMessagesByPeerID,
63
- selectMessagesByRole,
64
- selectBroadcastMessages,
65
- selectMessagesUnreadCountByRole,
66
- selectBroadcastMessagesUnreadCount,
67
- selectMessagesUnreadCountByPeerID,
68
- selectAudioPlaylist,
69
- selectVideoPlaylist,
70
- selectPeersByRole,
71
- selectPeers,
72
- selectPeerMetadata,
73
- } from '../../core';
74
-
75
- let fakeStore: HMSStore;
76
-
77
- // start from a new fake store for every test
78
- beforeEach(() => {
79
- fakeStore = makeFakeStore();
80
- });
81
- describe('test primitive selectors', () => {
82
- test('selectRoom', () => {
83
- expect(selectRoom(fakeStore)).toBe(fakeStore.room);
84
- });
85
-
86
- test('selectIsConnectedToRoom false', () => {
87
- fakeStore.room.isConnected = false;
88
- expect(selectIsConnectedToRoom(fakeStore)).toBe(false);
89
- });
90
-
91
- test('selectIsConnectedToRoom true', () => {
92
- fakeStore.room.isConnected = true;
93
- expect(selectIsConnectedToRoom(fakeStore)).toBe(true);
94
- });
95
-
96
- test('room state disconnected', () => {
97
- expect(selectRoomState(fakeStore)).toBe(HMSRoomState.Disconnected);
98
- expect(selectIsInPreview(fakeStore)).toBe(false);
99
- expect(selectRoomStarted(fakeStore)).toBe(false);
100
- });
101
-
102
- test('room state preview/connected', () => {
103
- fakeStore.room.roomState = HMSRoomState.Preview;
104
- expect(selectIsInPreview(fakeStore)).toBe(true);
105
- expect(selectRoomStarted(fakeStore)).toBe(true);
106
- });
107
-
108
- test('selectLocal things', () => {
109
- expect(selectLocalMediaSettings(fakeStore)).toBe(fakeStore.settings);
110
- expect(selectLocalPeer(fakeStore)).toBe(localPeer);
111
- expect(selectLocalPeerID(fakeStore)).toBe(localPeer.id);
112
- expect(selectLocalVideoTrackID(fakeStore)).toBe(localPeer.videoTrack);
113
- expect(selectLocalAudioTrackID(fakeStore)).toBe(localPeer.audioTrack);
114
- localAudio.enabled = true;
115
- expect(selectIsLocalAudioEnabled(fakeStore)).toBe(true);
116
- localAudio.enabled = false;
117
- expect(selectIsLocalAudioEnabled(fakeStore)).toBe(false);
118
- localVideo.enabled = true;
119
- expect(selectIsLocalVideoEnabled(fakeStore)).toBe(true);
120
- localVideo.enabled = false;
121
- expect(selectIsLocalVideoEnabled(fakeStore)).toBe(false);
122
- expect(selectIsLocalScreenShared(fakeStore)).toBe(false);
123
- localVideo.displayEnabled = true;
124
- expect(selectIsLocalVideoDisplayEnabled(fakeStore)).toBe(true);
125
- expect(selectPermissions(fakeStore)?.mute).toBe(hostRole.permissions.mute);
126
- expect(selectPermissions(fakeStore)?.unmute).toBe(hostRole.permissions.unmute);
127
- });
128
- });
129
-
130
- describe('secondary selectors', () => {
131
- test('screenshare related', () => {
132
- expect(selectIsSomeoneScreenSharing(fakeStore)).toBe(true);
133
- expect(selectPeerScreenSharing(fakeStore)).toBe(peerScreenSharing);
134
- expect(selectPeersScreenSharing(fakeStore)).toEqual([peerScreenSharing]);
135
- });
136
-
137
- test('messages related', () => {
138
- expect(selectHMSMessagesCount(fakeStore)).toBe(3);
139
- expect(selectUnreadHMSMessagesCount(fakeStore)).toBe(1);
140
- expect(selectHMSMessages(fakeStore)).toEqual([
141
- fakeStore.messages.byID['201'],
142
- fakeStore.messages.byID['202'],
143
- fakeStore.messages.byID['203'],
144
- ]);
145
- });
146
-
147
- test('speakers', () => {
148
- expect(selectSpeakers(fakeStore)).toBe(fakeStore.speakers);
149
- fakeStore.speakers[peerScreenSharing.audioTrack!] = {
150
- audioLevel: 10,
151
- peerID: peerScreenSharing.id,
152
- trackID: peerScreenSharing.audioTrack!,
153
- };
154
- expect(selectDominantSpeaker(fakeStore)).toBe(localPeer);
155
- });
156
-
157
- test('remote peers', () => {
158
- expect(selectRemotePeers(fakeStore)).toEqual([remotePeerOne, remotePeerTwo]);
159
- });
160
-
161
- test('some track degraded', () => {
162
- remoteVideo.degraded = true;
163
- screenShare.degraded = true;
164
- expect(selectDegradedTracks(fakeStore)).toContain(remoteVideo);
165
- expect(selectDegradedTracks(fakeStore)).toContain(screenShare);
166
- });
167
-
168
- test('audio playlist related', () => {
169
- const list = Object.values(playlist.audio.list);
170
- expect(selectAudioPlaylist.list(fakeStore)).toEqual(list);
171
- expect(selectAudioPlaylist.progress(fakeStore)).toBe(20);
172
- expect(selectAudioPlaylist.currentTime(fakeStore)).toBe(10);
173
- expect(selectAudioPlaylist.playbackRate(fakeStore)).toBe(0.5);
174
- expect(selectAudioPlaylist.selection(fakeStore)).toEqual({
175
- id: list[0].id,
176
- hasNext: true,
177
- hasPrevious: false,
178
- });
179
- expect(selectAudioPlaylist.selectedItem(fakeStore)).toEqual(list[0]);
180
- });
181
-
182
- test('video playlist related', () => {
183
- const list = Object.values(playlist.video.list);
184
- expect(selectVideoPlaylist.list(fakeStore)).toEqual(list);
185
- expect(selectVideoPlaylist.progress(fakeStore)).toBe(30);
186
- expect(selectVideoPlaylist.currentTime(fakeStore)).toBe(20);
187
- expect(selectVideoPlaylist.playbackRate(fakeStore)).toBe(1.0);
188
- expect(selectVideoPlaylist.selection(fakeStore)).toEqual({
189
- id: list[0].id,
190
- hasNext: true,
191
- hasPrevious: false,
192
- });
193
- expect(selectVideoPlaylist.selectedItem(fakeStore)).toEqual(list[0]);
194
- });
195
- });
196
-
197
- describe('by ID selectors', () => {
198
- test('select peer by id', () => {
199
- expect(selectPeerByID(localPeer.id)(fakeStore)).toBe(localPeer);
200
- expect(selectPeerByID(peerScreenSharing.id)(fakeStore)).toBe(peerScreenSharing);
201
- });
202
-
203
- test('select peer AV enabled', () => {
204
- localAudio.enabled = false;
205
- localVideo.enabled = true;
206
- expect(selectIsPeerAudioEnabled(localPeer.id)(fakeStore)).toBe(false);
207
- expect(selectIsPeerVideoEnabled(localPeer.id)(fakeStore)).toBe(true);
208
- });
209
-
210
- test('selectVideoTrack', () => {
211
- expect(selectVideoTrackByPeerID(localPeer.id)(fakeStore)).toBe(localVideo);
212
- expect(selectCameraStreamByPeerID(localPeer.id)(fakeStore)).toBe(localVideo);
213
- expect(selectScreenShareByPeerID(peerScreenSharing.id)(fakeStore)).toBe(screenShare);
214
- });
215
-
216
- test('selectAudioTrack', () => {
217
- expect(selectAudioTrackByPeerID(localPeer.id)(fakeStore)).toBe(localAudio);
218
- });
219
-
220
- test('selectAuxiliaryAudio', () => {
221
- expect(selectAuxiliaryAudioByPeerID(peerScreenSharing.id)(fakeStore)).toBe(auxiliaryAudio);
222
- });
223
-
224
- test('selectScreenshareAudio', () => {
225
- expect(selectScreenShareAudioByPeerID(peerScreenSharing.id)(fakeStore)).toBe(screenshareAudio);
226
- });
227
-
228
- test('selectTrackAudioByID', () => {
229
- expect(selectTrackAudioByID(localAudio.id)(fakeStore)).toBe(localSpeaker.audioLevel);
230
- });
231
-
232
- test('selectPeerAudioByID', () => {
233
- expect(selectPeerAudioByID(localPeer.id)(fakeStore)).toBe(localSpeaker.audioLevel);
234
- });
235
-
236
- test('selectAudioVolumeByPeerID', () => {
237
- expect(selectAudioVolumeByPeerID(localPeer.id)(fakeStore)).toBe(localAudio.volume);
238
- });
239
-
240
- test('selectAudioVolumeByTrackID', () => {
241
- expect(selectAudioTrackVolume(localPeer.audioTrack)(fakeStore)).toBe(localAudio.volume);
242
- });
243
-
244
- test('selectLocallyMutedByPeerID', () => {
245
- expect(selectIsLocallyMutedByPeerID(localPeer.id)(fakeStore)).toBe(false);
246
- });
247
-
248
- test('selectLocallyMutedByTrackID', () => {
249
- expect(selectIsAudioLocallyMuted(localPeer.audioTrack)(fakeStore)).toBe(false);
250
- });
251
-
252
- test('selectSimulcastLayerByTrack', () => {
253
- const peer = selectRemotePeers(fakeStore);
254
- const track = selectVideoTrackByPeerID(peer[0].id)(fakeStore);
255
- expect(selectSimulcastLayerByTrack(track?.id)(fakeStore)).toBe(track?.layer);
256
- });
257
-
258
- test('selectMessagesByPeerID', () => {
259
- const peer = selectRemotePeers(fakeStore);
260
- const messages = selectMessagesByPeerID(peer[0].id)(fakeStore);
261
- expect(messages).toEqual([fakeStore.messages.byID['202']]);
262
- });
263
-
264
- test('selectMessagesByRole', () => {
265
- const peer = selectRemotePeers(fakeStore);
266
- const messages = selectMessagesByRole(peer[0].roleName)(fakeStore);
267
- expect(messages).toEqual([fakeStore.messages.byID['203']]);
268
- });
269
-
270
- test('selectBroadcastMessages', () => {
271
- const messages = selectBroadcastMessages(fakeStore);
272
- expect(messages).toEqual([fakeStore.messages.byID['201']]);
273
- });
274
-
275
- test('selectMessagesUnreadCountByRole', () => {
276
- const peer = selectRemotePeers(fakeStore);
277
- const messages = selectMessagesUnreadCountByRole(peer[0].roleName)(fakeStore);
278
- expect(messages).toBe(0);
279
- });
280
-
281
- test('selectMessagesUnreadCountByPeerID', () => {
282
- const peer = selectRemotePeers(fakeStore);
283
- const messages = selectMessagesUnreadCountByPeerID(peer[0].id)(fakeStore);
284
- expect(messages).toBe(1);
285
- });
286
-
287
- test('selectBroadcastMessagesUnreadCount', () => {
288
- const messages = selectBroadcastMessagesUnreadCount(fakeStore);
289
- expect(messages).toBe(0);
290
- });
291
-
292
- test('selectPeersByRole', () => {
293
- expect(selectPeersByRole('speaker')(fakeStore)).toEqual([remotePeerTwo]);
294
- // If role is not present
295
- expect(selectPeersByRole('incognito')(fakeStore)).toEqual([]);
296
- });
297
-
298
- test('selectPeerMetadata', () => {
299
- const peers = selectPeers(fakeStore);
300
- const metadata1 = selectPeerMetadata(peers[0].id)(fakeStore);
301
- expect(metadata1).toEqual({});
302
- const metadata2 = selectPeerMetadata(peers[1].id)(fakeStore);
303
- expect(metadata2).toEqual({ hello: 'world' });
304
- });
305
- });
306
-
307
- describe('derived selectors', () => {
308
- test('select peer with audio status', () => {
309
- localAudio.enabled = true;
310
- expect(selectPeersWithAudioStatus(fakeStore)).toEqual([
311
- { peer: localPeer, isAudioEnabled: true },
312
- { peer: peerScreenSharing, isAudioEnabled: false },
313
- { peer: remotePeerTwo, isAudioEnabled: false },
314
- ]);
315
- });
316
- });
@@ -1,23 +0,0 @@
1
- import { localAudio, localVideo, makeFakeStore } from '../fakeStore';
2
- import { HMSStore, selectIsLocalVideoPluginPresent, selectIsLocalAudioPluginPresent } from '../../core';
3
-
4
- let fakeStore: HMSStore;
5
-
6
- // start from a new fake store for every test
7
- beforeEach(() => {
8
- fakeStore = makeFakeStore();
9
- });
10
- describe('test selectors by reference', () => {
11
- test('select is plugin present', () => {
12
- localVideo.plugins = ['plugin1', 'plugin2'];
13
- localAudio.plugins = ['plugin1', 'plugin2'];
14
-
15
- expect(selectIsLocalVideoPluginPresent('plugin1')(fakeStore)).toBe(true);
16
- expect(selectIsLocalVideoPluginPresent('plugin2')(fakeStore)).toBe(true);
17
- expect(selectIsLocalVideoPluginPresent('plugin3')(fakeStore)).toBe(false);
18
-
19
- expect(selectIsLocalAudioPluginPresent('plugin1')(fakeStore)).toBe(true);
20
- expect(selectIsLocalAudioPluginPresent('plugin2')(fakeStore)).toBe(true);
21
- expect(selectIsLocalAudioPluginPresent('plugin3')(fakeStore)).toBe(false);
22
- });
23
- });