@raydiant/playlist-window-manager 0.25.0 → 0.25.1-canary.0
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/build/BrowserViewRenderer.d.ts +2 -3
- package/build/BrowserViewRenderer.js +23 -48
- package/build/BrowserWindowRenderer.d.ts +2 -3
- package/build/BrowserWindowRenderer.js +42 -69
- package/build/IFrameRenderer.d.ts +2 -4
- package/build/IFrameRenderer.js +44 -63
- package/build/PlaylistWindowManager.d.ts +1 -10
- package/build/PlaylistWindowManager.js +18 -87
- package/build/PlaylistWindowManagerState.js +3 -3
- package/build/PresentationWindow.d.ts +5 -39
- package/build/PresentationWindow.js +98 -683
- package/build/WindowLoadError.js +1 -3
- package/build/WindowTimeoutError.js +1 -3
- package/build/WindowUnresponsiveError.js +1 -3
- package/build/embeddedApps.d.ts +2 -2
- package/build/embeddedApps.js +15 -36
- package/build/embeddedApps.test.js +36 -89
- package/build/index.js +6 -19
- package/build/preload.js +14 -14
- package/build/types.d.ts +2 -49
- package/package.json +1 -1
- package/src/BrowserViewRenderer.ts +6 -5
- package/src/BrowserWindowRenderer.ts +16 -14
- package/build/PresentationWindow.test.d.ts +0 -1
- package/build/PresentationWindow.test.js +0 -406
- package/build/testUtils.d.ts +0 -43
- package/build/testUtils.js +0 -209
|
@@ -1,406 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
var testUtils_1 = require("./testUtils");
|
|
40
|
-
var delay = function (ms) { return new Promise(function (resolve) { return setTimeout(resolve, ms); }); };
|
|
41
|
-
describe('embedded apps', function () {
|
|
42
|
-
test('loads embedded url format', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
43
|
-
var testRenderer, window;
|
|
44
|
-
return __generator(this, function (_a) {
|
|
45
|
-
switch (_a.label) {
|
|
46
|
-
case 0:
|
|
47
|
-
testRenderer = (0, testUtils_1.createRenderer)();
|
|
48
|
-
window = (0, testUtils_1.createPresentationWindow)({
|
|
49
|
-
windowId: 'test-embedded-url-format',
|
|
50
|
-
presentation: (0, testUtils_1.createPresentation)({
|
|
51
|
-
applicationVariables: { input: 'test' },
|
|
52
|
-
}),
|
|
53
|
-
applicationVersion: (0, testUtils_1.createApplicationVersion)({
|
|
54
|
-
embeddedUrlFormat: 'http://test.local/:input',
|
|
55
|
-
presentationProperties: [{ name: 'input', type: 'string' }],
|
|
56
|
-
}),
|
|
57
|
-
renderer: testRenderer,
|
|
58
|
-
});
|
|
59
|
-
return [4 /*yield*/, window.load()];
|
|
60
|
-
case 1:
|
|
61
|
-
_a.sent();
|
|
62
|
-
expect(testRenderer.createWindow).toHaveBeenCalledWith({
|
|
63
|
-
windowId: 'test-embedded-url-format',
|
|
64
|
-
backgroundColor: '#ffffff',
|
|
65
|
-
bounds: undefined,
|
|
66
|
-
parentWindowId: undefined,
|
|
67
|
-
errorCallback: expect.any(Function),
|
|
68
|
-
receiveMessageCallback: expect.any(Function),
|
|
69
|
-
});
|
|
70
|
-
expect(testRenderer.loadWindow).toHaveBeenCalledWith('test-embedded-url-format', 'http://test.local/test#__raydiantWindowId=test-embedded-url-format');
|
|
71
|
-
return [2 /*return*/];
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
}); });
|
|
75
|
-
test('reloads by rendering embedded url format', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
76
|
-
var testRenderer, window;
|
|
77
|
-
return __generator(this, function (_a) {
|
|
78
|
-
switch (_a.label) {
|
|
79
|
-
case 0:
|
|
80
|
-
testRenderer = (0, testUtils_1.createRenderer)();
|
|
81
|
-
window = (0, testUtils_1.createPresentationWindow)({
|
|
82
|
-
windowId: 'test-reload-url',
|
|
83
|
-
presentation: (0, testUtils_1.createPresentation)({
|
|
84
|
-
applicationVariables: { input: 'test' },
|
|
85
|
-
}),
|
|
86
|
-
applicationVersion: (0, testUtils_1.createApplicationVersion)({
|
|
87
|
-
embeddedUrlFormat: 'http://test.local/:input',
|
|
88
|
-
presentationProperties: [{ name: 'input', type: 'string' }],
|
|
89
|
-
}),
|
|
90
|
-
renderer: testRenderer,
|
|
91
|
-
});
|
|
92
|
-
return [4 /*yield*/, window.load()];
|
|
93
|
-
case 1:
|
|
94
|
-
_a.sent();
|
|
95
|
-
window.setPresentation((0, testUtils_1.createPresentation)({ applicationVariables: { input: 'updated' } }), (0, testUtils_1.createPlaylistWindowManagerState)(), (0, testUtils_1.createRuleEngineState)());
|
|
96
|
-
return [4 /*yield*/, window.reload()];
|
|
97
|
-
case 2:
|
|
98
|
-
_a.sent();
|
|
99
|
-
expect(testRenderer.loadWindow).toHaveBeenCalledTimes(2);
|
|
100
|
-
expect(testRenderer.loadWindow).toHaveBeenCalledWith('test-reload-url', 'http://test.local/updated#__raydiantWindowId=test-reload-url');
|
|
101
|
-
return [2 /*return*/];
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
}); });
|
|
105
|
-
test('reloads by sending message if has preview subscription', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
106
|
-
var testRenderer, window;
|
|
107
|
-
return __generator(this, function (_a) {
|
|
108
|
-
switch (_a.label) {
|
|
109
|
-
case 0:
|
|
110
|
-
testRenderer = (0, testUtils_1.createRenderer)();
|
|
111
|
-
window = (0, testUtils_1.createPresentationWindow)({
|
|
112
|
-
windowId: 'test-reload-message',
|
|
113
|
-
presentation: (0, testUtils_1.createPresentation)({
|
|
114
|
-
applicationVariables: { input: 'test' },
|
|
115
|
-
}),
|
|
116
|
-
applicationVersion: (0, testUtils_1.createApplicationVersion)({
|
|
117
|
-
embeddedUrlFormat: 'http://test.local/:input',
|
|
118
|
-
presentationProperties: [{ name: 'input', type: 'string' }],
|
|
119
|
-
}),
|
|
120
|
-
renderer: testRenderer,
|
|
121
|
-
});
|
|
122
|
-
return [4 /*yield*/, window.load()];
|
|
123
|
-
case 1:
|
|
124
|
-
_a.sent();
|
|
125
|
-
// Subscribe to receive input updates via message.
|
|
126
|
-
testRenderer.runReceiveMessageCallback('preview-subscribe', 'inputs');
|
|
127
|
-
window.setPresentation((0, testUtils_1.createPresentation)({ applicationVariables: { input: 'updated' } }), (0, testUtils_1.createPlaylistWindowManagerState)(), (0, testUtils_1.createRuleEngineState)());
|
|
128
|
-
return [4 /*yield*/, window.reload()];
|
|
129
|
-
case 2:
|
|
130
|
-
_a.sent();
|
|
131
|
-
// loadWindow should only be called once for the initial load.
|
|
132
|
-
expect(testRenderer.loadWindow).toHaveBeenCalledTimes(1);
|
|
133
|
-
expect(testRenderer.sendMessageObject).toHaveBeenCalledWith('test-reload-message', 'preview-inputs', { input: 'updated' });
|
|
134
|
-
// sendMessageObject should not be called again for the same inputs.
|
|
135
|
-
return [4 /*yield*/, window.reload()];
|
|
136
|
-
case 3:
|
|
137
|
-
// sendMessageObject should not be called again for the same inputs.
|
|
138
|
-
_a.sent();
|
|
139
|
-
expect(testRenderer.sendMessageObject).toHaveBeenCalledTimes(1);
|
|
140
|
-
// Unsubscribe to receive input updates via message.
|
|
141
|
-
testRenderer.runReceiveMessageCallback('preview-unsubscribe', 'inputs');
|
|
142
|
-
return [4 /*yield*/, window.reload()];
|
|
143
|
-
case 4:
|
|
144
|
-
_a.sent();
|
|
145
|
-
// loadWindow should be called again since the preview subscription was removed.
|
|
146
|
-
expect(testRenderer.loadWindow).toHaveBeenCalledTimes(2);
|
|
147
|
-
return [2 /*return*/];
|
|
148
|
-
}
|
|
149
|
-
});
|
|
150
|
-
}); });
|
|
151
|
-
test('preview subscription strips internal file properties from inputs', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
152
|
-
var testRenderer, window;
|
|
153
|
-
return __generator(this, function (_a) {
|
|
154
|
-
switch (_a.label) {
|
|
155
|
-
case 0:
|
|
156
|
-
testRenderer = (0, testUtils_1.createRenderer)();
|
|
157
|
-
window = (0, testUtils_1.createPresentationWindow)({
|
|
158
|
-
windowId: 'test-reload-message',
|
|
159
|
-
presentation: (0, testUtils_1.createPresentation)({
|
|
160
|
-
applicationVariables: {
|
|
161
|
-
input: {
|
|
162
|
-
url: 'http://test.local/image.png',
|
|
163
|
-
'content-length': 123,
|
|
164
|
-
'content-type': 'image/png',
|
|
165
|
-
file_upload_id: 'test',
|
|
166
|
-
filename: 'image.png',
|
|
167
|
-
},
|
|
168
|
-
},
|
|
169
|
-
}),
|
|
170
|
-
applicationVersion: (0, testUtils_1.createApplicationVersion)({
|
|
171
|
-
embeddedUrlFormat: 'http://test.local/:input',
|
|
172
|
-
presentationProperties: [{ name: 'input', type: 'file' }],
|
|
173
|
-
}),
|
|
174
|
-
renderer: testRenderer,
|
|
175
|
-
});
|
|
176
|
-
return [4 /*yield*/, window.load()];
|
|
177
|
-
case 1:
|
|
178
|
-
_a.sent();
|
|
179
|
-
// Subscribe to receive input updates via message.
|
|
180
|
-
testRenderer.runReceiveMessageCallback('preview-subscribe', 'inputs');
|
|
181
|
-
return [4 /*yield*/, window.reload()];
|
|
182
|
-
case 2:
|
|
183
|
-
_a.sent();
|
|
184
|
-
expect(testRenderer.sendMessageObject).toHaveBeenCalledWith('test-reload-message', 'preview-inputs', { input: { url: 'http://test.local/image.png' } });
|
|
185
|
-
// Updating internal file input values should not cause a reload.
|
|
186
|
-
window.setPresentation((0, testUtils_1.createPresentation)({
|
|
187
|
-
applicationVariables: {
|
|
188
|
-
input: {
|
|
189
|
-
url: 'http://test.local/image.png',
|
|
190
|
-
file_upload_id: 'test2',
|
|
191
|
-
},
|
|
192
|
-
},
|
|
193
|
-
}), (0, testUtils_1.createPlaylistWindowManagerState)(), (0, testUtils_1.createRuleEngineState)());
|
|
194
|
-
return [4 /*yield*/, window.reload()];
|
|
195
|
-
case 3:
|
|
196
|
-
_a.sent();
|
|
197
|
-
// sendMessageObject should not be called again for the same inputs.
|
|
198
|
-
expect(testRenderer.sendMessageObject).toHaveBeenCalledTimes(1);
|
|
199
|
-
return [2 /*return*/];
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
}); });
|
|
203
|
-
test('sends create object url message', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
204
|
-
var testRenderer, window, createObjectUrlPromise, requestId, result;
|
|
205
|
-
return __generator(this, function (_a) {
|
|
206
|
-
switch (_a.label) {
|
|
207
|
-
case 0:
|
|
208
|
-
testRenderer = (0, testUtils_1.createRenderer)();
|
|
209
|
-
window = (0, testUtils_1.createPresentationWindow)({
|
|
210
|
-
windowId: 'test-object-url',
|
|
211
|
-
presentation: (0, testUtils_1.createPresentation)(),
|
|
212
|
-
applicationVersion: (0, testUtils_1.createApplicationVersion)({
|
|
213
|
-
embeddedUrlFormat: 'http://test.local/:input',
|
|
214
|
-
}),
|
|
215
|
-
renderer: testRenderer,
|
|
216
|
-
});
|
|
217
|
-
return [4 /*yield*/, window.load()];
|
|
218
|
-
case 1:
|
|
219
|
-
_a.sent();
|
|
220
|
-
createObjectUrlPromise = window.createObjectURL(new Blob(['test']));
|
|
221
|
-
// Wait for the createObjectURL call to be sent to the renderer.
|
|
222
|
-
return [4 /*yield*/, delay(100)];
|
|
223
|
-
case 2:
|
|
224
|
-
// Wait for the createObjectURL call to be sent to the renderer.
|
|
225
|
-
_a.sent();
|
|
226
|
-
expect(testRenderer.sendMessageObject).toHaveBeenCalledWith('test-object-url', 'create-object-url', { requestId: expect.any(String), buffer: expect.any(ArrayBuffer) });
|
|
227
|
-
requestId = testRenderer.sendMessageObject.mock.calls[0][2].requestId;
|
|
228
|
-
testRenderer.runReceiveMessageCallback('create-object-url-result', {
|
|
229
|
-
requestId: requestId,
|
|
230
|
-
url: 'http://test.local/blob',
|
|
231
|
-
});
|
|
232
|
-
return [4 /*yield*/, createObjectUrlPromise];
|
|
233
|
-
case 3:
|
|
234
|
-
result = _a.sent();
|
|
235
|
-
expect(result).toBe('http://test.local/blob');
|
|
236
|
-
return [2 /*return*/];
|
|
237
|
-
}
|
|
238
|
-
});
|
|
239
|
-
}); });
|
|
240
|
-
});
|
|
241
|
-
describe('payments', function () {
|
|
242
|
-
test('charge request', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
243
|
-
var testRenderer, window, callback;
|
|
244
|
-
return __generator(this, function (_a) {
|
|
245
|
-
switch (_a.label) {
|
|
246
|
-
case 0:
|
|
247
|
-
testRenderer = (0, testUtils_1.createRenderer)();
|
|
248
|
-
window = (0, testUtils_1.createPresentationWindow)({
|
|
249
|
-
windowId: 'test-charge-request',
|
|
250
|
-
presentation: (0, testUtils_1.createPresentation)(),
|
|
251
|
-
applicationVersion: (0, testUtils_1.createApplicationVersion)({
|
|
252
|
-
embeddedUrlFormat: 'http://test.local/:input',
|
|
253
|
-
}),
|
|
254
|
-
renderer: testRenderer,
|
|
255
|
-
});
|
|
256
|
-
callback = jest.fn();
|
|
257
|
-
window.onChargeRequest(callback);
|
|
258
|
-
return [4 /*yield*/, window.load()];
|
|
259
|
-
case 1:
|
|
260
|
-
_a.sent();
|
|
261
|
-
testRenderer.runReceiveMessageCallback('payments-charge-request', {
|
|
262
|
-
requestId: 'test',
|
|
263
|
-
amount: 100,
|
|
264
|
-
});
|
|
265
|
-
expect(callback).toHaveBeenCalledWith({
|
|
266
|
-
requestId: 'test',
|
|
267
|
-
amount: 100,
|
|
268
|
-
});
|
|
269
|
-
// Send charge response.
|
|
270
|
-
window.sendChargeResponse({
|
|
271
|
-
requestId: 'test',
|
|
272
|
-
charge: { id: '1', status: 'pending' },
|
|
273
|
-
});
|
|
274
|
-
expect(testRenderer.sendMessageObject).toHaveBeenCalledWith('test-charge-request', 'payments-charge-response', { requestId: 'test', charge: { id: '1', status: 'pending' } });
|
|
275
|
-
return [2 /*return*/];
|
|
276
|
-
}
|
|
277
|
-
});
|
|
278
|
-
}); });
|
|
279
|
-
test('subscribe to charge', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
280
|
-
var testRenderer, window;
|
|
281
|
-
return __generator(this, function (_a) {
|
|
282
|
-
switch (_a.label) {
|
|
283
|
-
case 0:
|
|
284
|
-
testRenderer = (0, testUtils_1.createRenderer)();
|
|
285
|
-
window = (0, testUtils_1.createPresentationWindow)({
|
|
286
|
-
windowId: 'test-payments-subscribe-charge',
|
|
287
|
-
presentation: (0, testUtils_1.createPresentation)(),
|
|
288
|
-
applicationVersion: (0, testUtils_1.createApplicationVersion)({
|
|
289
|
-
embeddedUrlFormat: 'http://test.local/:input',
|
|
290
|
-
}),
|
|
291
|
-
renderer: testRenderer,
|
|
292
|
-
});
|
|
293
|
-
return [4 /*yield*/, window.load()];
|
|
294
|
-
case 1:
|
|
295
|
-
_a.sent();
|
|
296
|
-
testRenderer.runReceiveMessageCallback('payments-subscribe', 'charge');
|
|
297
|
-
window.sendCharge({ id: 'test', status: 'success' });
|
|
298
|
-
expect(testRenderer.sendMessageObject).toHaveBeenCalledWith('test-payments-subscribe-charge', 'payments-charge-event', { charge: { id: 'test', status: 'success' } });
|
|
299
|
-
// Unsubscribe should not send a message.
|
|
300
|
-
testRenderer.runReceiveMessageCallback('payments-unsubscribe', 'charge');
|
|
301
|
-
window.sendCharge({ id: 'test2', status: 'success' });
|
|
302
|
-
expect(testRenderer.sendMessageObject).toHaveBeenCalledTimes(1);
|
|
303
|
-
return [2 /*return*/];
|
|
304
|
-
}
|
|
305
|
-
});
|
|
306
|
-
}); });
|
|
307
|
-
test('subscribe to terminal', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
308
|
-
var testRenderer, window;
|
|
309
|
-
return __generator(this, function (_a) {
|
|
310
|
-
switch (_a.label) {
|
|
311
|
-
case 0:
|
|
312
|
-
testRenderer = (0, testUtils_1.createRenderer)();
|
|
313
|
-
window = (0, testUtils_1.createPresentationWindow)({
|
|
314
|
-
windowId: 'test-payments-subscribe-terminal',
|
|
315
|
-
presentation: (0, testUtils_1.createPresentation)(),
|
|
316
|
-
applicationVersion: (0, testUtils_1.createApplicationVersion)({
|
|
317
|
-
embeddedUrlFormat: 'http://test.local/:input',
|
|
318
|
-
}),
|
|
319
|
-
renderer: testRenderer,
|
|
320
|
-
getTerminal: function () { return null; },
|
|
321
|
-
});
|
|
322
|
-
return [4 /*yield*/, window.load()];
|
|
323
|
-
case 1:
|
|
324
|
-
_a.sent();
|
|
325
|
-
testRenderer.runReceiveMessageCallback('payments-subscribe', 'terminal');
|
|
326
|
-
// Terminal subscriptions should receive the current terminal immediately after subscribing.
|
|
327
|
-
expect(testRenderer.sendMessageObject).toHaveBeenCalledWith('test-payments-subscribe-terminal', 'payments-terminal-event', { terminal: null });
|
|
328
|
-
// Send terminal update event.
|
|
329
|
-
window.sendTerminal({ status: 'open' });
|
|
330
|
-
expect(testRenderer.sendMessageObject).toHaveBeenCalledWith('test-payments-subscribe-terminal', 'payments-terminal-event', { terminal: { status: 'open' } });
|
|
331
|
-
// Unsubscribe should not send a message.
|
|
332
|
-
testRenderer.runReceiveMessageCallback('payments-unsubscribe', 'terminal');
|
|
333
|
-
window.sendTerminal({ status: 'closed' });
|
|
334
|
-
expect(testRenderer.sendMessageObject).toHaveBeenCalledTimes(2);
|
|
335
|
-
return [2 /*return*/];
|
|
336
|
-
}
|
|
337
|
-
});
|
|
338
|
-
}); });
|
|
339
|
-
});
|
|
340
|
-
describe('interrupt locks', function () {
|
|
341
|
-
test('acquire, renew, release lock', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
342
|
-
var testRenderer, onEnableInterruptLock, onDisableInterruptLock, window, sendMessageObjectCall, lock, renewLockSendMessageObjectCall, renewedLock, releaseLockSendMessageObjectCall, releasedLock;
|
|
343
|
-
return __generator(this, function (_a) {
|
|
344
|
-
switch (_a.label) {
|
|
345
|
-
case 0:
|
|
346
|
-
testRenderer = (0, testUtils_1.createRenderer)();
|
|
347
|
-
onEnableInterruptLock = jest.fn();
|
|
348
|
-
onDisableInterruptLock = jest.fn();
|
|
349
|
-
window = (0, testUtils_1.createPresentationWindow)({
|
|
350
|
-
windowId: 'test-interrupt-lock-window-id',
|
|
351
|
-
presentation: (0, testUtils_1.createPresentation)(),
|
|
352
|
-
applicationVersion: (0, testUtils_1.createApplicationVersion)({
|
|
353
|
-
embeddedUrlFormat: 'http://test.local/:input',
|
|
354
|
-
}),
|
|
355
|
-
renderer: testRenderer,
|
|
356
|
-
});
|
|
357
|
-
window.onEnableInterruptLock(onEnableInterruptLock);
|
|
358
|
-
window.onDisableInterruptLock(onDisableInterruptLock);
|
|
359
|
-
return [4 /*yield*/, window.load()];
|
|
360
|
-
case 1:
|
|
361
|
-
_a.sent();
|
|
362
|
-
// Acquire lock.
|
|
363
|
-
testRenderer.runReceiveMessageCallback('runtime-acquire-interrupt-lock-request', { requestId: 'acquire-request' });
|
|
364
|
-
sendMessageObjectCall = testRenderer.sendMessageObject.mock.calls[0];
|
|
365
|
-
expect(sendMessageObjectCall[0]).toBe('test-interrupt-lock-window-id');
|
|
366
|
-
expect(sendMessageObjectCall[1]).toBe('runtime-acquire-interrupt-lock-response');
|
|
367
|
-
expect(sendMessageObjectCall[2].requestId).toBe('acquire-request');
|
|
368
|
-
lock = sendMessageObjectCall[2].lock;
|
|
369
|
-
expect(typeof lock.id).toBe('string');
|
|
370
|
-
expect(lock.id).toBeTruthy();
|
|
371
|
-
expect(typeof lock.expiresAt).toBe('number');
|
|
372
|
-
expect(lock.expiresAt).toBeTruthy();
|
|
373
|
-
expect(onEnableInterruptLock).toHaveBeenCalled();
|
|
374
|
-
// Wait 1ms to make sure we have a different expiresAt value.
|
|
375
|
-
return [4 /*yield*/, delay(1)];
|
|
376
|
-
case 2:
|
|
377
|
-
// Wait 1ms to make sure we have a different expiresAt value.
|
|
378
|
-
_a.sent();
|
|
379
|
-
// Renew lock.
|
|
380
|
-
testRenderer.runReceiveMessageCallback('runtime-renew-interrupt-lock-request', { requestId: 'renew-request', lockId: lock.id });
|
|
381
|
-
renewLockSendMessageObjectCall = testRenderer.sendMessageObject.mock.calls[1];
|
|
382
|
-
expect(renewLockSendMessageObjectCall[0]).toBe('test-interrupt-lock-window-id');
|
|
383
|
-
expect(renewLockSendMessageObjectCall[1]).toBe('runtime-renew-interrupt-lock-response');
|
|
384
|
-
expect(renewLockSendMessageObjectCall[2].requestId).toBe('renew-request');
|
|
385
|
-
renewedLock = renewLockSendMessageObjectCall[2].lock;
|
|
386
|
-
expect(renewedLock.id).toBe(lock.id);
|
|
387
|
-
expect(renewedLock.expiresAt).toBeGreaterThan(lock.expiresAt);
|
|
388
|
-
// Ensure onEnableInterruptLock is not called again.
|
|
389
|
-
expect(onEnableInterruptLock).toHaveBeenCalledTimes(1);
|
|
390
|
-
// Release lock.
|
|
391
|
-
testRenderer.runReceiveMessageCallback('runtime-release-interrupt-lock-request', { requestId: 'release-request', lockId: lock.id });
|
|
392
|
-
releaseLockSendMessageObjectCall = testRenderer.sendMessageObject.mock.calls[2];
|
|
393
|
-
expect(releaseLockSendMessageObjectCall[0]).toBe('test-interrupt-lock-window-id');
|
|
394
|
-
expect(releaseLockSendMessageObjectCall[1]).toBe('runtime-release-interrupt-lock-response');
|
|
395
|
-
expect(releaseLockSendMessageObjectCall[2].requestId).toBe('release-request');
|
|
396
|
-
releasedLock = releaseLockSendMessageObjectCall[2].lock;
|
|
397
|
-
expect(releasedLock.id).toBe(lock.id);
|
|
398
|
-
expect(releasedLock.expiresAt).toBe(renewedLock.expiresAt);
|
|
399
|
-
// Ensure onDisableInterruptLock is called.
|
|
400
|
-
expect(onDisableInterruptLock).toHaveBeenCalled();
|
|
401
|
-
return [2 /*return*/];
|
|
402
|
-
}
|
|
403
|
-
});
|
|
404
|
-
}); });
|
|
405
|
-
});
|
|
406
|
-
// TODO: Backfill tests for all legacy and embedded apps.
|
package/build/testUtils.d.ts
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/// <reference types="jest" />
|
|
2
|
-
import * as re from '@raydiant/playlist-rule-engine';
|
|
3
|
-
import PresentationWindow, { PresentationWindowOptions } from './PresentationWindow';
|
|
4
|
-
import PlaylistWindowManagerState, { PlaylistWindowManagerStateOptions } from './PlaylistWindowManagerState';
|
|
5
|
-
import { Presentation, ApplicationVersion, Logger, CreateWindowOptions } from './types';
|
|
6
|
-
export declare function createPresentationWindow(overrides?: Partial<PresentationWindowOptions>): PresentationWindow;
|
|
7
|
-
export declare function createPresentation(overrides?: Partial<Presentation>): Presentation;
|
|
8
|
-
export declare function createPresentationRelationships(overrides?: Partial<Presentation['r']>): Presentation['r'];
|
|
9
|
-
export declare function createApplicationVersion(overrides?: Partial<ApplicationVersion>): ApplicationVersion;
|
|
10
|
-
export declare function createPlaylistWindowManagerState(overrides?: Partial<PlaylistWindowManagerStateOptions>): PlaylistWindowManagerState;
|
|
11
|
-
export declare function createRuleEngineState(playlists?: {
|
|
12
|
-
[index: string]: re.Playlist;
|
|
13
|
-
}, presentations?: {
|
|
14
|
-
[index: string]: re.Presentation;
|
|
15
|
-
}, rulesDataStore?: re.RulesDataStore, isMultitimezoneEnabled?: boolean): re.State;
|
|
16
|
-
export declare function createLogger(overrides?: Partial<Logger>): {
|
|
17
|
-
debug: (message: any, context?: {
|
|
18
|
-
[key: string]: any;
|
|
19
|
-
} | undefined) => void;
|
|
20
|
-
info: (message: any, context?: {
|
|
21
|
-
[key: string]: any;
|
|
22
|
-
} | undefined) => void;
|
|
23
|
-
warn: (message: any, context?: {
|
|
24
|
-
[key: string]: any;
|
|
25
|
-
} | undefined) => void;
|
|
26
|
-
error: (message: any, context?: {
|
|
27
|
-
[key: string]: any;
|
|
28
|
-
} | undefined) => void;
|
|
29
|
-
};
|
|
30
|
-
export declare function createRenderer(): {
|
|
31
|
-
createWindow: jest.Mock<void, [opts: CreateWindowOptions]>;
|
|
32
|
-
loadWindow: jest.Mock<any, any>;
|
|
33
|
-
updateWindowBounds: jest.Mock<any, any>;
|
|
34
|
-
showWindow: jest.Mock<any, any>;
|
|
35
|
-
hideWindow: jest.Mock<any, any>;
|
|
36
|
-
removeWindow: jest.Mock<any, any>;
|
|
37
|
-
sendMessageString: jest.Mock<any, any>;
|
|
38
|
-
sendMessageObject: jest.Mock<any, any>;
|
|
39
|
-
muteWindow: jest.Mock<any, any>;
|
|
40
|
-
unMuteWindow: jest.Mock<any, any>;
|
|
41
|
-
runReceiveMessageCallback(type: string, payload: any): void;
|
|
42
|
-
runErrorCallback(error: Error): void;
|
|
43
|
-
};
|
package/build/testUtils.js
DELETED
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
35
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
36
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
37
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
38
|
-
function step(op) {
|
|
39
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
40
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
41
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
42
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
43
|
-
switch (op[0]) {
|
|
44
|
-
case 0: case 1: t = op; break;
|
|
45
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
46
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
47
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
48
|
-
default:
|
|
49
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
50
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
51
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
52
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
53
|
-
if (t[2]) _.ops.pop();
|
|
54
|
-
_.trys.pop(); continue;
|
|
55
|
-
}
|
|
56
|
-
op = body.call(thisArg, _);
|
|
57
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
58
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
62
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
63
|
-
};
|
|
64
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
65
|
-
exports.createRenderer = exports.createLogger = exports.createRuleEngineState = exports.createPlaylistWindowManagerState = exports.createApplicationVersion = exports.createPresentationRelationships = exports.createPresentation = exports.createPresentationWindow = void 0;
|
|
66
|
-
var re = __importStar(require("@raydiant/playlist-rule-engine"));
|
|
67
|
-
var PresentationWindow_1 = __importDefault(require("./PresentationWindow"));
|
|
68
|
-
var PlaylistWindowManagerState_1 = __importDefault(require("./PlaylistWindowManagerState"));
|
|
69
|
-
function createPresentationWindow(overrides) {
|
|
70
|
-
var _a, _b, _c, _d, _e, _f;
|
|
71
|
-
if (overrides === void 0) { overrides = {}; }
|
|
72
|
-
return new PresentationWindow_1.default({
|
|
73
|
-
windowId: (_a = overrides.windowId) !== null && _a !== void 0 ? _a : 'test',
|
|
74
|
-
presentation: createPresentation(overrides.presentation),
|
|
75
|
-
applicationVersion: createApplicationVersion(overrides.applicationVersion),
|
|
76
|
-
publishedAt: (_b = overrides.publishedAt) !== null && _b !== void 0 ? _b : 'publishedAt',
|
|
77
|
-
playlistWindowManagerState: (_c = overrides.playlistWindowManagerState) !== null && _c !== void 0 ? _c : createPlaylistWindowManagerState(),
|
|
78
|
-
ruleEngineState: (_d = overrides.ruleEngineState) !== null && _d !== void 0 ? _d : createRuleEngineState(),
|
|
79
|
-
logger: createLogger(),
|
|
80
|
-
workerState: (_e = overrides.workerState) !== null && _e !== void 0 ? _e : {},
|
|
81
|
-
renderer: (_f = overrides.renderer) !== null && _f !== void 0 ? _f : {
|
|
82
|
-
createWindow: function () { },
|
|
83
|
-
loadWindow: function () {
|
|
84
|
-
return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
85
|
-
return [2 /*return*/];
|
|
86
|
-
}); });
|
|
87
|
-
},
|
|
88
|
-
updateWindowBounds: function () { },
|
|
89
|
-
showWindow: function () { },
|
|
90
|
-
hideWindow: function () { },
|
|
91
|
-
removeWindow: function () {
|
|
92
|
-
return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
93
|
-
return [2 /*return*/];
|
|
94
|
-
}); });
|
|
95
|
-
},
|
|
96
|
-
sendMessageString: function () { },
|
|
97
|
-
sendMessageObject: function () { },
|
|
98
|
-
muteWindow: function () { },
|
|
99
|
-
unMuteWindow: function () { },
|
|
100
|
-
},
|
|
101
|
-
getTerminal: overrides.getTerminal,
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
exports.createPresentationWindow = createPresentationWindow;
|
|
105
|
-
function createPresentation(overrides) {
|
|
106
|
-
var _a, _b, _c, _d, _e, _f;
|
|
107
|
-
if (overrides === void 0) { overrides = {}; }
|
|
108
|
-
return {
|
|
109
|
-
id: (_a = overrides.id) !== null && _a !== void 0 ? _a : 'id',
|
|
110
|
-
name: (_b = overrides.name) !== null && _b !== void 0 ? _b : 'name',
|
|
111
|
-
applicationDeploymentId: (_c = overrides.applicationDeploymentId) !== null && _c !== void 0 ? _c : 'applicationDeploymentId',
|
|
112
|
-
themeId: (_d = overrides.themeId) !== null && _d !== void 0 ? _d : null,
|
|
113
|
-
applicationVariables: (_e = overrides.applicationVariables) !== null && _e !== void 0 ? _e : {},
|
|
114
|
-
duration: (_f = overrides.duration) !== null && _f !== void 0 ? _f : 1,
|
|
115
|
-
r: createPresentationRelationships(overrides.r),
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
exports.createPresentation = createPresentation;
|
|
119
|
-
function createPresentationRelationships(overrides) {
|
|
120
|
-
var _a, _b;
|
|
121
|
-
if (overrides === void 0) { overrides = {}; }
|
|
122
|
-
return {
|
|
123
|
-
resource: (_a = overrides.resource) !== null && _a !== void 0 ? _a : {
|
|
124
|
-
updatedAt: 'updatedAt',
|
|
125
|
-
createdAt: 'createdAt',
|
|
126
|
-
},
|
|
127
|
-
presentationsPlaylists: (_b = overrides.presentationsPlaylists) !== null && _b !== void 0 ? _b : [],
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
exports.createPresentationRelationships = createPresentationRelationships;
|
|
131
|
-
function createApplicationVersion(overrides) {
|
|
132
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
133
|
-
if (overrides === void 0) { overrides = {}; }
|
|
134
|
-
return {
|
|
135
|
-
id: (_a = overrides.id) !== null && _a !== void 0 ? _a : 'id',
|
|
136
|
-
name: (_b = overrides.name) !== null && _b !== void 0 ? _b : 'name',
|
|
137
|
-
applicationId: (_c = overrides.applicationId) !== null && _c !== void 0 ? _c : 'applicationId',
|
|
138
|
-
embeddedUrlFormat: (_d = overrides.embeddedUrlFormat) !== null && _d !== void 0 ? _d : null,
|
|
139
|
-
configurableDuration: (_e = overrides.configurableDuration) !== null && _e !== void 0 ? _e : false,
|
|
140
|
-
sourceUrl: (_f = overrides.sourceUrl) !== null && _f !== void 0 ? _f : null,
|
|
141
|
-
presentationProperties: (_g = overrides.presentationProperties) !== null && _g !== void 0 ? _g : [],
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
exports.createApplicationVersion = createApplicationVersion;
|
|
145
|
-
function createPlaylistWindowManagerState(overrides) {
|
|
146
|
-
var _a, _b, _c, _d;
|
|
147
|
-
if (overrides === void 0) { overrides = {}; }
|
|
148
|
-
return new PlaylistWindowManagerState_1.default({
|
|
149
|
-
presentations: (_a = overrides.presentations) !== null && _a !== void 0 ? _a : {},
|
|
150
|
-
applicationVersions: (_b = overrides.applicationVersions) !== null && _b !== void 0 ? _b : {},
|
|
151
|
-
themes: (_c = overrides.themes) !== null && _c !== void 0 ? _c : {},
|
|
152
|
-
publishedAt: (_d = overrides.publishedAt) !== null && _d !== void 0 ? _d : 'publishedAt',
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
exports.createPlaylistWindowManagerState = createPlaylistWindowManagerState;
|
|
156
|
-
function createRuleEngineState(playlists, presentations, rulesDataStore, isMultitimezoneEnabled) {
|
|
157
|
-
if (playlists === void 0) { playlists = {}; }
|
|
158
|
-
if (presentations === void 0) { presentations = {}; }
|
|
159
|
-
if (rulesDataStore === void 0) { rulesDataStore = {}; }
|
|
160
|
-
if (isMultitimezoneEnabled === void 0) { isMultitimezoneEnabled = false; }
|
|
161
|
-
return new re.State(playlists, presentations, rulesDataStore, isMultitimezoneEnabled);
|
|
162
|
-
}
|
|
163
|
-
exports.createRuleEngineState = createRuleEngineState;
|
|
164
|
-
function createLogger(overrides) {
|
|
165
|
-
var _a, _b, _c, _d;
|
|
166
|
-
if (overrides === void 0) { overrides = {}; }
|
|
167
|
-
var noop = function () { };
|
|
168
|
-
return {
|
|
169
|
-
debug: (_a = overrides.debug) !== null && _a !== void 0 ? _a : noop,
|
|
170
|
-
info: (_b = overrides.info) !== null && _b !== void 0 ? _b : noop,
|
|
171
|
-
warn: (_c = overrides.warn) !== null && _c !== void 0 ? _c : noop,
|
|
172
|
-
error: (_d = overrides.error) !== null && _d !== void 0 ? _d : noop,
|
|
173
|
-
};
|
|
174
|
-
}
|
|
175
|
-
exports.createLogger = createLogger;
|
|
176
|
-
function createRenderer() {
|
|
177
|
-
var createWindowOpts = null;
|
|
178
|
-
return {
|
|
179
|
-
createWindow: jest.fn(function (opts) {
|
|
180
|
-
createWindowOpts = opts;
|
|
181
|
-
}),
|
|
182
|
-
loadWindow: jest.fn(),
|
|
183
|
-
updateWindowBounds: jest.fn(),
|
|
184
|
-
showWindow: jest.fn(),
|
|
185
|
-
hideWindow: jest.fn(),
|
|
186
|
-
removeWindow: jest.fn(),
|
|
187
|
-
sendMessageString: jest.fn(),
|
|
188
|
-
sendMessageObject: jest.fn(),
|
|
189
|
-
muteWindow: jest.fn(),
|
|
190
|
-
unMuteWindow: jest.fn(),
|
|
191
|
-
runReceiveMessageCallback: function (type, payload) {
|
|
192
|
-
if (createWindowOpts === null || createWindowOpts === void 0 ? void 0 : createWindowOpts.receiveMessageCallback) {
|
|
193
|
-
createWindowOpts.receiveMessageCallback(type, payload);
|
|
194
|
-
}
|
|
195
|
-
else {
|
|
196
|
-
throw new Error('No receiveMessageCallback defined, make sure to call window.load first');
|
|
197
|
-
}
|
|
198
|
-
},
|
|
199
|
-
runErrorCallback: function (error) {
|
|
200
|
-
if (createWindowOpts === null || createWindowOpts === void 0 ? void 0 : createWindowOpts.errorCallback) {
|
|
201
|
-
createWindowOpts.errorCallback(error);
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
throw new Error('No errorCallback defined, make sure to call window.load first');
|
|
205
|
-
}
|
|
206
|
-
},
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
exports.createRenderer = createRenderer;
|