@webex/plugin-meetings 3.0.0-beta.407 → 3.0.0-beta.409
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.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/meeting/index.js +26 -0
- package/dist/meeting/index.js.map +1 -1
- package/dist/webinar/index.js +1 -1
- package/package.json +19 -19
- package/src/meeting/index.ts +28 -0
- package/test/unit/spec/meeting/index.js +141 -88
package/dist/webinar/index.js
CHANGED
|
@@ -62,7 +62,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
62
62
|
updateCanManageWebcast: function updateCanManageWebcast(canManageWebcast) {
|
|
63
63
|
this.set('canManageWebcast', canManageWebcast);
|
|
64
64
|
},
|
|
65
|
-
version: "3.0.0-beta.
|
|
65
|
+
version: "3.0.0-beta.409"
|
|
66
66
|
});
|
|
67
67
|
var _default = Webinar;
|
|
68
68
|
exports.default = _default;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/plugin-meetings",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.409",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
|
|
6
6
|
"contributors": [
|
|
@@ -33,12 +33,12 @@
|
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@peculiar/webcrypto": "^1.4.3",
|
|
36
|
-
"@webex/plugin-meetings": "3.0.0-beta.
|
|
37
|
-
"@webex/test-helper-chai": "3.0.0-beta.
|
|
38
|
-
"@webex/test-helper-mocha": "3.0.0-beta.
|
|
39
|
-
"@webex/test-helper-mock-webex": "3.0.0-beta.
|
|
40
|
-
"@webex/test-helper-retry": "3.0.0-beta.
|
|
41
|
-
"@webex/test-helper-test-users": "3.0.0-beta.
|
|
36
|
+
"@webex/plugin-meetings": "3.0.0-beta.409",
|
|
37
|
+
"@webex/test-helper-chai": "3.0.0-beta.409",
|
|
38
|
+
"@webex/test-helper-mocha": "3.0.0-beta.409",
|
|
39
|
+
"@webex/test-helper-mock-webex": "3.0.0-beta.409",
|
|
40
|
+
"@webex/test-helper-retry": "3.0.0-beta.409",
|
|
41
|
+
"@webex/test-helper-test-users": "3.0.0-beta.409",
|
|
42
42
|
"chai": "^4.3.4",
|
|
43
43
|
"chai-as-promised": "^7.1.1",
|
|
44
44
|
"jsdom-global": "3.0.2",
|
|
@@ -47,19 +47,19 @@
|
|
|
47
47
|
"typescript": "^4.7.4"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@webex/common": "3.0.0-beta.
|
|
50
|
+
"@webex/common": "3.0.0-beta.409",
|
|
51
51
|
"@webex/internal-media-core": "2.3.2",
|
|
52
|
-
"@webex/internal-plugin-conversation": "3.0.0-beta.
|
|
53
|
-
"@webex/internal-plugin-device": "3.0.0-beta.
|
|
54
|
-
"@webex/internal-plugin-llm": "3.0.0-beta.
|
|
55
|
-
"@webex/internal-plugin-mercury": "3.0.0-beta.
|
|
56
|
-
"@webex/internal-plugin-metrics": "3.0.0-beta.
|
|
57
|
-
"@webex/internal-plugin-support": "3.0.0-beta.
|
|
58
|
-
"@webex/internal-plugin-user": "3.0.0-beta.
|
|
59
|
-
"@webex/media-helpers": "3.0.0-beta.
|
|
60
|
-
"@webex/plugin-people": "3.0.0-beta.
|
|
61
|
-
"@webex/plugin-rooms": "3.0.0-beta.
|
|
62
|
-
"@webex/webex-core": "3.0.0-beta.
|
|
52
|
+
"@webex/internal-plugin-conversation": "3.0.0-beta.409",
|
|
53
|
+
"@webex/internal-plugin-device": "3.0.0-beta.409",
|
|
54
|
+
"@webex/internal-plugin-llm": "3.0.0-beta.409",
|
|
55
|
+
"@webex/internal-plugin-mercury": "3.0.0-beta.409",
|
|
56
|
+
"@webex/internal-plugin-metrics": "3.0.0-beta.409",
|
|
57
|
+
"@webex/internal-plugin-support": "3.0.0-beta.409",
|
|
58
|
+
"@webex/internal-plugin-user": "3.0.0-beta.409",
|
|
59
|
+
"@webex/media-helpers": "3.0.0-beta.409",
|
|
60
|
+
"@webex/plugin-people": "3.0.0-beta.409",
|
|
61
|
+
"@webex/plugin-rooms": "3.0.0-beta.409",
|
|
62
|
+
"@webex/webex-core": "3.0.0-beta.409",
|
|
63
63
|
"ampersand-collection": "^2.0.2",
|
|
64
64
|
"bowser": "^2.11.0",
|
|
65
65
|
"btoa": "^1.2.1",
|
package/src/meeting/index.ts
CHANGED
|
@@ -6051,6 +6051,20 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
6051
6051
|
meetingId: this.id,
|
|
6052
6052
|
},
|
|
6053
6053
|
});
|
|
6054
|
+
|
|
6055
|
+
if (data.type === 'share') {
|
|
6056
|
+
// @ts-ignore
|
|
6057
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
6058
|
+
name: 'client.media.render.start',
|
|
6059
|
+
payload: {
|
|
6060
|
+
mediaType: 'share',
|
|
6061
|
+
shareInstanceId: this.remoteShareInstanceId,
|
|
6062
|
+
},
|
|
6063
|
+
options: {
|
|
6064
|
+
meetingId: this.id,
|
|
6065
|
+
},
|
|
6066
|
+
});
|
|
6067
|
+
}
|
|
6054
6068
|
});
|
|
6055
6069
|
this.statsAnalyzer.on(StatsAnalyzerEvents.REMOTE_MEDIA_STOPPED, (data) => {
|
|
6056
6070
|
// @ts-ignore
|
|
@@ -6064,6 +6078,20 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
6064
6078
|
meetingId: this.id,
|
|
6065
6079
|
},
|
|
6066
6080
|
});
|
|
6081
|
+
|
|
6082
|
+
if (data.type === 'share') {
|
|
6083
|
+
// @ts-ignore
|
|
6084
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
6085
|
+
name: 'client.media.render.stop',
|
|
6086
|
+
payload: {
|
|
6087
|
+
mediaType: 'share',
|
|
6088
|
+
shareInstanceId: this.remoteShareInstanceId,
|
|
6089
|
+
},
|
|
6090
|
+
options: {
|
|
6091
|
+
meetingId: this.id,
|
|
6092
|
+
},
|
|
6093
|
+
});
|
|
6094
|
+
}
|
|
6067
6095
|
});
|
|
6068
6096
|
};
|
|
6069
6097
|
|
|
@@ -109,9 +109,7 @@ import CallDiagnosticMetrics from '@webex/internal-plugin-metrics/src/call-diagn
|
|
|
109
109
|
import {ERROR_DESCRIPTIONS} from '@webex/internal-plugin-metrics/src/call-diagnostic/config';
|
|
110
110
|
import MeetingCollection from '@webex/plugin-meetings/src/meetings/collection';
|
|
111
111
|
|
|
112
|
-
import {
|
|
113
|
-
EVENT_TRIGGERS as VOICEAEVENTS,
|
|
114
|
-
} from '@webex/internal-plugin-voicea';
|
|
112
|
+
import {EVENT_TRIGGERS as VOICEAEVENTS} from '@webex/internal-plugin-voicea';
|
|
115
113
|
|
|
116
114
|
describe('plugin-meetings', () => {
|
|
117
115
|
const logger = {
|
|
@@ -686,7 +684,10 @@ describe('plugin-meetings', () => {
|
|
|
686
684
|
});
|
|
687
685
|
|
|
688
686
|
it('should call abortTurnDiscovery() if we do not get a TURN server info', async () => {
|
|
689
|
-
handleTurnDiscoveryHttpResponseStub.resolves({
|
|
687
|
+
handleTurnDiscoveryHttpResponseStub.resolves({
|
|
688
|
+
turnServerInfo: undefined,
|
|
689
|
+
turnDiscoverySkippedReason: 'missing http response',
|
|
690
|
+
});
|
|
690
691
|
|
|
691
692
|
const result = await meeting.joinWithMedia({
|
|
692
693
|
joinOptions,
|
|
@@ -720,7 +721,8 @@ describe('plugin-meetings', () => {
|
|
|
720
721
|
|
|
721
722
|
assert.calledOnceWithExactly(abortTurnDiscoveryStub);
|
|
722
723
|
|
|
723
|
-
assert.calledWith(
|
|
724
|
+
assert.calledWith(
|
|
725
|
+
Metrics.sendBehavioralMetric,
|
|
724
726
|
BEHAVIORAL_METRICS.JOIN_WITH_MEDIA_FAILURE,
|
|
725
727
|
{
|
|
726
728
|
correlation_id: meeting.correlationId,
|
|
@@ -765,7 +767,8 @@ describe('plugin-meetings', () => {
|
|
|
765
767
|
reason: 'joinWithMedia failure',
|
|
766
768
|
});
|
|
767
769
|
|
|
768
|
-
assert.calledWith(
|
|
770
|
+
assert.calledWith(
|
|
771
|
+
Metrics.sendBehavioralMetric,
|
|
769
772
|
BEHAVIORAL_METRICS.JOIN_WITH_MEDIA_FAILURE,
|
|
770
773
|
{
|
|
771
774
|
correlation_id: meeting.correlationId,
|
|
@@ -804,7 +807,7 @@ describe('plugin-meetings', () => {
|
|
|
804
807
|
|
|
805
808
|
it('should subscribe to events for the first time and avoid subscribing for future transcription starts', async () => {
|
|
806
809
|
meeting.joinedWith = {
|
|
807
|
-
state: 'JOINED'
|
|
810
|
+
state: 'JOINED',
|
|
808
811
|
};
|
|
809
812
|
meeting.areVoiceaEventsSetup = false;
|
|
810
813
|
meeting.roles = ['MODERATOR'];
|
|
@@ -814,27 +817,19 @@ describe('plugin-meetings', () => {
|
|
|
814
817
|
assert.equal(webex.internal.voicea.on.callCount, 4);
|
|
815
818
|
assert.equal(meeting.areVoiceaEventsSetup, true);
|
|
816
819
|
assert.equal(webex.internal.voicea.listenToEvents.callCount, 1);
|
|
817
|
-
assert.calledWith(
|
|
818
|
-
webex.internal.voicea.toggleTranscribing,
|
|
819
|
-
true,
|
|
820
|
-
);
|
|
820
|
+
assert.calledWith(webex.internal.voicea.toggleTranscribing, true);
|
|
821
821
|
|
|
822
822
|
await meeting.startTranscription();
|
|
823
823
|
assert.equal(webex.internal.voicea.on.callCount, 4);
|
|
824
824
|
assert.equal(meeting.areVoiceaEventsSetup, true);
|
|
825
825
|
assert.equal(webex.internal.voicea.listenToEvents.callCount, 1);
|
|
826
|
-
assert.calledTwice(
|
|
827
|
-
|
|
828
|
-
);
|
|
829
|
-
assert.calledWith(
|
|
830
|
-
webex.internal.voicea.toggleTranscribing,
|
|
831
|
-
true,
|
|
832
|
-
);
|
|
826
|
+
assert.calledTwice(webex.internal.voicea.toggleTranscribing);
|
|
827
|
+
assert.calledWith(webex.internal.voicea.toggleTranscribing, true);
|
|
833
828
|
});
|
|
834
829
|
|
|
835
830
|
it('should listen to events and not toggleTranscribing if the user is not a host', async () => {
|
|
836
831
|
meeting.joinedWith = {
|
|
837
|
-
state: 'JOINED'
|
|
832
|
+
state: 'JOINED',
|
|
838
833
|
};
|
|
839
834
|
meeting.areVoiceaEventsSetup = false;
|
|
840
835
|
meeting.roles = ['COHOST'];
|
|
@@ -844,9 +839,7 @@ describe('plugin-meetings', () => {
|
|
|
844
839
|
assert.equal(webex.internal.voicea.on.callCount, 4);
|
|
845
840
|
assert.equal(meeting.areVoiceaEventsSetup, true);
|
|
846
841
|
assert.equal(webex.internal.voicea.listenToEvents.callCount, 1);
|
|
847
|
-
assert.notCalled(
|
|
848
|
-
webex.internal.voicea.toggleTranscribing
|
|
849
|
-
);
|
|
842
|
+
assert.notCalled(webex.internal.voicea.toggleTranscribing);
|
|
850
843
|
});
|
|
851
844
|
|
|
852
845
|
it("should throw error if request doesn't work", async () => {
|
|
@@ -887,7 +880,7 @@ describe('plugin-meetings', () => {
|
|
|
887
880
|
describe('#setCaptionLanguage', () => {
|
|
888
881
|
beforeEach(() => {
|
|
889
882
|
meeting.isTranscriptionSupported = sinon.stub();
|
|
890
|
-
meeting.transcription = {
|
|
883
|
+
meeting.transcription = {languageOptions: {}};
|
|
891
884
|
webex.internal.voicea.on = sinon.stub();
|
|
892
885
|
webex.internal.voicea.off = sinon.stub();
|
|
893
886
|
webex.internal.voicea.setCaptionLanguage = sinon.stub();
|
|
@@ -913,23 +906,23 @@ describe('plugin-meetings', () => {
|
|
|
913
906
|
const languageCode = 'fr';
|
|
914
907
|
|
|
915
908
|
meeting.setCaptionLanguage(languageCode).then((resolvedLanguageCode) => {
|
|
916
|
-
assert.calledWith(
|
|
917
|
-
|
|
909
|
+
assert.calledWith(webex.internal.voicea.requestLanguage, languageCode);
|
|
910
|
+
assert.equal(resolvedLanguageCode, languageCode);
|
|
911
|
+
assert.equal(
|
|
912
|
+
meeting.transcription.languageOptions.currentCaptionLanguage,
|
|
918
913
|
languageCode
|
|
919
914
|
);
|
|
920
|
-
assert.equal(resolvedLanguageCode, languageCode);
|
|
921
|
-
assert.equal(meeting.transcription.languageOptions.currentCaptionLanguage, languageCode);
|
|
922
915
|
done();
|
|
923
916
|
});
|
|
924
917
|
|
|
925
918
|
assert.calledOnceWithMatch(
|
|
926
919
|
webex.internal.voicea.on,
|
|
927
|
-
VOICEAEVENTS.CAPTION_LANGUAGE_UPDATE
|
|
920
|
+
VOICEAEVENTS.CAPTION_LANGUAGE_UPDATE
|
|
928
921
|
);
|
|
929
922
|
|
|
930
923
|
// Trigger the event
|
|
931
924
|
const voiceaListenerLangugeUpdate = webex.internal.voicea.on.getCall(0).args[1];
|
|
932
|
-
voiceaListenerLangugeUpdate({
|
|
925
|
+
voiceaListenerLangugeUpdate({statusCode: 200, languageCode});
|
|
933
926
|
});
|
|
934
927
|
|
|
935
928
|
it('should reject if the statusCode in payload is not 200', (done) => {
|
|
@@ -937,8 +930,8 @@ describe('plugin-meetings', () => {
|
|
|
937
930
|
const languageCode = 'fr';
|
|
938
931
|
const rejectPayload = {
|
|
939
932
|
statusCode: 400,
|
|
940
|
-
message: 'some error message'
|
|
941
|
-
}
|
|
933
|
+
message: 'some error message',
|
|
934
|
+
};
|
|
942
935
|
|
|
943
936
|
meeting.setCaptionLanguage(languageCode).catch((payload) => {
|
|
944
937
|
assert.equal(payload, rejectPayload);
|
|
@@ -947,20 +940,19 @@ describe('plugin-meetings', () => {
|
|
|
947
940
|
|
|
948
941
|
assert.calledOnceWithMatch(
|
|
949
942
|
webex.internal.voicea.on,
|
|
950
|
-
VOICEAEVENTS.CAPTION_LANGUAGE_UPDATE
|
|
943
|
+
VOICEAEVENTS.CAPTION_LANGUAGE_UPDATE
|
|
951
944
|
);
|
|
952
945
|
|
|
953
946
|
// Trigger the event
|
|
954
947
|
const voiceaListenerLangugeUpdate = webex.internal.voicea.on.getCall(0).args[1];
|
|
955
948
|
voiceaListenerLangugeUpdate(rejectPayload);
|
|
956
949
|
});
|
|
957
|
-
|
|
958
950
|
});
|
|
959
951
|
|
|
960
952
|
describe('#setSpokenLanguage', () => {
|
|
961
953
|
beforeEach(() => {
|
|
962
954
|
meeting.isTranscriptionSupported = sinon.stub();
|
|
963
|
-
meeting.transcription = {
|
|
955
|
+
meeting.transcription = {languageOptions: {}};
|
|
964
956
|
webex.internal.voicea.on = sinon.stub();
|
|
965
957
|
webex.internal.voicea.off = sinon.stub();
|
|
966
958
|
webex.internal.voicea.setSpokenLanguage = sinon.stub();
|
|
@@ -985,47 +977,37 @@ describe('plugin-meetings', () => {
|
|
|
985
977
|
const languageCode = 'fr';
|
|
986
978
|
|
|
987
979
|
meeting.setSpokenLanguage(languageCode).then((resolvedLanguageCode) => {
|
|
988
|
-
assert.calledWith(
|
|
989
|
-
webex.internal.voicea.setSpokenLanguage,
|
|
990
|
-
languageCode
|
|
991
|
-
);
|
|
980
|
+
assert.calledWith(webex.internal.voicea.setSpokenLanguage, languageCode);
|
|
992
981
|
assert.equal(resolvedLanguageCode, languageCode);
|
|
993
982
|
assert.equal(meeting.transcription.languageOptions.currentSpokenLanguage, languageCode);
|
|
994
983
|
done();
|
|
995
984
|
});
|
|
996
985
|
|
|
997
|
-
assert.calledOnceWithMatch(
|
|
998
|
-
webex.internal.voicea.on,
|
|
999
|
-
VOICEAEVENTS.SPOKEN_LANGUAGE_UPDATE,
|
|
1000
|
-
);
|
|
986
|
+
assert.calledOnceWithMatch(webex.internal.voicea.on, VOICEAEVENTS.SPOKEN_LANGUAGE_UPDATE);
|
|
1001
987
|
|
|
1002
988
|
// Trigger the event
|
|
1003
989
|
const voiceaListenerLangugeUpdate = webex.internal.voicea.on.getCall(0).args[1];
|
|
1004
|
-
voiceaListenerLangugeUpdate({
|
|
990
|
+
voiceaListenerLangugeUpdate({languageCode});
|
|
1005
991
|
});
|
|
1006
992
|
|
|
1007
993
|
it('should reject if the language code does not exist in payload', (done) => {
|
|
1008
994
|
meeting.isTranscriptionSupported.returns(true);
|
|
1009
995
|
const languageCode = 'fr';
|
|
1010
996
|
const rejectPayload = {
|
|
1011
|
-
|
|
1012
|
-
}
|
|
997
|
+
message: 'some error message',
|
|
998
|
+
};
|
|
1013
999
|
|
|
1014
1000
|
meeting.setSpokenLanguage(languageCode).catch((payload) => {
|
|
1015
1001
|
assert.equal(payload, rejectPayload);
|
|
1016
1002
|
done();
|
|
1017
1003
|
});
|
|
1018
1004
|
|
|
1019
|
-
assert.calledOnceWithMatch(
|
|
1020
|
-
webex.internal.voicea.on,
|
|
1021
|
-
VOICEAEVENTS.SPOKEN_LANGUAGE_UPDATE,
|
|
1022
|
-
);
|
|
1005
|
+
assert.calledOnceWithMatch(webex.internal.voicea.on, VOICEAEVENTS.SPOKEN_LANGUAGE_UPDATE);
|
|
1023
1006
|
|
|
1024
1007
|
// Trigger the event
|
|
1025
1008
|
const voiceaListenerLangugeUpdate = webex.internal.voicea.on.getCall(0).args[1];
|
|
1026
1009
|
voiceaListenerLangugeUpdate(rejectPayload);
|
|
1027
1010
|
});
|
|
1028
|
-
|
|
1029
1011
|
});
|
|
1030
1012
|
|
|
1031
1013
|
describe('transcription events', () => {
|
|
@@ -1269,7 +1251,7 @@ describe('plugin-meetings', () => {
|
|
|
1269
1251
|
file: 'meeting/index',
|
|
1270
1252
|
function: 'join',
|
|
1271
1253
|
},
|
|
1272
|
-
EVENT_TRIGGERS.MEETING_TRANSCRIPTION_CONNECTED
|
|
1254
|
+
EVENT_TRIGGERS.MEETING_TRANSCRIPTION_CONNECTED
|
|
1273
1255
|
);
|
|
1274
1256
|
});
|
|
1275
1257
|
|
|
@@ -2640,6 +2622,7 @@ describe('plugin-meetings', () => {
|
|
|
2640
2622
|
|
|
2641
2623
|
beforeEach(async () => {
|
|
2642
2624
|
meeting.meetingState = 'ACTIVE';
|
|
2625
|
+
meeting.remoteShareInstanceId = '1234';
|
|
2643
2626
|
prevConfigValue = meeting.config.stats.enableStatsAnalyzer;
|
|
2644
2627
|
|
|
2645
2628
|
meeting.config.stats.enableStatsAnalyzer = true;
|
|
@@ -2745,6 +2728,66 @@ describe('plugin-meetings', () => {
|
|
|
2745
2728
|
});
|
|
2746
2729
|
});
|
|
2747
2730
|
|
|
2731
|
+
it('REMOTE_MEDIA_STARTED triggers "meeting:media:remote:start" event and sends metrics for share', async () => {
|
|
2732
|
+
statsAnalyzerStub.emit(
|
|
2733
|
+
{file: 'test', function: 'test'},
|
|
2734
|
+
StatsAnalyzerModule.EVENTS.REMOTE_MEDIA_STARTED,
|
|
2735
|
+
{type: 'share'}
|
|
2736
|
+
);
|
|
2737
|
+
|
|
2738
|
+
assert.calledWith(
|
|
2739
|
+
TriggerProxy.trigger,
|
|
2740
|
+
sinon.match.instanceOf(Meeting),
|
|
2741
|
+
{
|
|
2742
|
+
file: 'meeting/index',
|
|
2743
|
+
function: 'addMedia',
|
|
2744
|
+
},
|
|
2745
|
+
EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED,
|
|
2746
|
+
{
|
|
2747
|
+
type: 'share',
|
|
2748
|
+
}
|
|
2749
|
+
);
|
|
2750
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
2751
|
+
name: 'client.media.rx.start',
|
|
2752
|
+
payload: {mediaType: 'share', shareInstanceId: meeting.remoteShareInstanceId},
|
|
2753
|
+
options: {
|
|
2754
|
+
meetingId: meeting.id,
|
|
2755
|
+
},
|
|
2756
|
+
});
|
|
2757
|
+
|
|
2758
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
2759
|
+
name: 'client.media.render.start',
|
|
2760
|
+
payload: {mediaType: 'share', shareInstanceId: meeting.remoteShareInstanceId},
|
|
2761
|
+
options: {
|
|
2762
|
+
meetingId: meeting.id,
|
|
2763
|
+
},
|
|
2764
|
+
});
|
|
2765
|
+
});
|
|
2766
|
+
|
|
2767
|
+
it('REMOTE_MEDIA_STOPPED triggers the right metrics for share', async () => {
|
|
2768
|
+
statsAnalyzerStub.emit(
|
|
2769
|
+
{file: 'test', function: 'test'},
|
|
2770
|
+
StatsAnalyzerModule.EVENTS.REMOTE_MEDIA_STOPPED,
|
|
2771
|
+
{type: 'share'}
|
|
2772
|
+
);
|
|
2773
|
+
|
|
2774
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
2775
|
+
name: 'client.media.rx.stop',
|
|
2776
|
+
payload: {mediaType: 'share', shareInstanceId: meeting.remoteShareInstanceId},
|
|
2777
|
+
options: {
|
|
2778
|
+
meetingId: meeting.id,
|
|
2779
|
+
},
|
|
2780
|
+
});
|
|
2781
|
+
|
|
2782
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
2783
|
+
name: 'client.media.render.stop',
|
|
2784
|
+
payload: {mediaType: 'share', shareInstanceId: meeting.remoteShareInstanceId},
|
|
2785
|
+
options: {
|
|
2786
|
+
meetingId: meeting.id,
|
|
2787
|
+
},
|
|
2788
|
+
});
|
|
2789
|
+
});
|
|
2790
|
+
|
|
2748
2791
|
it('calls submitMQE correctly', async () => {
|
|
2749
2792
|
const fakeData = {intervalMetadata: {bla: 'bla'}};
|
|
2750
2793
|
|
|
@@ -2989,9 +3032,10 @@ describe('plugin-meetings', () => {
|
|
|
2989
3032
|
meeting.setMercuryListener = sinon.stub();
|
|
2990
3033
|
meeting.locusInfo.onFullLocus = sinon.stub();
|
|
2991
3034
|
meeting.webex.meetings.geoHintInfo = {regionCode: 'EU', countryCode: 'UK'};
|
|
2992
|
-
meeting.roap.doTurnDiscovery = sinon
|
|
2993
|
-
|
|
2994
|
-
|
|
3035
|
+
meeting.roap.doTurnDiscovery = sinon.stub().resolves({
|
|
3036
|
+
turnServerInfo: {url: 'turn-url', username: 'turn user', password: 'turn password'},
|
|
3037
|
+
turnDiscoverySkippedReason: 'reachability',
|
|
3038
|
+
});
|
|
2995
3039
|
meeting.deferSDPAnswer = new Defer();
|
|
2996
3040
|
meeting.deferSDPAnswer.resolve();
|
|
2997
3041
|
meeting.webex.meetings.meetingCollection = new MeetingCollection();
|
|
@@ -3268,7 +3312,9 @@ describe('plugin-meetings', () => {
|
|
|
3268
3312
|
switch (type) {
|
|
3269
3313
|
case 'audio':
|
|
3270
3314
|
if (stream?.readyState === 'ended') {
|
|
3271
|
-
assert.notCalled(
|
|
3315
|
+
assert.notCalled(
|
|
3316
|
+
meeting.sendSlotManager.getSlot(MediaType.AudioMain).publishStream
|
|
3317
|
+
);
|
|
3272
3318
|
} else {
|
|
3273
3319
|
assert.calledOnceWithExactly(
|
|
3274
3320
|
meeting.sendSlotManager.getSlot(MediaType.AudioMain).publishStream,
|
|
@@ -6417,7 +6463,7 @@ describe('plugin-meetings', () => {
|
|
|
6417
6463
|
|
|
6418
6464
|
[
|
|
6419
6465
|
{
|
|
6420
|
-
endedStream: 'microphone',
|
|
6466
|
+
endedStream: 'microphone',
|
|
6421
6467
|
streams: {
|
|
6422
6468
|
microphone: {
|
|
6423
6469
|
readyState: 'ended',
|
|
@@ -6430,7 +6476,7 @@ describe('plugin-meetings', () => {
|
|
|
6430
6476
|
},
|
|
6431
6477
|
},
|
|
6432
6478
|
{
|
|
6433
|
-
endedStream: 'camera',
|
|
6479
|
+
endedStream: 'camera',
|
|
6434
6480
|
streams: {
|
|
6435
6481
|
microphone: undefined,
|
|
6436
6482
|
camera: {
|
|
@@ -6443,7 +6489,7 @@ describe('plugin-meetings', () => {
|
|
|
6443
6489
|
},
|
|
6444
6490
|
},
|
|
6445
6491
|
{
|
|
6446
|
-
endedStream: 'screenShare audio',
|
|
6492
|
+
endedStream: 'screenShare audio',
|
|
6447
6493
|
streams: {
|
|
6448
6494
|
microphone: undefined,
|
|
6449
6495
|
camera: undefined,
|
|
@@ -6456,7 +6502,7 @@ describe('plugin-meetings', () => {
|
|
|
6456
6502
|
},
|
|
6457
6503
|
},
|
|
6458
6504
|
{
|
|
6459
|
-
endedStream: 'screenShare video',
|
|
6505
|
+
endedStream: 'screenShare video',
|
|
6460
6506
|
streams: {
|
|
6461
6507
|
microphone: undefined,
|
|
6462
6508
|
camera: undefined,
|
|
@@ -6471,7 +6517,7 @@ describe('plugin-meetings', () => {
|
|
|
6471
6517
|
].forEach(({endedStream, streams}) => {
|
|
6472
6518
|
it(`throws error if readyState of ${endedStream} is ended`, async () => {
|
|
6473
6519
|
assert.isRejected(meeting.publishStreams(streams));
|
|
6474
|
-
})
|
|
6520
|
+
});
|
|
6475
6521
|
});
|
|
6476
6522
|
});
|
|
6477
6523
|
|
|
@@ -9794,9 +9840,16 @@ describe('plugin-meetings', () => {
|
|
|
9794
9840
|
it('check triggerAnnotationInfoEvent event', () => {
|
|
9795
9841
|
TriggerProxy.trigger.reset();
|
|
9796
9842
|
const annotationInfo = {version: '1', policy: 'Approval'};
|
|
9797
|
-
const expectAnnotationInfo = {
|
|
9843
|
+
const expectAnnotationInfo = {
|
|
9844
|
+
annotationInfo,
|
|
9845
|
+
meetingId: meeting.id,
|
|
9846
|
+
resourceType: 'FILE',
|
|
9847
|
+
};
|
|
9798
9848
|
meeting.webex.meetings = {};
|
|
9799
|
-
meeting.triggerAnnotationInfoEvent(
|
|
9849
|
+
meeting.triggerAnnotationInfoEvent(
|
|
9850
|
+
{annotation: annotationInfo, resourceType: 'FILE'},
|
|
9851
|
+
{}
|
|
9852
|
+
);
|
|
9800
9853
|
assert.calledWith(
|
|
9801
9854
|
TriggerProxy.trigger,
|
|
9802
9855
|
{},
|
|
@@ -9838,7 +9891,10 @@ describe('plugin-meetings', () => {
|
|
|
9838
9891
|
);
|
|
9839
9892
|
|
|
9840
9893
|
TriggerProxy.trigger.reset();
|
|
9841
|
-
meeting.triggerAnnotationInfoEvent(null, {
|
|
9894
|
+
meeting.triggerAnnotationInfoEvent(null, {
|
|
9895
|
+
annotation: annotationInfoUpdate,
|
|
9896
|
+
resourceType: 'FILE',
|
|
9897
|
+
});
|
|
9842
9898
|
assert.notCalled(TriggerProxy.trigger);
|
|
9843
9899
|
});
|
|
9844
9900
|
});
|
|
@@ -9863,10 +9919,8 @@ describe('plugin-meetings', () => {
|
|
|
9863
9919
|
};
|
|
9864
9920
|
|
|
9865
9921
|
const SHARE_TYPE = {
|
|
9866
|
-
FILE:
|
|
9867
|
-
|
|
9868
|
-
DESKTOP:
|
|
9869
|
-
'DESKTOP',
|
|
9922
|
+
FILE: 'FILE',
|
|
9923
|
+
DESKTOP: 'DESKTOP',
|
|
9870
9924
|
};
|
|
9871
9925
|
|
|
9872
9926
|
const DEVICE_URL = {
|
|
@@ -9881,7 +9935,7 @@ describe('plugin-meetings', () => {
|
|
|
9881
9935
|
disposition = null,
|
|
9882
9936
|
deviceUrlSharing = null,
|
|
9883
9937
|
annotation = undefined,
|
|
9884
|
-
resourceType = undefined
|
|
9938
|
+
resourceType = undefined
|
|
9885
9939
|
) => ({
|
|
9886
9940
|
beneficiaryId,
|
|
9887
9941
|
disposition,
|
|
@@ -9942,7 +9996,7 @@ describe('plugin-meetings', () => {
|
|
|
9942
9996
|
FLOOR_ACTION.GRANTED,
|
|
9943
9997
|
deviceUrlSharing,
|
|
9944
9998
|
annotation,
|
|
9945
|
-
|
|
9999
|
+
resourceType
|
|
9946
10000
|
);
|
|
9947
10001
|
|
|
9948
10002
|
if (isEqual(newPayload.current, newPayload.previous)) {
|
|
@@ -10003,7 +10057,7 @@ describe('plugin-meetings', () => {
|
|
|
10003
10057
|
url,
|
|
10004
10058
|
shareInstanceId,
|
|
10005
10059
|
annotationInfo: undefined,
|
|
10006
|
-
resourceType: undefined
|
|
10060
|
+
resourceType: undefined,
|
|
10007
10061
|
},
|
|
10008
10062
|
});
|
|
10009
10063
|
}
|
|
@@ -10871,31 +10925,30 @@ describe('plugin-meetings', () => {
|
|
|
10871
10925
|
describe('File Share --> Desktop Share', () => {
|
|
10872
10926
|
it('Scenario #1: remote person A shares file then share desktop', () => {
|
|
10873
10927
|
const data1 = generateData(
|
|
10874
|
-
|
|
10875
|
-
|
|
10876
|
-
|
|
10877
|
-
|
|
10878
|
-
|
|
10879
|
-
|
|
10880
|
-
|
|
10881
|
-
|
|
10882
|
-
|
|
10883
|
-
|
|
10884
|
-
|
|
10885
|
-
|
|
10928
|
+
blankPayload,
|
|
10929
|
+
true,
|
|
10930
|
+
true,
|
|
10931
|
+
USER_IDS.ME,
|
|
10932
|
+
undefined,
|
|
10933
|
+
false,
|
|
10934
|
+
undefined,
|
|
10935
|
+
undefined,
|
|
10936
|
+
undefined,
|
|
10937
|
+
undefined,
|
|
10938
|
+
DEVICE_URL.LOCAL_WEB,
|
|
10939
|
+
SHARE_TYPE.FILE
|
|
10886
10940
|
);
|
|
10887
10941
|
const data2 = generateData(
|
|
10888
|
-
|
|
10889
|
-
|
|
10890
|
-
|
|
10891
|
-
|
|
10892
|
-
|
|
10942
|
+
data1.payload,
|
|
10943
|
+
true,
|
|
10944
|
+
false,
|
|
10945
|
+
USER_IDS.ME,
|
|
10946
|
+
SHARE_TYPE.DESKTOP
|
|
10893
10947
|
);
|
|
10894
10948
|
const data3 = generateData(data2.payload, true, true, USER_IDS.ME);
|
|
10895
10949
|
|
|
10896
10950
|
payloadTestHelper([data1, data2, data3]);
|
|
10897
10951
|
});
|
|
10898
|
-
|
|
10899
10952
|
});
|
|
10900
10953
|
});
|
|
10901
10954
|
});
|