@playkit-js/playkit-js-providers 2.39.1 → 2.39.2
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/CHANGELOG.md +4 -0
- package/dist/playkit-analytics-service.js +2 -0
- package/dist/playkit-analytics-service.js.map +1 -0
- package/dist/playkit-bookmark-service.js +2 -0
- package/dist/playkit-bookmark-service.js.map +1 -0
- package/dist/playkit-ott-provider.js +2 -0
- package/dist/playkit-ott-provider.js.map +1 -0
- package/dist/playkit-ovp-provider.js +2 -0
- package/dist/playkit-ovp-provider.js.map +1 -0
- package/dist/playkit-stats-service.js +2 -0
- package/dist/playkit-stats-service.js.map +1 -0
- package/package.json +1 -1
- package/.babelrc +0 -22
- package/.editorconfig +0 -10
- package/.eslintignore +0 -3
- package/.eslintrc.json +0 -26
- package/.flowconfig +0 -5
- package/.github/ISSUE_TEMPLATE.md +0 -28
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -12
- package/.github/workflows/run_canary_full_flow.yaml +0 -28
- package/.github/workflows/run_prod.yaml +0 -24
- package/.github/workflows/run_tests.yaml +0 -24
- package/.prettierignore +0 -7
- package/.prettierrc +0 -12
- package/docs/configuration.md +0 -225
- package/karma.conf.js +0 -42
- package/src/entities/bumper.js +0 -23
- package/src/entities/drm.js +0 -46
- package/src/entities/entry-list.js +0 -15
- package/src/entities/image-source.js +0 -37
- package/src/entities/media-entry.js +0 -96
- package/src/entities/media-format.js +0 -46
- package/src/entities/media-source.js +0 -70
- package/src/entities/media-sources.js +0 -79
- package/src/entities/playlist.js +0 -37
- package/src/index.html +0 -11
- package/src/k-provider/common/base-provider-parser.js +0 -0
- package/src/k-provider/common/base-provider.js +0 -110
- package/src/k-provider/common/base-service-result.js +0 -57
- package/src/k-provider/common/data-loader-manager.js +0 -115
- package/src/k-provider/common/multi-request-builder.js +0 -112
- package/src/k-provider/common/response-types/kaltura-access-control-message.js +0 -22
- package/src/k-provider/common/response-types/kaltura-drm-playback-plugin-data.js +0 -39
- package/src/k-provider/ott/config.js +0 -22
- package/src/k-provider/ott/index.js +0 -15
- package/src/k-provider/ott/loaders/asset-list-loader.js +0 -68
- package/src/k-provider/ott/loaders/asset-loader.js +0 -69
- package/src/k-provider/ott/loaders/data-loader-manager.js +0 -15
- package/src/k-provider/ott/loaders/session-loader.js +0 -62
- package/src/k-provider/ott/provider-parser.js +0 -282
- package/src/k-provider/ott/provider.js +0 -242
- package/src/k-provider/ott/response-types/kaltura-asset.js +0 -79
- package/src/k-provider/ott/response-types/kaltura-bumper-playback-plugin-data.js +0 -28
- package/src/k-provider/ott/response-types/kaltura-playback-context.js +0 -74
- package/src/k-provider/ott/response-types/kaltura-playback-source.js +0 -63
- package/src/k-provider/ott/response-types/kaltura-rule-action.js +0 -26
- package/src/k-provider/ott/services/asset-service.js +0 -50
- package/src/k-provider/ott/services/bookmark/bookmark-service.js +0 -49
- package/src/k-provider/ott/services/bookmark/index.js +0 -12
- package/src/k-provider/ott/services/ott-service.js +0 -34
- package/src/k-provider/ott/services/user-service.js +0 -32
- package/src/k-provider/ovp/config.js +0 -28
- package/src/k-provider/ovp/external-captions-builder.js +0 -38
- package/src/k-provider/ovp/index.js +0 -13
- package/src/k-provider/ovp/loaders/data-loader-manager.js +0 -17
- package/src/k-provider/ovp/loaders/entry-list-loader.js +0 -69
- package/src/k-provider/ovp/loaders/media-entry-loader.js +0 -84
- package/src/k-provider/ovp/loaders/playlist-loader.js +0 -66
- package/src/k-provider/ovp/loaders/session-loader.js +0 -62
- package/src/k-provider/ovp/loaders/ui-config-loader.js +0 -71
- package/src/k-provider/ovp/play-source-url-builder.js +0 -60
- package/src/k-provider/ovp/provider-parser.js +0 -451
- package/src/k-provider/ovp/provider.js +0 -344
- package/src/k-provider/ovp/regex-action-handler.js +0 -147
- package/src/k-provider/ovp/request-params/base-entry-response-profile.js +0 -29
- package/src/k-provider/ovp/response-types/index.js +0 -18
- package/src/k-provider/ovp/response-types/kaltura-access-control-modify-request-host-regex-action.js +0 -36
- package/src/k-provider/ovp/response-types/kaltura-base-entry-list-response.js +0 -31
- package/src/k-provider/ovp/response-types/kaltura-bumper.js +0 -26
- package/src/k-provider/ovp/response-types/kaltura-flavor-asset.js +0 -109
- package/src/k-provider/ovp/response-types/kaltura-media-entries.js +0 -23
- package/src/k-provider/ovp/response-types/kaltura-media-entry.js +0 -141
- package/src/k-provider/ovp/response-types/kaltura-metadata-list-response.js +0 -23
- package/src/k-provider/ovp/response-types/kaltura-metadata.js +0 -51
- package/src/k-provider/ovp/response-types/kaltura-playback-context.js +0 -96
- package/src/k-provider/ovp/response-types/kaltura-playback-source.js +0 -90
- package/src/k-provider/ovp/response-types/kaltura-playlist.js +0 -35
- package/src/k-provider/ovp/response-types/kaltura-rule-action.js +0 -28
- package/src/k-provider/ovp/response-types/kaltura-ui-conf-response.js +0 -90
- package/src/k-provider/ovp/services/analytics/analytics-service.js +0 -57
- package/src/k-provider/ovp/services/analytics/index.js +0 -12
- package/src/k-provider/ovp/services/base-entry-service.js +0 -76
- package/src/k-provider/ovp/services/meta-data-service.js +0 -30
- package/src/k-provider/ovp/services/ovp-service.js +0 -33
- package/src/k-provider/ovp/services/playlist-service.js +0 -63
- package/src/k-provider/ovp/services/session-service.js +0 -28
- package/src/k-provider/ovp/services/stats/index.js +0 -12
- package/src/k-provider/ovp/services/stats/stats-service.js +0 -33
- package/src/k-provider/ovp/services/ui-conf-service.js +0 -33
- package/src/util/clone.js +0 -23
- package/src/util/error/category.js +0 -12
- package/src/util/error/code.js +0 -79
- package/src/util/error/error.js +0 -48
- package/src/util/error/severity.js +0 -23
- package/src/util/logger.js +0 -108
- package/src/util/param.js +0 -45
- package/src/util/request-builder.js +0 -187
- package/src/util/xml-parser.js +0 -40
- package/test/.eslintrc.json +0 -9
- package/test/setup/karma.js +0 -5
- package/test/setup/load-specs.js +0 -13
- package/test/setup/prepare-test-environment.js +0 -17
- package/test/src/k-provider/ott/be-data.js +0 -3306
- package/test/src/k-provider/ott/media-config-data.js +0 -793
- package/test/src/k-provider/ott/provider-parser.spec.js +0 -30
- package/test/src/k-provider/ott/provider.spec.js +0 -384
- package/test/src/k-provider/ott/services/bookmark-service.spec.js +0 -38
- package/test/src/k-provider/ovp/be-data.js +0 -3932
- package/test/src/k-provider/ovp/external-captions-builder.spec.js +0 -59
- package/test/src/k-provider/ovp/media-config-data.js +0 -1509
- package/test/src/k-provider/ovp/playback-sources-data.js +0 -229
- package/test/src/k-provider/ovp/provider-parser-data.js +0 -142
- package/test/src/k-provider/ovp/provider-parser.spec.js +0 -96
- package/test/src/k-provider/ovp/provider.spec.js +0 -1075
- package/test/src/k-provider/ovp/regex-action-handler-data.js +0 -794
- package/test/src/k-provider/ovp/regex-action-handler.spec.js +0 -93
- package/test/src/k-provider/ovp/services/analytics-service.spec.js +0 -62
- package/test/src/k-provider/ovp/services/stats-service.spec.js +0 -37
- package/test/src/util/param.spec.js +0 -23
- package/webpack.config.js +0 -85
|
@@ -1,1075 +0,0 @@
|
|
|
1
|
-
import OVPProvider from '../../../../src/k-provider/ovp/provider';
|
|
2
|
-
import * as BE_DATA from './be-data';
|
|
3
|
-
import * as MEDIA_CONFIG_DATA from './media-config-data';
|
|
4
|
-
import {MultiRequestResult} from '../../../../src/k-provider/common/multi-request-builder';
|
|
5
|
-
import MultiRequestBuilder from '../../../../src/k-provider/common/multi-request-builder';
|
|
6
|
-
import Error from '../../../../src/util/error/error';
|
|
7
|
-
import OVPConfiguration from '../../../../src/k-provider/ovp/config';
|
|
8
|
-
import OVPMediaEntryLoader from '../../../../src/k-provider/ovp/loaders/media-entry-loader';
|
|
9
|
-
import OVPSessionLoader from '../../../../src/k-provider/ovp/loaders/session-loader';
|
|
10
|
-
|
|
11
|
-
describe('default configuration', () => {
|
|
12
|
-
const partnerId = 1082342;
|
|
13
|
-
const playerVersion = '1.2.3';
|
|
14
|
-
|
|
15
|
-
const defaultConfig = OVPConfiguration.get();
|
|
16
|
-
|
|
17
|
-
beforeEach(() => {
|
|
18
|
-
OVPConfiguration.set(defaultConfig);
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
afterEach(() => {
|
|
22
|
-
OVPConfiguration.set(defaultConfig);
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
it('should use config values if they are set', () => {
|
|
26
|
-
const provider = new OVPProvider(
|
|
27
|
-
{
|
|
28
|
-
partnerId: partnerId,
|
|
29
|
-
env: {
|
|
30
|
-
serviceUrl: '111',
|
|
31
|
-
cdnUrl: '222',
|
|
32
|
-
serviceParams: {
|
|
33
|
-
apiVersion: '333',
|
|
34
|
-
format: 4
|
|
35
|
-
},
|
|
36
|
-
useApiCaptions: false
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
playerVersion
|
|
40
|
-
);
|
|
41
|
-
provider.env.serviceUrl.should.equal('111');
|
|
42
|
-
provider.env.cdnUrl.should.equal('222');
|
|
43
|
-
provider.env.serviceParams.apiVersion.should.equal('333');
|
|
44
|
-
provider.env.serviceParams.format.should.equal(4);
|
|
45
|
-
provider.env.useApiCaptions.should.equal(false);
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
it('should use default values if config values are not set', () => {
|
|
49
|
-
const provider = new OVPProvider({partnerId: partnerId}, playerVersion);
|
|
50
|
-
provider.env.serviceUrl.should.equal(defaultConfig.serviceUrl);
|
|
51
|
-
provider.env.cdnUrl.should.equal(defaultConfig.cdnUrl);
|
|
52
|
-
provider.env.serviceParams.apiVersion.should.equal(defaultConfig.serviceParams.apiVersion);
|
|
53
|
-
provider.env.serviceParams.format.should.equal(defaultConfig.serviceParams.format);
|
|
54
|
-
provider.env.useApiCaptions.should.equal(defaultConfig.useApiCaptions);
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
describe('OVPProvider.partnerId:1082342', function () {
|
|
59
|
-
let provider, sandbox;
|
|
60
|
-
const partnerId = 1082342;
|
|
61
|
-
const playerVersion = '1.2.3';
|
|
62
|
-
beforeEach(() => {
|
|
63
|
-
sandbox = sinon.createSandbox();
|
|
64
|
-
provider = new OVPProvider({partnerId: partnerId}, playerVersion);
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
afterEach(() => {
|
|
68
|
-
sandbox.restore();
|
|
69
|
-
MultiRequestBuilder.prototype.execute.restore();
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
it('should return config without plugins and without drm data', done => {
|
|
73
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
74
|
-
return new Promise(resolve => {
|
|
75
|
-
resolve({response: new MultiRequestResult(BE_DATA.AnonymousMocEntryWithoutUIConfNoDrmData.response)});
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
provider.getMediaConfig({entryId: '1_rsrdfext'}).then(
|
|
79
|
-
mediaConfig => {
|
|
80
|
-
try {
|
|
81
|
-
mediaConfig.should.deep.equal(MEDIA_CONFIG_DATA.NoPluginsNoDrm);
|
|
82
|
-
done();
|
|
83
|
-
} catch (err) {
|
|
84
|
-
done(err);
|
|
85
|
-
}
|
|
86
|
-
},
|
|
87
|
-
err => {
|
|
88
|
-
done(err);
|
|
89
|
-
}
|
|
90
|
-
);
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
it('should apply the request host regex to all source urls', done => {
|
|
94
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
95
|
-
return new Promise(resolve => {
|
|
96
|
-
resolve({response: new MultiRequestResult(BE_DATA.AnonymousMocEntryWithRequestHostRegexAction.response)});
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
provider.getMediaConfig({entryId: '1_rsrdfext'}).then(
|
|
100
|
-
mediaConfig => {
|
|
101
|
-
try {
|
|
102
|
-
mediaConfig.should.deep.equal(MEDIA_CONFIG_DATA.RegexAppliedAllSources);
|
|
103
|
-
done();
|
|
104
|
-
} catch (err) {
|
|
105
|
-
done(err);
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
err => {
|
|
109
|
-
done(err);
|
|
110
|
-
}
|
|
111
|
-
);
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
it('should apply the request host regex only to the playManifest source urls', done => {
|
|
115
|
-
OVPConfiguration.set({replaceHostOnlyManifestUrls: true});
|
|
116
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
117
|
-
return new Promise(resolve => {
|
|
118
|
-
resolve({response: new MultiRequestResult(BE_DATA.AnonymousMocEntryWithRequestHostRegexAction.response)});
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
provider.getMediaConfig({entryId: '1_rsrdfext'}).then(
|
|
122
|
-
mediaConfig => {
|
|
123
|
-
try {
|
|
124
|
-
mediaConfig.should.deep.equal(MEDIA_CONFIG_DATA.RegexAppliedPlayManifestSources);
|
|
125
|
-
done();
|
|
126
|
-
} catch (err) {
|
|
127
|
-
done(err);
|
|
128
|
-
}
|
|
129
|
-
},
|
|
130
|
-
err => {
|
|
131
|
-
done(err);
|
|
132
|
-
}
|
|
133
|
-
);
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
it('should return config with plugins and without drm data', done => {
|
|
137
|
-
provider = new OVPProvider({partnerId: partnerId, uiConfId: 38621471}, playerVersion);
|
|
138
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
139
|
-
return new Promise(resolve => {
|
|
140
|
-
resolve({response: new MultiRequestResult(BE_DATA.EntryWithUIConfNoDrmData.response)});
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
provider.getMediaConfig({entryId: '1_rsrdfext'}).then(
|
|
144
|
-
mediaConfig => {
|
|
145
|
-
try {
|
|
146
|
-
mediaConfig.should.deep.equal(MEDIA_CONFIG_DATA.WithPluginsNoDrm);
|
|
147
|
-
done();
|
|
148
|
-
} catch (err) {
|
|
149
|
-
done(err);
|
|
150
|
-
}
|
|
151
|
-
},
|
|
152
|
-
err => {
|
|
153
|
-
done(err);
|
|
154
|
-
}
|
|
155
|
-
);
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
it('should be able to get media config by referenceId', done => {
|
|
159
|
-
provider = new OVPProvider({partnerId: partnerId, uiConfId: 38621471}, playerVersion);
|
|
160
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
161
|
-
try {
|
|
162
|
-
this.requests[1].params.filter.referenceIdEqual.should.equal('1_rsrdfext');
|
|
163
|
-
done();
|
|
164
|
-
} catch (err) {
|
|
165
|
-
done(err);
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
provider.getMediaConfig({referenceId: '1_rsrdfext'});
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
it('should return config without plugins and without drm data for audio', done => {
|
|
172
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
173
|
-
return new Promise(resolve => {
|
|
174
|
-
resolve({response: new MultiRequestResult(BE_DATA.AudioEntryWithoutPlugins.response)});
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
provider.getMediaConfig({entryId: '0_vyzw3ceu'}).then(
|
|
178
|
-
mediaConfig => {
|
|
179
|
-
try {
|
|
180
|
-
mediaConfig.should.deep.equal(MEDIA_CONFIG_DATA.AudioEntryWithoutPlugins);
|
|
181
|
-
done();
|
|
182
|
-
} catch (err) {
|
|
183
|
-
done(err);
|
|
184
|
-
}
|
|
185
|
-
},
|
|
186
|
-
err => {
|
|
187
|
-
done(err);
|
|
188
|
-
}
|
|
189
|
-
);
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
// currently. the player cannot handle an image (need to add support). So this test is not valid.
|
|
193
|
-
it.skip('should return config without plugins and without drm data for image', done => {
|
|
194
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
195
|
-
return new Promise(resolve => {
|
|
196
|
-
resolve({response: new MultiRequestResult(BE_DATA.ImageEntryWithoutPlugins.response)});
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
provider.getMediaConfig({entryId: '0_vyzw3ceu'}).then(
|
|
200
|
-
mediaConfig => {
|
|
201
|
-
try {
|
|
202
|
-
mediaConfig.should.deep.equal(MEDIA_CONFIG_DATA.ImageEntryWithoutPlugins);
|
|
203
|
-
done();
|
|
204
|
-
} catch (err) {
|
|
205
|
-
done(err);
|
|
206
|
-
}
|
|
207
|
-
},
|
|
208
|
-
err => {
|
|
209
|
-
done(err);
|
|
210
|
-
}
|
|
211
|
-
);
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
it('should return block error for server block response', done => {
|
|
215
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
216
|
-
return new Promise(resolve => {
|
|
217
|
-
resolve({response: new MultiRequestResult(BE_DATA.BlockActionEntry.response)});
|
|
218
|
-
});
|
|
219
|
-
});
|
|
220
|
-
provider.getMediaConfig({entryId: 1234}).then(
|
|
221
|
-
mediaConfig => {
|
|
222
|
-
try {
|
|
223
|
-
throw new Error('no error returned where block action error was expected', mediaConfig);
|
|
224
|
-
} catch (e) {
|
|
225
|
-
done(e);
|
|
226
|
-
}
|
|
227
|
-
},
|
|
228
|
-
err => {
|
|
229
|
-
const expected = {
|
|
230
|
-
severity: 2,
|
|
231
|
-
category: 2,
|
|
232
|
-
code: 2001,
|
|
233
|
-
data: {
|
|
234
|
-
action: {
|
|
235
|
-
type: 1
|
|
236
|
-
},
|
|
237
|
-
messages: [
|
|
238
|
-
{
|
|
239
|
-
message: "Un authorized country\nWe're sorry, this content is only available in certain countries.",
|
|
240
|
-
code: 'COUNTRY_RESTRICTED'
|
|
241
|
-
}
|
|
242
|
-
]
|
|
243
|
-
}
|
|
244
|
-
};
|
|
245
|
-
try {
|
|
246
|
-
err.should.deep.equal(expected);
|
|
247
|
-
done();
|
|
248
|
-
} catch (e) {
|
|
249
|
-
done(e);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
);
|
|
253
|
-
});
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
describe('OVPProvider.partnerId:1068292', function () {
|
|
257
|
-
let provider, sandbox;
|
|
258
|
-
const partnerId = 1068292;
|
|
259
|
-
const ks =
|
|
260
|
-
'NTAwZjViZWZjY2NjNTRkNGEyMjU1MTg4OGE1NmUwNDljZWJkMzk1MXwxMDY4MjkyOzEwNjgyOTI7MTQ5MDE3NjE0NjswOzE0OTAwODk3NDYuMDIyNjswO3ZpZXc6Kix3aWRnZXQ6MTs7';
|
|
261
|
-
const playerVersion = '1.2.3';
|
|
262
|
-
|
|
263
|
-
beforeEach(() => {
|
|
264
|
-
sandbox = sinon.createSandbox();
|
|
265
|
-
provider = new OVPProvider({partnerId: partnerId, ks: ks}, playerVersion);
|
|
266
|
-
});
|
|
267
|
-
|
|
268
|
-
afterEach(() => {
|
|
269
|
-
sandbox.restore();
|
|
270
|
-
MultiRequestBuilder.prototype.execute.restore();
|
|
271
|
-
});
|
|
272
|
-
|
|
273
|
-
it('should return config without plugins with drm data', done => {
|
|
274
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
275
|
-
return new Promise(resolve => {
|
|
276
|
-
resolve({response: new MultiRequestResult(BE_DATA.AnonymousMocEntryWithoutUIConfWithDrmData.response)});
|
|
277
|
-
});
|
|
278
|
-
});
|
|
279
|
-
provider.getMediaConfig({entryId: '1_rwbj3j0a'}).then(
|
|
280
|
-
mediaConfig => {
|
|
281
|
-
try {
|
|
282
|
-
let data = JSON.parse(JSON.stringify(MEDIA_CONFIG_DATA.NoPluginsWithDrm));
|
|
283
|
-
data.session.isAnonymous = false;
|
|
284
|
-
mediaConfig.should.deep.equal(data);
|
|
285
|
-
done();
|
|
286
|
-
} catch (err) {
|
|
287
|
-
done(err);
|
|
288
|
-
}
|
|
289
|
-
},
|
|
290
|
-
err => {
|
|
291
|
-
done(err);
|
|
292
|
-
}
|
|
293
|
-
);
|
|
294
|
-
});
|
|
295
|
-
|
|
296
|
-
it('should return reject when try to get config with wrong entryId', done => {
|
|
297
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
298
|
-
return new Promise((resolve, reject) => {
|
|
299
|
-
const response = new MultiRequestResult(BE_DATA.WrongEntryIDWithoutUIConf.response);
|
|
300
|
-
if (response.success) {
|
|
301
|
-
resolve({
|
|
302
|
-
response
|
|
303
|
-
});
|
|
304
|
-
} else {
|
|
305
|
-
reject(response);
|
|
306
|
-
}
|
|
307
|
-
});
|
|
308
|
-
});
|
|
309
|
-
provider.getMediaConfig({entryId: '1_rwbj3j0affff'}).then(
|
|
310
|
-
mediaConfig => {
|
|
311
|
-
should.fail(mediaConfig);
|
|
312
|
-
},
|
|
313
|
-
err => {
|
|
314
|
-
err.results.should.deep.equal(MEDIA_CONFIG_DATA.entryIDError);
|
|
315
|
-
done();
|
|
316
|
-
}
|
|
317
|
-
);
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
it('should return config with plugins and with drm data', done => {
|
|
321
|
-
provider = new OVPProvider({partnerId: partnerId, ks: ks, uiConfId: 38601981}, playerVersion);
|
|
322
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
323
|
-
return new Promise(resolve => {
|
|
324
|
-
const response = new MultiRequestResult(BE_DATA.EntryWithUIConfWithDrmData.response);
|
|
325
|
-
resolve({
|
|
326
|
-
response
|
|
327
|
-
});
|
|
328
|
-
});
|
|
329
|
-
});
|
|
330
|
-
provider.getMediaConfig({entryId: '1_rwbj3j0a'}).then(
|
|
331
|
-
mediaConfig => {
|
|
332
|
-
try {
|
|
333
|
-
let data = JSON.parse(JSON.stringify(MEDIA_CONFIG_DATA.WithPluginsWithDrm));
|
|
334
|
-
data.session.isAnonymous = false;
|
|
335
|
-
mediaConfig.should.deep.equal(data);
|
|
336
|
-
done();
|
|
337
|
-
} catch (err) {
|
|
338
|
-
done(err);
|
|
339
|
-
}
|
|
340
|
-
},
|
|
341
|
-
err => {
|
|
342
|
-
done(err);
|
|
343
|
-
}
|
|
344
|
-
);
|
|
345
|
-
});
|
|
346
|
-
|
|
347
|
-
it('should return reject when try to get config with wrong uiConf ID', done => {
|
|
348
|
-
provider = new OVPProvider({partnerId: partnerId, ks: ks, uiConfId: 38601981}, playerVersion);
|
|
349
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
350
|
-
return new Promise((resolve, reject) => {
|
|
351
|
-
const response = new MultiRequestResult(BE_DATA.WrongUiConfID.response);
|
|
352
|
-
if (response.success) {
|
|
353
|
-
resolve({
|
|
354
|
-
response
|
|
355
|
-
});
|
|
356
|
-
} else {
|
|
357
|
-
reject(response);
|
|
358
|
-
}
|
|
359
|
-
});
|
|
360
|
-
});
|
|
361
|
-
provider.getMediaConfig({entryId: '1_rwbj3j0a'}).then(
|
|
362
|
-
mediaConfig => {
|
|
363
|
-
should.fail(mediaConfig);
|
|
364
|
-
},
|
|
365
|
-
err => {
|
|
366
|
-
err.results.should.deep.equal(MEDIA_CONFIG_DATA.WrongUiConfID);
|
|
367
|
-
done();
|
|
368
|
-
}
|
|
369
|
-
);
|
|
370
|
-
});
|
|
371
|
-
});
|
|
372
|
-
|
|
373
|
-
describe('OVPProvider.partnerId:0', function () {
|
|
374
|
-
let provider, sandbox;
|
|
375
|
-
const partnerId = 0;
|
|
376
|
-
const ks =
|
|
377
|
-
'djJ8MTY0NTE2MXzvlA0ktfU5h5Q_sBfvomsONiVGDO4zRRaJHvTBmnxd9eGmGQq3yvwzedJ8elff4L85A8hbCNE5rhDZsPMqDBFT_cfr1ytLeTLyEhS_ZjyYzEpZWUxzrsXjvgiSo9np4Y9H1pH6avyV4TpknfDDX20H59wjh3QhpZRn3DLryzgoTQ';
|
|
378
|
-
const playerVersion = '1.2.3';
|
|
379
|
-
|
|
380
|
-
beforeEach(() => {
|
|
381
|
-
sandbox = sinon.createSandbox();
|
|
382
|
-
provider = new OVPProvider({partnerId: partnerId, ks: ks}, playerVersion);
|
|
383
|
-
});
|
|
384
|
-
|
|
385
|
-
afterEach(() => {
|
|
386
|
-
sandbox.restore();
|
|
387
|
-
MultiRequestBuilder.prototype.execute.restore();
|
|
388
|
-
});
|
|
389
|
-
|
|
390
|
-
it('should return entry', done => {
|
|
391
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
392
|
-
return new Promise(resolve => {
|
|
393
|
-
resolve({response: new MultiRequestResult(BE_DATA.Partner0EntryData.response)});
|
|
394
|
-
});
|
|
395
|
-
});
|
|
396
|
-
provider.getMediaConfig({entryId: '0_pi55vv3r'}).then(
|
|
397
|
-
mediaConfig => {
|
|
398
|
-
try {
|
|
399
|
-
let data = JSON.parse(JSON.stringify(MEDIA_CONFIG_DATA.EntryOfPartner0));
|
|
400
|
-
mediaConfig.should.deep.equal(data);
|
|
401
|
-
done();
|
|
402
|
-
} catch (err) {
|
|
403
|
-
done(err);
|
|
404
|
-
}
|
|
405
|
-
},
|
|
406
|
-
err => {
|
|
407
|
-
done(err);
|
|
408
|
-
}
|
|
409
|
-
);
|
|
410
|
-
});
|
|
411
|
-
});
|
|
412
|
-
|
|
413
|
-
describe('getMediaConfig', function () {
|
|
414
|
-
let provider, sandbox;
|
|
415
|
-
const partnerId = 1068292;
|
|
416
|
-
const widgetId = '_123456';
|
|
417
|
-
const ks =
|
|
418
|
-
'NTAwZjViZWZjY2NjNTRkNGEyMjU1MTg4OGE1NmUwNDljZWJkMzk1MXwxMDY4MjkyOzEwNjgyOTI7MTQ5MDE3NjE0NjswOzE0OTAwODk3NDYuMDIyNjswO3ZpZXc6Kix3aWRnZXQ6MTs7';
|
|
419
|
-
const playerVersion = '1.2.3';
|
|
420
|
-
|
|
421
|
-
describe('getMediaConfig with ks', function () {
|
|
422
|
-
beforeEach(() => {
|
|
423
|
-
sandbox = sinon.createSandbox();
|
|
424
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
425
|
-
return new Promise(resolve => {
|
|
426
|
-
resolve({response: new MultiRequestResult(BE_DATA.AnonymousMocEntryWithoutUIConfWithDrmData.response)});
|
|
427
|
-
});
|
|
428
|
-
});
|
|
429
|
-
});
|
|
430
|
-
|
|
431
|
-
afterEach(() => {
|
|
432
|
-
sandbox.restore();
|
|
433
|
-
MultiRequestBuilder.prototype.execute.restore();
|
|
434
|
-
});
|
|
435
|
-
|
|
436
|
-
it('should set anonymous to false when given a KS', done => {
|
|
437
|
-
provider = new OVPProvider({partnerId: partnerId}, playerVersion);
|
|
438
|
-
provider.getMediaConfig({entryId: '1_rwbj3j0a', ks: ks}).then(
|
|
439
|
-
mediaConfig => {
|
|
440
|
-
try {
|
|
441
|
-
mediaConfig.session.isAnonymous.should.be.false;
|
|
442
|
-
done();
|
|
443
|
-
} catch (err) {
|
|
444
|
-
done(err);
|
|
445
|
-
}
|
|
446
|
-
},
|
|
447
|
-
err => {
|
|
448
|
-
done(err);
|
|
449
|
-
}
|
|
450
|
-
);
|
|
451
|
-
});
|
|
452
|
-
|
|
453
|
-
it('should use the response KS on request with widgetId', done => {
|
|
454
|
-
provider = new OVPProvider({partnerId, widgetId}, playerVersion);
|
|
455
|
-
provider.getMediaConfig({entryId: '1_rwbj3j0a', ks: ks}).then(
|
|
456
|
-
() => {
|
|
457
|
-
try {
|
|
458
|
-
provider.ks.should.equal(ks);
|
|
459
|
-
done();
|
|
460
|
-
} catch (err) {
|
|
461
|
-
done(err);
|
|
462
|
-
}
|
|
463
|
-
},
|
|
464
|
-
err => {
|
|
465
|
-
done(err);
|
|
466
|
-
}
|
|
467
|
-
);
|
|
468
|
-
});
|
|
469
|
-
});
|
|
470
|
-
|
|
471
|
-
describe('getMediaConfig without ks', function () {
|
|
472
|
-
beforeEach(() => {
|
|
473
|
-
sandbox = sinon.createSandbox();
|
|
474
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
475
|
-
return new Promise(resolve => {
|
|
476
|
-
resolve({response: new MultiRequestResult(BE_DATA.AnonymousMocEntryWithoutUIConfNoDrmData.response)});
|
|
477
|
-
});
|
|
478
|
-
});
|
|
479
|
-
});
|
|
480
|
-
|
|
481
|
-
afterEach(() => {
|
|
482
|
-
sandbox.restore();
|
|
483
|
-
MultiRequestBuilder.prototype.execute.restore();
|
|
484
|
-
});
|
|
485
|
-
|
|
486
|
-
it('should pass widgetId to the session loader', done => {
|
|
487
|
-
provider = new OVPProvider({partnerId, widgetId}, playerVersion);
|
|
488
|
-
provider.getMediaConfig({entryId: '1_rwbj3j0a'}).then(
|
|
489
|
-
() => {
|
|
490
|
-
try {
|
|
491
|
-
provider._dataLoader._loaders.get('session')._widgetId.should.equal('_123456');
|
|
492
|
-
done();
|
|
493
|
-
} catch (err) {
|
|
494
|
-
done(err);
|
|
495
|
-
}
|
|
496
|
-
},
|
|
497
|
-
err => {
|
|
498
|
-
done(err);
|
|
499
|
-
}
|
|
500
|
-
);
|
|
501
|
-
});
|
|
502
|
-
|
|
503
|
-
it('should set anonymous to false when given a widgetId', done => {
|
|
504
|
-
provider = new OVPProvider({partnerId, widgetId}, playerVersion);
|
|
505
|
-
provider.getMediaConfig({entryId: '1_rwbj3j0a'}).then(
|
|
506
|
-
() => {
|
|
507
|
-
try {
|
|
508
|
-
provider._isAnonymous.should.be.false;
|
|
509
|
-
done();
|
|
510
|
-
} catch (err) {
|
|
511
|
-
done(err);
|
|
512
|
-
}
|
|
513
|
-
},
|
|
514
|
-
err => {
|
|
515
|
-
done(err);
|
|
516
|
-
}
|
|
517
|
-
);
|
|
518
|
-
});
|
|
519
|
-
|
|
520
|
-
it('should pass _partnerId to the session loader', done => {
|
|
521
|
-
provider = new OVPProvider({partnerId}, playerVersion);
|
|
522
|
-
provider.getMediaConfig({entryId: '1_rwbj3j0a'}).then(
|
|
523
|
-
() => {
|
|
524
|
-
try {
|
|
525
|
-
provider._dataLoader._loaders.get('session')._widgetId.should.equal('_1068292');
|
|
526
|
-
done();
|
|
527
|
-
} catch (err) {
|
|
528
|
-
done(err);
|
|
529
|
-
}
|
|
530
|
-
},
|
|
531
|
-
err => {
|
|
532
|
-
done(err);
|
|
533
|
-
}
|
|
534
|
-
);
|
|
535
|
-
});
|
|
536
|
-
|
|
537
|
-
it('should use the response KS on request with widgetId', done => {
|
|
538
|
-
provider = new OVPProvider({partnerId, widgetId}, playerVersion);
|
|
539
|
-
provider.getMediaConfig({entryId: '1_rwbj3j0a'}).then(
|
|
540
|
-
() => {
|
|
541
|
-
try {
|
|
542
|
-
provider.ks.should.equal(BE_DATA.AnonymousMocEntryWithoutUIConfNoDrmData.response[0].ks);
|
|
543
|
-
done();
|
|
544
|
-
} catch (err) {
|
|
545
|
-
done(err);
|
|
546
|
-
}
|
|
547
|
-
},
|
|
548
|
-
err => {
|
|
549
|
-
done(err);
|
|
550
|
-
}
|
|
551
|
-
);
|
|
552
|
-
});
|
|
553
|
-
});
|
|
554
|
-
|
|
555
|
-
describe('getMediaConfig status check', function () {
|
|
556
|
-
afterEach(() => {
|
|
557
|
-
MultiRequestBuilder.prototype.execute.restore();
|
|
558
|
-
});
|
|
559
|
-
it('should request entryId with status in import', done => {
|
|
560
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
561
|
-
return new Promise(resolve => {
|
|
562
|
-
resolve({response: new MultiRequestResult(BE_DATA.EntryInImport.response)});
|
|
563
|
-
});
|
|
564
|
-
});
|
|
565
|
-
provider = new OVPProvider({partnerId: 2506752}, playerVersion);
|
|
566
|
-
provider.getMediaConfig({entryId: '0_fknc1xml'}).catch(err => {
|
|
567
|
-
try {
|
|
568
|
-
err.severity.should.equal(Error.Severity.CRITICAL);
|
|
569
|
-
err.code.should.equal(Error.Code.MEDIA_STATUS_NOT_READY);
|
|
570
|
-
done();
|
|
571
|
-
} catch (e) {
|
|
572
|
-
done(e);
|
|
573
|
-
}
|
|
574
|
-
});
|
|
575
|
-
});
|
|
576
|
-
it('should request entryId with status in preconvert', done => {
|
|
577
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
578
|
-
return new Promise(resolve => {
|
|
579
|
-
resolve({response: new MultiRequestResult(BE_DATA.EntryInPreConvert.response)});
|
|
580
|
-
});
|
|
581
|
-
});
|
|
582
|
-
provider = new OVPProvider({partnerId: 2506752}, playerVersion);
|
|
583
|
-
provider.getMediaConfig({entryId: '0_fknc1xml'}).catch(err => {
|
|
584
|
-
try {
|
|
585
|
-
err.severity.should.equal(Error.Severity.CRITICAL);
|
|
586
|
-
err.code.should.equal(Error.Code.MEDIA_STATUS_NOT_READY);
|
|
587
|
-
done();
|
|
588
|
-
} catch (e) {
|
|
589
|
-
done(e);
|
|
590
|
-
}
|
|
591
|
-
});
|
|
592
|
-
});
|
|
593
|
-
it('should request entryId with status ready', done => {
|
|
594
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
595
|
-
return new Promise(resolve => {
|
|
596
|
-
resolve({response: new MultiRequestResult(BE_DATA.EntryInReady.response)});
|
|
597
|
-
});
|
|
598
|
-
});
|
|
599
|
-
provider = new OVPProvider({partnerId: 2506752}, playerVersion);
|
|
600
|
-
provider.getMediaConfig({entryId: '0_yp010l8a'}).then(() => {
|
|
601
|
-
done();
|
|
602
|
-
});
|
|
603
|
-
});
|
|
604
|
-
});
|
|
605
|
-
|
|
606
|
-
describe('getMediaConfig with bumper', function () {
|
|
607
|
-
let provider, sandbox;
|
|
608
|
-
const partnerId = 1091;
|
|
609
|
-
const ks =
|
|
610
|
-
'YmMzNzUyZWM4ZmVkYjRiMzRlOTBlYTZjMGY2YTI1NzRkZDUwZjZjNnwxMDkxOzEwOTE7MTYwNTcyMjI5NDsyOzE2MDU2MzU4OTQuMTA0MzthdmkuYmFydWNoQGthbHR1cmEuY29tOyosZGlzYWJsZWVudGl0bGVtZW50Ozs';
|
|
611
|
-
const playerVersion = '1.2.3';
|
|
612
|
-
|
|
613
|
-
beforeEach(() => {
|
|
614
|
-
sandbox = sinon.createSandbox();
|
|
615
|
-
});
|
|
616
|
-
|
|
617
|
-
afterEach(() => {
|
|
618
|
-
sandbox.restore();
|
|
619
|
-
MultiRequestBuilder.prototype.execute.restore();
|
|
620
|
-
});
|
|
621
|
-
|
|
622
|
-
it('should set the bumper plugin with no ks', done => {
|
|
623
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
624
|
-
return new Promise(resolve => {
|
|
625
|
-
resolve({response: new MultiRequestResult(BE_DATA.EntryWithBumper.response)});
|
|
626
|
-
});
|
|
627
|
-
});
|
|
628
|
-
provider = new OVPProvider({partnerId: partnerId}, playerVersion);
|
|
629
|
-
provider.getMediaConfig({entryId: '0_wifqaipd'}).then(
|
|
630
|
-
mediaConfig => {
|
|
631
|
-
try {
|
|
632
|
-
mediaConfig.should.deep.equal(MEDIA_CONFIG_DATA.EntryWithBumper);
|
|
633
|
-
done();
|
|
634
|
-
} catch (err) {
|
|
635
|
-
done(err);
|
|
636
|
-
}
|
|
637
|
-
},
|
|
638
|
-
err => {
|
|
639
|
-
done(err);
|
|
640
|
-
}
|
|
641
|
-
);
|
|
642
|
-
});
|
|
643
|
-
|
|
644
|
-
it('should set the bumper plugin with ks', done => {
|
|
645
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
646
|
-
return new Promise(resolve => {
|
|
647
|
-
resolve({response: new MultiRequestResult(BE_DATA.EntryWithBumperWithKs.response)});
|
|
648
|
-
});
|
|
649
|
-
});
|
|
650
|
-
provider = new OVPProvider({partnerId: partnerId}, playerVersion);
|
|
651
|
-
provider.getMediaConfig({entryId: '0_wifqaipd', ks}).then(
|
|
652
|
-
mediaConfig => {
|
|
653
|
-
try {
|
|
654
|
-
mediaConfig.should.deep.equal(MEDIA_CONFIG_DATA.EntryWithBumperWithKs);
|
|
655
|
-
done();
|
|
656
|
-
} catch (err) {
|
|
657
|
-
done(err);
|
|
658
|
-
}
|
|
659
|
-
},
|
|
660
|
-
err => {
|
|
661
|
-
done(err);
|
|
662
|
-
}
|
|
663
|
-
);
|
|
664
|
-
});
|
|
665
|
-
|
|
666
|
-
it('should not set the bumper plugin when no sources given', done => {
|
|
667
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
668
|
-
return new Promise(resolve => {
|
|
669
|
-
resolve({response: new MultiRequestResult(BE_DATA.EntryWithBumperWitNoSources.response)});
|
|
670
|
-
});
|
|
671
|
-
});
|
|
672
|
-
provider = new OVPProvider({partnerId: partnerId}, playerVersion);
|
|
673
|
-
provider.getMediaConfig({entryId: '0_wifqaipd', ks}).then(
|
|
674
|
-
mediaConfig => {
|
|
675
|
-
try {
|
|
676
|
-
mediaConfig.should.deep.equal(MEDIA_CONFIG_DATA.EntryWithNoBumper);
|
|
677
|
-
done();
|
|
678
|
-
} catch (err) {
|
|
679
|
-
done(err);
|
|
680
|
-
}
|
|
681
|
-
},
|
|
682
|
-
err => {
|
|
683
|
-
done(err);
|
|
684
|
-
}
|
|
685
|
-
);
|
|
686
|
-
});
|
|
687
|
-
});
|
|
688
|
-
});
|
|
689
|
-
|
|
690
|
-
describe('getPlaylistConfig', function () {
|
|
691
|
-
let provider, sandbox;
|
|
692
|
-
const partnerId = 1091;
|
|
693
|
-
const ks = 'MDlkOTIzMzRhZmM4MmJmNTIwYzZkYzZhMzc0ZTRiNWI1NTRiZjNhM3wxMDkxOzEwOTE7MTU0NDc5NzcyMjswOzE1NDQ3MTEzMjIuODk2MTswO3ZpZXc6Kix3aWRnZXQ6MTs7';
|
|
694
|
-
const playerVersion = '1.2.3';
|
|
695
|
-
|
|
696
|
-
beforeEach(() => {
|
|
697
|
-
sandbox = sinon.createSandbox();
|
|
698
|
-
provider = new OVPProvider({partnerId}, playerVersion);
|
|
699
|
-
});
|
|
700
|
-
|
|
701
|
-
afterEach(() => {
|
|
702
|
-
sandbox.restore();
|
|
703
|
-
MultiRequestBuilder.prototype.execute.restore();
|
|
704
|
-
});
|
|
705
|
-
|
|
706
|
-
it('should load a playlist by id - anonymous', done => {
|
|
707
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
708
|
-
return new Promise(resolve => {
|
|
709
|
-
resolve({response: new MultiRequestResult(BE_DATA.AnonymousPlaylistById.response)});
|
|
710
|
-
});
|
|
711
|
-
});
|
|
712
|
-
provider.getPlaylistConfig({playlistId: '0_wckoqjnn'}).then(
|
|
713
|
-
playlistConfig => {
|
|
714
|
-
try {
|
|
715
|
-
playlistConfig.id.should.equal('0_wckoqjnn');
|
|
716
|
-
playlistConfig.items.length.should.equal(8);
|
|
717
|
-
playlistConfig.metadata.name.should.equal('Playlist_VOD_Only');
|
|
718
|
-
playlistConfig.metadata.description.should.equal('Playlist_VOD_Only_desc');
|
|
719
|
-
playlistConfig.poster.should.equal('http://cdntesting.qa.mkaltura.com/p/1091/sp/0/thumbnail/entry_id/0_wckoqjnn/version/100162');
|
|
720
|
-
done();
|
|
721
|
-
} catch (err) {
|
|
722
|
-
done(err);
|
|
723
|
-
}
|
|
724
|
-
},
|
|
725
|
-
err => {
|
|
726
|
-
done(err);
|
|
727
|
-
}
|
|
728
|
-
);
|
|
729
|
-
});
|
|
730
|
-
|
|
731
|
-
it('should load a playlist by id - with KS', done => {
|
|
732
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
733
|
-
return new Promise(resolve => {
|
|
734
|
-
resolve({response: new MultiRequestResult(BE_DATA.PlaylistById.response)});
|
|
735
|
-
});
|
|
736
|
-
});
|
|
737
|
-
provider.getPlaylistConfig({playlistId: '0_wckoqjnn', ks}).then(
|
|
738
|
-
playlistConfig => {
|
|
739
|
-
try {
|
|
740
|
-
playlistConfig.id.should.equal('0_wckoqjnn');
|
|
741
|
-
playlistConfig.items.length.should.equal(8);
|
|
742
|
-
playlistConfig.metadata.name.should.equal('Playlist_VOD_Only');
|
|
743
|
-
playlistConfig.metadata.description.should.equal('Playlist_VOD_Only_desc');
|
|
744
|
-
playlistConfig.poster.should.equal('http://cdntesting.qa.mkaltura.com/p/1091/sp/0/thumbnail/entry_id/0_wckoqjnn/version/100162');
|
|
745
|
-
done();
|
|
746
|
-
} catch (err) {
|
|
747
|
-
done(err);
|
|
748
|
-
}
|
|
749
|
-
},
|
|
750
|
-
err => {
|
|
751
|
-
done(err);
|
|
752
|
-
}
|
|
753
|
-
);
|
|
754
|
-
});
|
|
755
|
-
});
|
|
756
|
-
|
|
757
|
-
describe('getEntryListConfig', function () {
|
|
758
|
-
let provider, sandbox;
|
|
759
|
-
const partnerId = 1091;
|
|
760
|
-
const ks = 'MGVjMWI2ZDRkNmUwNTU4ODk5MWQyZmU4NzZlMmU4OGJjYzI5OTFmYnwxMDkxOzEwOTE7MTU0NDc5NDg4NzswOzE1NDQ3MDg0ODcuOTY1OTswO3ZpZXc6Kix3aWRnZXQ6MTs7';
|
|
761
|
-
const playerVersion = '1.2.3';
|
|
762
|
-
|
|
763
|
-
beforeEach(() => {
|
|
764
|
-
sandbox = sinon.createSandbox();
|
|
765
|
-
provider = new OVPProvider({partnerId: partnerId}, playerVersion);
|
|
766
|
-
});
|
|
767
|
-
|
|
768
|
-
afterEach(() => {
|
|
769
|
-
sandbox.restore();
|
|
770
|
-
MultiRequestBuilder.prototype.execute.restore();
|
|
771
|
-
});
|
|
772
|
-
|
|
773
|
-
it('should load a playlist by entry list - anonymous', done => {
|
|
774
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
775
|
-
return new Promise(resolve => {
|
|
776
|
-
resolve({response: new MultiRequestResult(BE_DATA.AnonymousPlaylistByEntryList.response)});
|
|
777
|
-
});
|
|
778
|
-
});
|
|
779
|
-
provider.getEntryListConfig({entries: ['0_nwkp7jtx', {entryId: '0_wifqaipd'}, '0_p8aigvgu']}).then(
|
|
780
|
-
entryListConfig => {
|
|
781
|
-
try {
|
|
782
|
-
entryListConfig.id.should.equal('');
|
|
783
|
-
entryListConfig.items.length.should.equal(3);
|
|
784
|
-
entryListConfig.metadata.name.should.equal('');
|
|
785
|
-
entryListConfig.metadata.description.should.equal('');
|
|
786
|
-
entryListConfig.poster.should.equal('');
|
|
787
|
-
done();
|
|
788
|
-
} catch (err) {
|
|
789
|
-
done(err);
|
|
790
|
-
}
|
|
791
|
-
},
|
|
792
|
-
err => {
|
|
793
|
-
done(err);
|
|
794
|
-
}
|
|
795
|
-
);
|
|
796
|
-
});
|
|
797
|
-
|
|
798
|
-
it('should load a playlist by entry list - with KS', done => {
|
|
799
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
800
|
-
return new Promise(resolve => {
|
|
801
|
-
resolve({response: new MultiRequestResult(BE_DATA.PlaylistByEntryList.response)});
|
|
802
|
-
});
|
|
803
|
-
});
|
|
804
|
-
provider.getEntryListConfig({entries: ['0_nwkp7jtx', {entryId: '0_wifqaipd'}, '0_p8aigvgu'], ks}).then(
|
|
805
|
-
entryListConfig => {
|
|
806
|
-
try {
|
|
807
|
-
entryListConfig.id.should.equal('');
|
|
808
|
-
entryListConfig.items.length.should.equal(3);
|
|
809
|
-
entryListConfig.metadata.name.should.equal('');
|
|
810
|
-
entryListConfig.metadata.description.should.equal('');
|
|
811
|
-
entryListConfig.poster.should.equal('');
|
|
812
|
-
done();
|
|
813
|
-
} catch (err) {
|
|
814
|
-
done(err);
|
|
815
|
-
}
|
|
816
|
-
},
|
|
817
|
-
err => {
|
|
818
|
-
done(err);
|
|
819
|
-
}
|
|
820
|
-
);
|
|
821
|
-
});
|
|
822
|
-
|
|
823
|
-
it('should load a partial playlist by entry list if some requests have an error', done => {
|
|
824
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
825
|
-
return new Promise(resolve => {
|
|
826
|
-
resolve({response: new MultiRequestResult([...BE_DATA.PlaylistByEntryList.response, BE_DATA.WrongEntryIDWithoutUIConf.response])});
|
|
827
|
-
});
|
|
828
|
-
});
|
|
829
|
-
|
|
830
|
-
provider.getEntryListConfig({entries: ['0_nwkp7jtx', {entryId: '0_wifqaipd'}, '0_p8aigvgu'], ks}).then(
|
|
831
|
-
entryListConfig => {
|
|
832
|
-
try {
|
|
833
|
-
entryListConfig.id.should.equal('');
|
|
834
|
-
entryListConfig.items.length.should.equal(3);
|
|
835
|
-
entryListConfig.metadata.name.should.equal('');
|
|
836
|
-
entryListConfig.metadata.description.should.equal('');
|
|
837
|
-
entryListConfig.poster.should.equal('');
|
|
838
|
-
done();
|
|
839
|
-
} catch (err) {
|
|
840
|
-
done(err);
|
|
841
|
-
}
|
|
842
|
-
},
|
|
843
|
-
err => {
|
|
844
|
-
done(err);
|
|
845
|
-
}
|
|
846
|
-
);
|
|
847
|
-
});
|
|
848
|
-
});
|
|
849
|
-
|
|
850
|
-
describe('getPlaybackContext', () => {
|
|
851
|
-
let provider, sandbox;
|
|
852
|
-
const partnerId = 1068292;
|
|
853
|
-
const ks =
|
|
854
|
-
'NTAwZjViZWZjY2NjNTRkNGEyMjU1MTg4OGE1NmUwNDljZWJkMzk1MXwxMDY4MjkyOzEwNjgyOTI7MTQ5MDE3NjE0NjswOzE0OTAwODk3NDYuMDIyNjswO3ZpZXc6Kix3aWRnZXQ6MTs7';
|
|
855
|
-
const playerVersion = '1.2.3';
|
|
856
|
-
|
|
857
|
-
afterEach(() => {
|
|
858
|
-
sandbox.restore();
|
|
859
|
-
MultiRequestBuilder.prototype.execute.restore();
|
|
860
|
-
});
|
|
861
|
-
|
|
862
|
-
it('should request entryId token {1:result:objects:0:id} in request with valid KS', done => {
|
|
863
|
-
sandbox = sinon.createSandbox();
|
|
864
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
865
|
-
return new Promise(resolve => {
|
|
866
|
-
resolve({response: new MultiRequestResult(BE_DATA.AnonymousMocEntryWithoutUIConfWithDrmData.response)});
|
|
867
|
-
});
|
|
868
|
-
});
|
|
869
|
-
provider = new OVPProvider({partnerId: partnerId}, playerVersion);
|
|
870
|
-
provider
|
|
871
|
-
.getMediaConfig({entryId: '1_rwbj3j0a', ks: ks})
|
|
872
|
-
.then(() => {
|
|
873
|
-
const getPlaybackContext = provider._dataLoader._multiRequest.requests.find(request => {
|
|
874
|
-
return request.action === 'getPlaybackContext';
|
|
875
|
-
});
|
|
876
|
-
getPlaybackContext.params.entryId.should.equal('{1:result:objects:0:id}');
|
|
877
|
-
done();
|
|
878
|
-
})
|
|
879
|
-
.catch(err => {
|
|
880
|
-
done(err);
|
|
881
|
-
});
|
|
882
|
-
});
|
|
883
|
-
|
|
884
|
-
it('should add KS to direct playbackContext', done => {
|
|
885
|
-
sandbox = sinon.createSandbox();
|
|
886
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
887
|
-
return new Promise(resolve => {
|
|
888
|
-
resolve({response: new MultiRequestResult(BE_DATA.EntryDirectWithKs.response)});
|
|
889
|
-
});
|
|
890
|
-
});
|
|
891
|
-
provider = new OVPProvider({partnerId: partnerId}, playerVersion);
|
|
892
|
-
provider.getMediaConfig({entryId: '0_wifqaipd', ks: ks}).then(
|
|
893
|
-
mediaConfig => {
|
|
894
|
-
try {
|
|
895
|
-
const result = mediaConfig.sources.dash.filter(source => {
|
|
896
|
-
const ksParam = source.url.indexOf('?') === -1 ? 'ks/' : source.url.indexOf('?ks') === -1 ? '&ks=' : '?ks=';
|
|
897
|
-
return source.url.indexOf(ksParam + ks) !== -1;
|
|
898
|
-
});
|
|
899
|
-
result.should.deep.equal(mediaConfig.sources.dash);
|
|
900
|
-
done();
|
|
901
|
-
} catch (err) {
|
|
902
|
-
done(err);
|
|
903
|
-
}
|
|
904
|
-
},
|
|
905
|
-
err => {
|
|
906
|
-
done(err);
|
|
907
|
-
}
|
|
908
|
-
);
|
|
909
|
-
});
|
|
910
|
-
|
|
911
|
-
it('should add KS to external captions url', done => {
|
|
912
|
-
sandbox = sinon.createSandbox();
|
|
913
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
914
|
-
return new Promise(resolve => {
|
|
915
|
-
resolve({response: new MultiRequestResult(BE_DATA.EntryExternalCaptionWithKS.response)});
|
|
916
|
-
});
|
|
917
|
-
});
|
|
918
|
-
provider = new OVPProvider({partnerId: partnerId}, playerVersion);
|
|
919
|
-
provider.getMediaConfig({entryId: '1_rwbj3j0a', ks: ks}).then(
|
|
920
|
-
mediaConfig => {
|
|
921
|
-
try {
|
|
922
|
-
const result = mediaConfig.sources.captions.filter(caption => {
|
|
923
|
-
const ksParam = caption.url.indexOf('?') === -1 ? 'ks/' : caption.url.indexOf('?ks') === -1 ? '&ks=' : '?ks=';
|
|
924
|
-
return caption.url.indexOf(ksParam + ks) !== -1;
|
|
925
|
-
});
|
|
926
|
-
result.should.deep.equal(mediaConfig.sources.captions);
|
|
927
|
-
done();
|
|
928
|
-
} catch (err) {
|
|
929
|
-
done(err);
|
|
930
|
-
}
|
|
931
|
-
},
|
|
932
|
-
err => {
|
|
933
|
-
done(err);
|
|
934
|
-
}
|
|
935
|
-
);
|
|
936
|
-
});
|
|
937
|
-
|
|
938
|
-
it('should request entryId token {2:result:objects:0:id} in request with anonymous KS', done => {
|
|
939
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
940
|
-
return new Promise(resolve => {
|
|
941
|
-
resolve({response: new MultiRequestResult(BE_DATA.AnonymousMocEntryWithoutUIConfNoDrmData.response)});
|
|
942
|
-
});
|
|
943
|
-
});
|
|
944
|
-
provider = new OVPProvider({partnerId: 1082342}, playerVersion);
|
|
945
|
-
provider
|
|
946
|
-
.getMediaConfig({entryId: '1_rsrdfext'})
|
|
947
|
-
.then(() => {
|
|
948
|
-
const getPlaybackContext = provider._dataLoader._multiRequest.requests.find(request => {
|
|
949
|
-
return request.action === 'getPlaybackContext';
|
|
950
|
-
});
|
|
951
|
-
getPlaybackContext.params.entryId.should.equal('{2:result:objects:0:id}');
|
|
952
|
-
done();
|
|
953
|
-
})
|
|
954
|
-
.catch(err => {
|
|
955
|
-
done(err);
|
|
956
|
-
});
|
|
957
|
-
});
|
|
958
|
-
|
|
959
|
-
it('should not add KS to external captions', done => {
|
|
960
|
-
sandbox = sinon.createSandbox();
|
|
961
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
962
|
-
return new Promise(resolve => {
|
|
963
|
-
resolve({response: new MultiRequestResult(BE_DATA.EntryExternalCaptionNoKS.response)});
|
|
964
|
-
});
|
|
965
|
-
});
|
|
966
|
-
provider = new OVPProvider({partnerId: partnerId}, playerVersion);
|
|
967
|
-
provider.getMediaConfig({entryId: '1_rwbj3j0a'}).then(
|
|
968
|
-
mediaConfig => {
|
|
969
|
-
try {
|
|
970
|
-
const result = mediaConfig.sources.captions.filter(caption => {
|
|
971
|
-
const ksParam = caption.url.indexOf('?') === -1 ? 'ks/' : caption.url.indexOf('?ks') === -1 ? '&ks=' : '?ks=';
|
|
972
|
-
return caption.url.indexOf(ksParam + ks) === -1;
|
|
973
|
-
});
|
|
974
|
-
result.should.deep.equal(mediaConfig.sources.captions);
|
|
975
|
-
done();
|
|
976
|
-
} catch (err) {
|
|
977
|
-
done(err);
|
|
978
|
-
}
|
|
979
|
-
},
|
|
980
|
-
err => {
|
|
981
|
-
done(err);
|
|
982
|
-
}
|
|
983
|
-
);
|
|
984
|
-
});
|
|
985
|
-
});
|
|
986
|
-
|
|
987
|
-
describe('doRequest', () => {
|
|
988
|
-
let provider, params, sandbox;
|
|
989
|
-
const partnerId = 1068292;
|
|
990
|
-
const playerVersion = '1.2.3';
|
|
991
|
-
const ks =
|
|
992
|
-
'NDIxYjc3MmJhMmI1YTBhYTc1N2U2ODI0NjA4MWU0YzVhNGI3ZDQzM3wxMDY4MjkyOzEwNjgyOTI7MTYzOTM5NDk2OTsyOzE2MzkzMDg1NjkuOTg1NTtwaGlsbC5wcmljZUBkaXNuZXkuY29tOyosZGlzYWJsZWVudGl0bGVtZW50Ozs';
|
|
993
|
-
|
|
994
|
-
beforeEach(() => {
|
|
995
|
-
provider = new OVPProvider({partnerId: partnerId}, playerVersion);
|
|
996
|
-
params = {
|
|
997
|
-
referenceId: '',
|
|
998
|
-
entryId: '1_rwbj3j0a',
|
|
999
|
-
redirectFromEntryId: true,
|
|
1000
|
-
ks: ''
|
|
1001
|
-
};
|
|
1002
|
-
});
|
|
1003
|
-
|
|
1004
|
-
afterEach(() => {
|
|
1005
|
-
sandbox.restore();
|
|
1006
|
-
MultiRequestBuilder.prototype.execute.restore();
|
|
1007
|
-
});
|
|
1008
|
-
|
|
1009
|
-
it('should add session request to the multirequest and use that KS', done => {
|
|
1010
|
-
sandbox = sinon.createSandbox();
|
|
1011
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
1012
|
-
return new Promise(resolve => {
|
|
1013
|
-
resolve({response: new MultiRequestResult(BE_DATA.Session.response)});
|
|
1014
|
-
});
|
|
1015
|
-
});
|
|
1016
|
-
provider
|
|
1017
|
-
.doRequest([{loader: OVPMediaEntryLoader, params}])
|
|
1018
|
-
.then((data: Map<string, any>) => {
|
|
1019
|
-
data.has(OVPSessionLoader.id).should.be.true;
|
|
1020
|
-
data.get(OVPSessionLoader.id).response.should.equal(ks);
|
|
1021
|
-
provider.isAnonymous.should.be.true;
|
|
1022
|
-
const mediaLoader = data.get(OVPMediaEntryLoader.id);
|
|
1023
|
-
mediaLoader._requests[1].params.ks.should.equal('{1:result:ks}');
|
|
1024
|
-
done();
|
|
1025
|
-
})
|
|
1026
|
-
.catch(err => {
|
|
1027
|
-
done(err);
|
|
1028
|
-
});
|
|
1029
|
-
});
|
|
1030
|
-
|
|
1031
|
-
it('should use KS from provider', done => {
|
|
1032
|
-
sandbox = sinon.createSandbox();
|
|
1033
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
1034
|
-
return new Promise(resolve => {
|
|
1035
|
-
resolve({response: {}});
|
|
1036
|
-
});
|
|
1037
|
-
});
|
|
1038
|
-
params.ks = ks;
|
|
1039
|
-
provider.ks = ks;
|
|
1040
|
-
provider
|
|
1041
|
-
.doRequest([{loader: OVPMediaEntryLoader, params}])
|
|
1042
|
-
.then((data: Map<string, any>) => {
|
|
1043
|
-
data.has(OVPSessionLoader.id).should.be.false;
|
|
1044
|
-
const mediaLoader = data.get(OVPMediaEntryLoader.id);
|
|
1045
|
-
mediaLoader._requests[0].params.ks.should.equal(provider.ks);
|
|
1046
|
-
done();
|
|
1047
|
-
})
|
|
1048
|
-
.catch(err => {
|
|
1049
|
-
done(err);
|
|
1050
|
-
});
|
|
1051
|
-
});
|
|
1052
|
-
|
|
1053
|
-
it('should use external KS', done => {
|
|
1054
|
-
sandbox = sinon.createSandbox();
|
|
1055
|
-
sinon.stub(MultiRequestBuilder.prototype, 'execute').callsFake(function () {
|
|
1056
|
-
return new Promise(resolve => {
|
|
1057
|
-
resolve({response: {}});
|
|
1058
|
-
});
|
|
1059
|
-
});
|
|
1060
|
-
params.ks = ks;
|
|
1061
|
-
provider
|
|
1062
|
-
.doRequest([{loader: OVPMediaEntryLoader, params}], ks)
|
|
1063
|
-
.then((data: Map<string, any>) => {
|
|
1064
|
-
provider.ks.should.equal('');
|
|
1065
|
-
data.has(OVPSessionLoader.id).should.be.false;
|
|
1066
|
-
provider.isAnonymous.should.be.true;
|
|
1067
|
-
const mediaLoader = data.get(OVPMediaEntryLoader.id);
|
|
1068
|
-
mediaLoader._requests[0].params.ks.should.equal(ks);
|
|
1069
|
-
done();
|
|
1070
|
-
})
|
|
1071
|
-
.catch(err => {
|
|
1072
|
-
done(err);
|
|
1073
|
-
});
|
|
1074
|
-
});
|
|
1075
|
-
});
|