@blackbaud/sky-addin-client 1.2.0 → 1.2.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 +124 -118
- package/README.md +470 -470
- package/bundles/sky-addin-client.global-es2015.js +914 -851
- package/bundles/sky-addin-client.global-es2015.min.js +1 -1
- package/bundles/sky-addin-client.global.js +926 -863
- package/bundles/sky-addin-client.global.min.js +1 -1
- package/bundles/sky-addin-client.umd-es2015.js +914 -851
- package/bundles/sky-addin-client.umd-es2015.min.js +1 -1
- package/bundles/sky-addin-client.umd.js +926 -863
- package/bundles/sky-addin-client.umd.min.js +1 -1
- package/index.d.ts +1 -1
- package/index.js +17 -17
- package/package.json +67 -67
- package/src/addin/addin-client.d.ts +277 -277
- package/src/addin/addin-client.js +703 -640
- package/src/addin/addin-client.js.map +1 -1
- package/src/addin/addin-client.spec.d.ts +1 -1
- package/src/addin/addin-client.spec.js +1476 -1414
- package/src/addin/addin-client.spec.js.map +1 -1
- package/src/addin/client-interfaces/addin-action-button-config.d.ts +10 -10
- package/src/addin/client-interfaces/addin-action-button-config.js +2 -2
- package/src/addin/client-interfaces/addin-button-config.d.ts +10 -10
- package/src/addin/client-interfaces/addin-button-config.js +2 -2
- package/src/addin/client-interfaces/addin-button-style.d.ts +6 -6
- package/src/addin/client-interfaces/addin-button-style.js +17 -17
- package/src/addin/client-interfaces/addin-client-args.d.ts +10 -10
- package/src/addin/client-interfaces/addin-client-args.js +2 -2
- package/src/addin/client-interfaces/addin-client-callbacks.d.ts +40 -40
- package/src/addin/client-interfaces/addin-client-callbacks.js +2 -2
- package/src/addin/client-interfaces/addin-client-close-modal-args.d.ts +10 -10
- package/src/addin/client-interfaces/addin-client-close-modal-args.js +2 -2
- package/src/addin/client-interfaces/addin-client-event-args.d.ts +13 -13
- package/src/addin/client-interfaces/addin-client-event-args.js +2 -2
- package/src/addin/client-interfaces/addin-client-flyout-permalink.d.ts +14 -14
- package/src/addin/client-interfaces/addin-client-flyout-permalink.js +2 -2
- package/src/addin/client-interfaces/addin-client-init-args.d.ts +28 -28
- package/src/addin/client-interfaces/addin-client-init-args.js +2 -2
- package/src/addin/client-interfaces/addin-client-navigate-args.d.ts +9 -9
- package/src/addin/client-interfaces/addin-client-navigate-args.js +2 -2
- package/src/addin/client-interfaces/addin-client-open-help-args.d.ts +10 -10
- package/src/addin/client-interfaces/addin-client-open-help-args.js +2 -2
- package/src/addin/client-interfaces/addin-client-ready-args.d.ts +39 -39
- package/src/addin/client-interfaces/addin-client-ready-args.js +2 -2
- package/src/addin/client-interfaces/addin-client-ready-button-config.d.ts +10 -10
- package/src/addin/client-interfaces/addin-client-ready-button-config.js +2 -2
- package/src/addin/client-interfaces/addin-client-show-confirm-args.d.ts +19 -19
- package/src/addin/client-interfaces/addin-client-show-confirm-args.js +2 -2
- package/src/addin/client-interfaces/addin-client-show-error-args.d.ts +18 -18
- package/src/addin/client-interfaces/addin-client-show-error-args.js +2 -2
- package/src/addin/client-interfaces/addin-client-show-flyout-args.d.ts +46 -46
- package/src/addin/client-interfaces/addin-client-show-flyout-args.js +2 -2
- package/src/addin/client-interfaces/addin-client-show-flyout-result.d.ts +9 -9
- package/src/addin/client-interfaces/addin-client-show-flyout-result.js +2 -2
- package/src/addin/client-interfaces/addin-client-show-modal-args.d.ts +14 -14
- package/src/addin/client-interfaces/addin-client-show-modal-args.js +2 -2
- package/src/addin/client-interfaces/addin-client-show-modal-result.d.ts +10 -10
- package/src/addin/client-interfaces/addin-client-show-modal-result.js +2 -2
- package/src/addin/client-interfaces/addin-client-show-toast-args.d.ts +15 -15
- package/src/addin/client-interfaces/addin-client-show-toast-args.js +2 -2
- package/src/addin/client-interfaces/addin-client-theme-settings.d.ts +13 -13
- package/src/addin/client-interfaces/addin-client-theme-settings.js +2 -2
- package/src/addin/client-interfaces/addin-confirm-button-style.d.ts +8 -8
- package/src/addin/client-interfaces/addin-confirm-button-style.js +16 -16
- package/src/addin/client-interfaces/addin-confirm-button.d.ts +26 -26
- package/src/addin/client-interfaces/addin-confirm-button.js +2 -2
- package/src/addin/client-interfaces/addin-modal-config.d.ts +12 -12
- package/src/addin/client-interfaces/addin-modal-config.js +2 -2
- package/src/addin/client-interfaces/addin-tab-config.d.ts +9 -9
- package/src/addin/client-interfaces/addin-tab-config.js +2 -2
- package/src/addin/client-interfaces/addin-tab-summary-style.d.ts +4 -4
- package/src/addin/client-interfaces/addin-tab-summary-style.js +13 -13
- package/src/addin/client-interfaces/addin-tile-config.d.ts +32 -32
- package/src/addin/client-interfaces/addin-tile-config.js +2 -2
- package/src/addin/client-interfaces/addin-tile-summary-style.d.ts +5 -5
- package/src/addin/client-interfaces/addin-tile-summary-style.js +15 -15
- package/src/addin/client-interfaces/addin-toast-style.d.ts +6 -6
- package/src/addin/client-interfaces/addin-toast-style.js +17 -17
- package/src/addin/client-interfaces/index.d.ts +27 -27
- package/src/addin/client-interfaces/index.js +43 -43
- package/src/addin/host-interfaces/addin-host-message-event-data.d.ts +23 -23
- package/src/addin/host-interfaces/addin-host-message-event-data.js +2 -2
- package/src/addin/host-interfaces/addin-host-message.d.ts +44 -44
- package/src/addin/host-interfaces/addin-host-message.js +2 -2
- package/src/addin/host-interfaces/index.d.ts +2 -2
- package/src/addin/host-interfaces/index.js +18 -18
- package/src/addin/index.d.ts +3 -3
- package/src/addin/index.js +19 -19
|
@@ -1,1415 +1,1477 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
var addin_client_1 = require("./addin-client");
|
|
4
|
-
var addin_confirm_button_style_1 = require("./client-interfaces/addin-confirm-button-style");
|
|
5
|
-
var addin_toast_style_1 = require("./client-interfaces/addin-toast-style");
|
|
6
|
-
var TEST_HOST_ORIGIN = 'https://host.nxt.blackbaud.com';
|
|
7
|
-
function postMessageFromHost(msg, origin) {
|
|
8
|
-
if (!origin) {
|
|
9
|
-
origin = TEST_HOST_ORIGIN;
|
|
10
|
-
}
|
|
11
|
-
window.dispatchEvent(new MessageEvent('message', {
|
|
12
|
-
data: msg,
|
|
13
|
-
origin: origin
|
|
14
|
-
}));
|
|
15
|
-
}
|
|
16
|
-
function initializeHost() {
|
|
17
|
-
var msg = {
|
|
18
|
-
message: {
|
|
19
|
-
context: 'my_context',
|
|
20
|
-
envId: 'my_envid'
|
|
21
|
-
},
|
|
22
|
-
messageType: 'host-ready',
|
|
23
|
-
source: 'bb-addin-host'
|
|
24
|
-
};
|
|
25
|
-
postMessageFromHost(msg);
|
|
26
|
-
}
|
|
27
|
-
describe('AddinClient ', function () {
|
|
28
|
-
// Set the addinId query string.
|
|
29
|
-
addin_client_1.AddinClient.getQueryString = function () {
|
|
30
|
-
return '?test=value&addinId=test_id&test2=value2';
|
|
31
|
-
};
|
|
32
|
-
describe('constructor', function () {
|
|
33
|
-
it('should raise "ready" message to "*" on constructor including the addinId from the query string.', function () {
|
|
34
|
-
var post;
|
|
35
|
-
window.parent.postMessage = function (message, targetOrigin) {
|
|
36
|
-
post = {
|
|
37
|
-
message: message,
|
|
38
|
-
targetOrigin: targetOrigin
|
|
39
|
-
};
|
|
40
|
-
};
|
|
41
|
-
var client = new addin_client_1.AddinClient({
|
|
42
|
-
callbacks: {
|
|
43
|
-
init: function () { return; }
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
client.destroy();
|
|
47
|
-
expect(post.message.messageType).toBe('ready');
|
|
48
|
-
expect(post.message.source).toBe('bb-addin-client');
|
|
49
|
-
expect(post.message.addinId).toBe('test_id');
|
|
50
|
-
expect(post.targetOrigin).toBe('*');
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
describe('getAuthToken', function () {
|
|
54
|
-
it('should delegate to the "getUserIdentityToken" function.', function () {
|
|
55
|
-
var delegated = false;
|
|
56
|
-
var client = new addin_client_1.AddinClient({
|
|
57
|
-
callbacks: {
|
|
58
|
-
init: function () { return; }
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
initializeHost();
|
|
62
|
-
spyOn(client, 'getUserIdentityToken').and.callFake(function () {
|
|
63
|
-
delegated = true;
|
|
64
|
-
return Promise.resolve('');
|
|
65
|
-
});
|
|
66
|
-
client.getAuthToken();
|
|
67
|
-
client.destroy();
|
|
68
|
-
expect(delegated).toBe(true);
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
describe('handleMessage', function () {
|
|
72
|
-
describe('host-ready', function () {
|
|
73
|
-
it('should not call the "init" callback event if the source is not "bb-addin-host".', function () {
|
|
74
|
-
var initCalled = false;
|
|
75
|
-
var client = new addin_client_1.AddinClient({
|
|
76
|
-
callbacks: {
|
|
77
|
-
init: function () { initCalled = true; }
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
var msg = {
|
|
81
|
-
message: {},
|
|
82
|
-
messageType: 'host-ready',
|
|
83
|
-
source: 'not-bb-addin-host'
|
|
84
|
-
};
|
|
85
|
-
postMessageFromHost(msg);
|
|
86
|
-
client.destroy();
|
|
87
|
-
expect(initCalled).toBe(false);
|
|
88
|
-
});
|
|
89
|
-
it('should call the "init" callback if source is "bb-addin-host" and pass through context and event id.', function () {
|
|
90
|
-
var initArgs;
|
|
91
|
-
var client = new addin_client_1.AddinClient({
|
|
92
|
-
callbacks: {
|
|
93
|
-
init: function (args) {
|
|
94
|
-
initArgs = args;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
var msg = {
|
|
99
|
-
message: {
|
|
100
|
-
context: 'my_context',
|
|
101
|
-
envId: 'my_envid',
|
|
102
|
-
supportedEventTypes: ['update-event'],
|
|
103
|
-
themeSettings: {
|
|
104
|
-
mode: 'light',
|
|
105
|
-
theme: 'default'
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
messageType: 'host-ready',
|
|
109
|
-
source: 'bb-addin-host'
|
|
110
|
-
};
|
|
111
|
-
postMessageFromHost(msg);
|
|
112
|
-
client.destroy();
|
|
113
|
-
expect(initArgs.context).toBe('my_context');
|
|
114
|
-
expect(initArgs.envId).toBe('my_envid');
|
|
115
|
-
expect(initArgs.supportedEventTypes).toEqual(['update-event']);
|
|
116
|
-
expect(initArgs.themeSettings).toEqual({
|
|
117
|
-
mode: 'light',
|
|
118
|
-
theme: 'default'
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
it('should disregard host messages from the wrong origin.', function () {
|
|
123
|
-
var buttonClickCalled = false;
|
|
124
|
-
var client = new addin_client_1.AddinClient({
|
|
125
|
-
callbacks: {
|
|
126
|
-
buttonClick: function () { buttonClickCalled = true; },
|
|
127
|
-
init: function () { return; }
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
var msg = {
|
|
131
|
-
message: {},
|
|
132
|
-
messageType: 'button-click',
|
|
133
|
-
source: 'bb-addin-host'
|
|
134
|
-
};
|
|
135
|
-
// Raising this message even though the host never issued host-ready.
|
|
136
|
-
// Therefore the origin should not be trusted and message ignored.
|
|
137
|
-
postMessageFromHost(msg);
|
|
138
|
-
client.destroy();
|
|
139
|
-
expect(buttonClickCalled).toBe(false);
|
|
140
|
-
});
|
|
141
|
-
describe('button-click', function () {
|
|
142
|
-
it('should call the "buttonClick" callback.', function () {
|
|
143
|
-
var buttonClickCalled = false;
|
|
144
|
-
var client = new addin_client_1.AddinClient({
|
|
145
|
-
callbacks: {
|
|
146
|
-
buttonClick: function () { buttonClickCalled = true; },
|
|
147
|
-
init: function () { return; }
|
|
148
|
-
}
|
|
149
|
-
});
|
|
150
|
-
initializeHost();
|
|
151
|
-
var msg = {
|
|
152
|
-
message: {},
|
|
153
|
-
messageType: 'button-click',
|
|
154
|
-
source: 'bb-addin-host'
|
|
155
|
-
};
|
|
156
|
-
postMessageFromHost(msg);
|
|
157
|
-
client.destroy();
|
|
158
|
-
expect(buttonClickCalled).toBe(true);
|
|
159
|
-
});
|
|
160
|
-
it('should tolerate the "buttonClick" callback being undefined.', function () {
|
|
161
|
-
var client = new addin_client_1.AddinClient({
|
|
162
|
-
callbacks: {
|
|
163
|
-
init: function () { return; }
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
initializeHost();
|
|
167
|
-
var msg = {
|
|
168
|
-
message: {},
|
|
169
|
-
messageType: 'button-click',
|
|
170
|
-
source: 'bb-addin-host'
|
|
171
|
-
};
|
|
172
|
-
postMessageFromHost(msg);
|
|
173
|
-
client.destroy();
|
|
174
|
-
// No assertion. Just don't fail.
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
describe('update-context', function () {
|
|
178
|
-
it('should call the "updateContext" callback.', function () {
|
|
179
|
-
var contextUpdated = false;
|
|
180
|
-
var client = new addin_client_1.AddinClient({
|
|
181
|
-
callbacks: {
|
|
182
|
-
init: function () { return; },
|
|
183
|
-
updateContext: function (contextId) { contextUpdated = true; }
|
|
184
|
-
}
|
|
185
|
-
});
|
|
186
|
-
initializeHost();
|
|
187
|
-
var msg = {
|
|
188
|
-
message: { context: { id: '123' } },
|
|
189
|
-
messageType: 'update-context',
|
|
190
|
-
source: 'bb-addin-host'
|
|
191
|
-
};
|
|
192
|
-
postMessageFromHost(msg);
|
|
193
|
-
client.destroy();
|
|
194
|
-
expect(contextUpdated).toBeTrue();
|
|
195
|
-
});
|
|
196
|
-
it('should tolerate the "updateContext" callback being undefined.', function () {
|
|
197
|
-
var client = new addin_client_1.AddinClient({
|
|
198
|
-
callbacks: {
|
|
199
|
-
init: function () { return; }
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
initializeHost();
|
|
203
|
-
var msg = {
|
|
204
|
-
message: {},
|
|
205
|
-
messageType: 'update-context',
|
|
206
|
-
source: 'bb-addin-host'
|
|
207
|
-
};
|
|
208
|
-
postMessageFromHost(msg);
|
|
209
|
-
client.destroy();
|
|
210
|
-
// No assertion. Just don't fail.
|
|
211
|
-
});
|
|
212
|
-
});
|
|
213
|
-
describe('help-click', function () {
|
|
214
|
-
it('should call the "helpClick" callback.', function () {
|
|
215
|
-
var helpClickCalled = false;
|
|
216
|
-
var client = new addin_client_1.AddinClient({
|
|
217
|
-
callbacks: {
|
|
218
|
-
helpClick: function () { helpClickCalled = true; },
|
|
219
|
-
init: function () { return; }
|
|
220
|
-
}
|
|
221
|
-
});
|
|
222
|
-
initializeHost();
|
|
223
|
-
var msg = {
|
|
224
|
-
message: {},
|
|
225
|
-
messageType: 'help-click',
|
|
226
|
-
source: 'bb-addin-host'
|
|
227
|
-
};
|
|
228
|
-
postMessageFromHost(msg);
|
|
229
|
-
client.destroy();
|
|
230
|
-
expect(helpClickCalled).toBe(true);
|
|
231
|
-
});
|
|
232
|
-
it('should tolerate the "helpClick" callback being undefined.', function () {
|
|
233
|
-
var client = new addin_client_1.AddinClient({
|
|
234
|
-
callbacks: {
|
|
235
|
-
init: function () { return; }
|
|
236
|
-
}
|
|
237
|
-
});
|
|
238
|
-
initializeHost();
|
|
239
|
-
var msg = {
|
|
240
|
-
message: {},
|
|
241
|
-
messageType: 'help-click',
|
|
242
|
-
source: 'bb-addin-host'
|
|
243
|
-
};
|
|
244
|
-
postMessageFromHost(msg);
|
|
245
|
-
client.destroy();
|
|
246
|
-
// No assertion. Just don't fail.
|
|
247
|
-
});
|
|
248
|
-
});
|
|
249
|
-
describe('settings-click', function () {
|
|
250
|
-
it('should call the "settingsClick" callback.', function () {
|
|
251
|
-
var settingsClickCalled = false;
|
|
252
|
-
var client = new addin_client_1.AddinClient({
|
|
253
|
-
callbacks: {
|
|
254
|
-
init: function () { return; },
|
|
255
|
-
settingsClick: function () { settingsClickCalled = true; }
|
|
256
|
-
}
|
|
257
|
-
});
|
|
258
|
-
initializeHost();
|
|
259
|
-
var msg = {
|
|
260
|
-
message: {},
|
|
261
|
-
messageType: 'settings-click',
|
|
262
|
-
source: 'bb-addin-host'
|
|
263
|
-
};
|
|
264
|
-
postMessageFromHost(msg);
|
|
265
|
-
client.destroy();
|
|
266
|
-
expect(settingsClickCalled).toBe(true);
|
|
267
|
-
});
|
|
268
|
-
it('should tolerate the "settingsClick" callback being undefined.', function () {
|
|
269
|
-
var client = new addin_client_1.AddinClient({
|
|
270
|
-
callbacks: {
|
|
271
|
-
init: function () { return; }
|
|
272
|
-
}
|
|
273
|
-
});
|
|
274
|
-
initializeHost();
|
|
275
|
-
var msg = {
|
|
276
|
-
message: {},
|
|
277
|
-
messageType: 'settings-click',
|
|
278
|
-
source: 'bb-addin-host'
|
|
279
|
-
};
|
|
280
|
-
postMessageFromHost(msg);
|
|
281
|
-
client.destroy();
|
|
282
|
-
// No assertion. Just don't fail.
|
|
283
|
-
});
|
|
284
|
-
});
|
|
285
|
-
describe('theme-change', function () {
|
|
286
|
-
it('should call the "themeChange" callback.', function () {
|
|
287
|
-
var themeChangeCalled = false;
|
|
288
|
-
var client = new addin_client_1.AddinClient({
|
|
289
|
-
callbacks: {
|
|
290
|
-
init: function () { return; },
|
|
291
|
-
themeChange: function () { themeChangeCalled = true; }
|
|
292
|
-
}
|
|
293
|
-
});
|
|
294
|
-
initializeHost();
|
|
295
|
-
var msg = {
|
|
296
|
-
message: {},
|
|
297
|
-
messageType: 'theme-change',
|
|
298
|
-
source: 'bb-addin-host'
|
|
299
|
-
};
|
|
300
|
-
postMessageFromHost(msg);
|
|
301
|
-
client.destroy();
|
|
302
|
-
expect(themeChangeCalled).toBe(true);
|
|
303
|
-
});
|
|
304
|
-
it('should tolerate the "themeChange" callback being undefined.', function () {
|
|
305
|
-
var client = new addin_client_1.AddinClient({
|
|
306
|
-
callbacks: {
|
|
307
|
-
init: function () { return; }
|
|
308
|
-
}
|
|
309
|
-
});
|
|
310
|
-
initializeHost();
|
|
311
|
-
var msg = {
|
|
312
|
-
message: {},
|
|
313
|
-
messageType: 'themeChange',
|
|
314
|
-
source: 'bb-addin-host'
|
|
315
|
-
};
|
|
316
|
-
postMessageFromHost(msg);
|
|
317
|
-
client.destroy();
|
|
318
|
-
// No assertion. Just don't fail.
|
|
319
|
-
});
|
|
320
|
-
});
|
|
321
|
-
describe('auth-token', function () {
|
|
322
|
-
it('should pass result back through promise from getUserIdentityToken.', function (done) {
|
|
323
|
-
var tokenReceived;
|
|
324
|
-
var client = new addin_client_1.AddinClient({
|
|
325
|
-
callbacks: {
|
|
326
|
-
init: function () { return; }
|
|
327
|
-
}
|
|
328
|
-
});
|
|
329
|
-
initializeHost();
|
|
330
|
-
client.getUserIdentityToken().then(function (token) {
|
|
331
|
-
tokenReceived = token;
|
|
332
|
-
});
|
|
333
|
-
var msg = {
|
|
334
|
-
message: {
|
|
335
|
-
authToken: 'the auth token',
|
|
336
|
-
authTokenRequestId: 1 // One because this is the first request for this client.
|
|
337
|
-
},
|
|
338
|
-
messageType: 'auth-token',
|
|
339
|
-
source: 'bb-addin-host'
|
|
340
|
-
};
|
|
341
|
-
postMessageFromHost(msg);
|
|
342
|
-
client.destroy();
|
|
343
|
-
// Delay the vaildation until after the post message is done.
|
|
344
|
-
setTimeout(function () {
|
|
345
|
-
expect(tokenReceived).toBe('the auth token');
|
|
346
|
-
done();
|
|
347
|
-
}, 0);
|
|
348
|
-
});
|
|
349
|
-
});
|
|
350
|
-
describe('auth-token-fail', function () {
|
|
351
|
-
it('should reject the promise from getUserIdentityToken and return the reason.', function () {
|
|
352
|
-
var reasonReceived;
|
|
353
|
-
var client = new addin_client_1.AddinClient({
|
|
354
|
-
callbacks: {
|
|
355
|
-
init: function () { return; }
|
|
356
|
-
}
|
|
357
|
-
});
|
|
358
|
-
initializeHost();
|
|
359
|
-
client.getUserIdentityToken().catch(function (reason) {
|
|
360
|
-
reasonReceived = reason;
|
|
361
|
-
});
|
|
362
|
-
var msg = {
|
|
363
|
-
message: {
|
|
364
|
-
authTokenRequestId: 1,
|
|
365
|
-
reason: 'the reason'
|
|
366
|
-
},
|
|
367
|
-
messageType: 'auth-token-fail',
|
|
368
|
-
source: 'bb-addin-host'
|
|
369
|
-
};
|
|
370
|
-
postMessageFromHost(msg);
|
|
371
|
-
client.destroy();
|
|
372
|
-
// Delay the vaildation until after the post message is done.
|
|
373
|
-
setTimeout(function () {
|
|
374
|
-
expect(reasonReceived).toBe('the reason');
|
|
375
|
-
}, 1);
|
|
376
|
-
});
|
|
377
|
-
});
|
|
378
|
-
describe('close-modal', function () {
|
|
379
|
-
it('should pass context back through promise from showModal.', function (done) {
|
|
380
|
-
var testContext = {};
|
|
381
|
-
var contextReceived = null;
|
|
382
|
-
var client = new addin_client_1.AddinClient({
|
|
383
|
-
callbacks: {
|
|
384
|
-
init: function () { return; }
|
|
385
|
-
}
|
|
386
|
-
});
|
|
387
|
-
initializeHost();
|
|
388
|
-
var args = {};
|
|
389
|
-
client.showModal(args).modalClosed.then(function (ctx) {
|
|
390
|
-
contextReceived = ctx;
|
|
391
|
-
});
|
|
392
|
-
var msg = {
|
|
393
|
-
message: {
|
|
394
|
-
context: testContext,
|
|
395
|
-
modalRequestId: 1 // One because this is the first request for this client.
|
|
396
|
-
},
|
|
397
|
-
messageType: 'modal-closed',
|
|
398
|
-
source: 'bb-addin-host'
|
|
399
|
-
};
|
|
400
|
-
postMessageFromHost(msg);
|
|
401
|
-
client.destroy();
|
|
402
|
-
// Delay the vaildation until after the post message is done.
|
|
403
|
-
setTimeout(function () {
|
|
404
|
-
expect(contextReceived).toBe(testContext);
|
|
405
|
-
done();
|
|
406
|
-
}, 100);
|
|
407
|
-
});
|
|
408
|
-
});
|
|
409
|
-
});
|
|
410
|
-
describe('init ready callback', function () {
|
|
411
|
-
it('should raise "addin-ready" event.', function () {
|
|
412
|
-
var readyArgs = {};
|
|
413
|
-
var postedMessage;
|
|
414
|
-
var postedOrigin;
|
|
415
|
-
var client = new addin_client_1.AddinClient({
|
|
416
|
-
callbacks: {
|
|
417
|
-
init: function (args) {
|
|
418
|
-
args.ready(readyArgs);
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
});
|
|
422
|
-
var msg = {
|
|
423
|
-
message: {},
|
|
424
|
-
messageType: 'host-ready',
|
|
425
|
-
source: 'bb-addin-host'
|
|
426
|
-
};
|
|
427
|
-
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
428
|
-
postedMessage = message;
|
|
429
|
-
postedOrigin = targetOrigin;
|
|
430
|
-
});
|
|
431
|
-
postMessageFromHost(msg);
|
|
432
|
-
client.destroy();
|
|
433
|
-
expect(postedMessage.message).toBe(readyArgs);
|
|
434
|
-
expect(postedMessage.messageType).toBe('addin-ready');
|
|
435
|
-
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
436
|
-
});
|
|
437
|
-
});
|
|
438
|
-
describe('closeModal', function () {
|
|
439
|
-
it('should raise "close-modal" event.', function () {
|
|
440
|
-
var postedMessage;
|
|
441
|
-
var postedOrigin;
|
|
442
|
-
var client = new addin_client_1.AddinClient({
|
|
443
|
-
callbacks: {
|
|
444
|
-
init: function () { return; }
|
|
445
|
-
}
|
|
446
|
-
});
|
|
447
|
-
initializeHost();
|
|
448
|
-
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
449
|
-
postedMessage = message;
|
|
450
|
-
postedOrigin = targetOrigin;
|
|
451
|
-
});
|
|
452
|
-
var args = {};
|
|
453
|
-
client.closeModal(args);
|
|
454
|
-
client.destroy();
|
|
455
|
-
expect(postedMessage.message).toBe(args);
|
|
456
|
-
expect(postedMessage.messageType).toBe('close-modal');
|
|
457
|
-
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
458
|
-
});
|
|
459
|
-
});
|
|
460
|
-
describe('getUserIdentityToken', function () {
|
|
461
|
-
it('should raise "get-auth-token" event with increasing request id.', function () {
|
|
462
|
-
var postedMessage;
|
|
463
|
-
var postedOrigin;
|
|
464
|
-
var client = new addin_client_1.AddinClient({
|
|
465
|
-
callbacks: {
|
|
466
|
-
init: function () { return; }
|
|
467
|
-
}
|
|
468
|
-
});
|
|
469
|
-
initializeHost();
|
|
470
|
-
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
471
|
-
postedMessage = message;
|
|
472
|
-
postedOrigin = targetOrigin;
|
|
473
|
-
});
|
|
474
|
-
client.getUserIdentityToken();
|
|
475
|
-
expect(postedMessage.message.authTokenRequestId).toBe(1);
|
|
476
|
-
expect(postedMessage.messageType).toBe('get-auth-token');
|
|
477
|
-
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
478
|
-
client.getUserIdentityToken();
|
|
479
|
-
// A second call should increment the request id
|
|
480
|
-
expect(postedMessage.message.authTokenRequestId).toBe(2);
|
|
481
|
-
expect(postedMessage.messageType).toBe('get-auth-token');
|
|
482
|
-
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
483
|
-
client.destroy();
|
|
484
|
-
});
|
|
485
|
-
});
|
|
486
|
-
describe('navigate', function () {
|
|
487
|
-
it('should raise "navigate" event with proper url.', function () {
|
|
488
|
-
var postedMessage;
|
|
489
|
-
var postedOrigin;
|
|
490
|
-
var client = new addin_client_1.AddinClient({
|
|
491
|
-
callbacks: {
|
|
492
|
-
init: function () { return; }
|
|
493
|
-
}
|
|
494
|
-
});
|
|
495
|
-
initializeHost();
|
|
496
|
-
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
497
|
-
postedMessage = message;
|
|
498
|
-
postedOrigin = targetOrigin;
|
|
499
|
-
});
|
|
500
|
-
var args = {
|
|
501
|
-
url: 'https://renxt.blackbaud.com?test=1'
|
|
502
|
-
};
|
|
503
|
-
client.navigate(args);
|
|
504
|
-
client.destroy();
|
|
505
|
-
expect(postedMessage.message.url).toBe(args.url);
|
|
506
|
-
expect(postedMessage.messageType).toBe('navigate');
|
|
507
|
-
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
508
|
-
});
|
|
509
|
-
});
|
|
510
|
-
describe('open-help', function () {
|
|
511
|
-
it('should raise "open-help" event with proper help key.', function () {
|
|
512
|
-
var postedMessage;
|
|
513
|
-
var postedOrigin;
|
|
514
|
-
var client = new addin_client_1.AddinClient({
|
|
515
|
-
callbacks: {
|
|
516
|
-
init: function () { return; }
|
|
517
|
-
}
|
|
518
|
-
});
|
|
519
|
-
initializeHost();
|
|
520
|
-
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
521
|
-
postedMessage = message;
|
|
522
|
-
postedOrigin = targetOrigin;
|
|
523
|
-
});
|
|
524
|
-
var args = {
|
|
525
|
-
helpKey: 'test-help-key.html'
|
|
526
|
-
};
|
|
527
|
-
client.openHelp(args);
|
|
528
|
-
client.destroy();
|
|
529
|
-
expect(postedMessage.message.helpKey).toBe(args.helpKey);
|
|
530
|
-
expect(postedMessage.messageType).toBe('open-help');
|
|
531
|
-
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
532
|
-
});
|
|
533
|
-
});
|
|
534
|
-
describe('showModal', function () {
|
|
535
|
-
it('should raise "show-modal" event with increasing request id.', function () {
|
|
536
|
-
var postedMessage;
|
|
537
|
-
var postedOrigin;
|
|
538
|
-
var client = new addin_client_1.AddinClient({
|
|
539
|
-
callbacks: {
|
|
540
|
-
init: function () { return; }
|
|
541
|
-
}
|
|
542
|
-
});
|
|
543
|
-
initializeHost();
|
|
544
|
-
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
545
|
-
postedMessage = message;
|
|
546
|
-
postedOrigin = targetOrigin;
|
|
547
|
-
});
|
|
548
|
-
var args = {};
|
|
549
|
-
client.showModal(args);
|
|
550
|
-
expect(postedMessage.message.args).toBe(args);
|
|
551
|
-
expect(postedMessage.message.modalRequestId).toBe(1);
|
|
552
|
-
expect(postedMessage.messageType).toBe('show-modal');
|
|
553
|
-
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
554
|
-
client.showModal(args);
|
|
555
|
-
// A second call should increment the request id
|
|
556
|
-
expect(postedMessage.message.args).toBe(args);
|
|
557
|
-
expect(postedMessage.message.modalRequestId).toBe(2);
|
|
558
|
-
expect(postedMessage.messageType).toBe('show-modal');
|
|
559
|
-
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
560
|
-
client.destroy();
|
|
561
|
-
});
|
|
562
|
-
});
|
|
563
|
-
describe('show-toast', function () {
|
|
564
|
-
it('should raise "show-toast" event with proper message.', function () {
|
|
565
|
-
var postedMessage;
|
|
566
|
-
var postedOrigin;
|
|
567
|
-
var client = new addin_client_1.AddinClient({
|
|
568
|
-
callbacks: {
|
|
569
|
-
init: function () { return; }
|
|
570
|
-
}
|
|
571
|
-
});
|
|
572
|
-
initializeHost();
|
|
573
|
-
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
574
|
-
postedMessage = message;
|
|
575
|
-
postedOrigin = targetOrigin;
|
|
576
|
-
});
|
|
577
|
-
var args = {
|
|
578
|
-
message: 'this is a toast message',
|
|
579
|
-
style: addin_toast_style_1.AddinToastStyle.Warning
|
|
580
|
-
};
|
|
581
|
-
client.showToast(args);
|
|
582
|
-
client.destroy();
|
|
583
|
-
expect(postedMessage.message.message).toBe(args.message);
|
|
584
|
-
expect(postedMessage.messageType).toBe('show-toast');
|
|
585
|
-
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
586
|
-
});
|
|
587
|
-
});
|
|
588
|
-
describe('show-flyout', function () {
|
|
589
|
-
it('should raise "show-flyout" event with proper message.', function (done) {
|
|
590
|
-
var postedMessage;
|
|
591
|
-
var postedOrigin;
|
|
592
|
-
var initCalled = false;
|
|
593
|
-
var flyoutNextClickCalled = false;
|
|
594
|
-
var flyoutPreviousClickCalled = false;
|
|
595
|
-
var flyoutClosedCalled = false;
|
|
596
|
-
var client = new addin_client_1.AddinClient({
|
|
597
|
-
callbacks: {
|
|
598
|
-
flyoutNextClick: function () { flyoutNextClickCalled = true; },
|
|
599
|
-
flyoutPreviousClick: function () { flyoutPreviousClickCalled = true; },
|
|
600
|
-
init: function () { initCalled = true; }
|
|
601
|
-
}
|
|
602
|
-
});
|
|
603
|
-
initializeHost();
|
|
604
|
-
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
605
|
-
postedMessage = message;
|
|
606
|
-
postedOrigin = targetOrigin;
|
|
607
|
-
});
|
|
608
|
-
var args = {
|
|
609
|
-
context: {
|
|
610
|
-
userData: 'some data'
|
|
611
|
-
},
|
|
612
|
-
defaultWidth: 600,
|
|
613
|
-
iteratorNextDisabled: false,
|
|
614
|
-
iteratorPreviousDisabled: true,
|
|
615
|
-
maxWidth: 1000,
|
|
616
|
-
minWidth: 200,
|
|
617
|
-
permalink: {
|
|
618
|
-
label: 'some label',
|
|
619
|
-
url: 'some url'
|
|
620
|
-
},
|
|
621
|
-
showIterator: true,
|
|
622
|
-
url: 'some url'
|
|
623
|
-
};
|
|
624
|
-
client.showFlyout(args)
|
|
625
|
-
.flyoutClosed.then(function () {
|
|
626
|
-
flyoutClosedCalled = true;
|
|
627
|
-
});
|
|
628
|
-
var nextClickMsg = {
|
|
629
|
-
message: {},
|
|
630
|
-
messageType: 'flyout-next-click',
|
|
631
|
-
source: 'bb-addin-host'
|
|
632
|
-
};
|
|
633
|
-
postMessageFromHost(nextClickMsg);
|
|
634
|
-
var previousClickMsg = {
|
|
635
|
-
message: {},
|
|
636
|
-
messageType: 'flyout-previous-click',
|
|
637
|
-
source: 'bb-addin-host'
|
|
638
|
-
};
|
|
639
|
-
postMessageFromHost(previousClickMsg);
|
|
640
|
-
var closedMsg = {
|
|
641
|
-
message: {},
|
|
642
|
-
messageType: 'flyout-closed',
|
|
643
|
-
source: 'bb-addin-host'
|
|
644
|
-
};
|
|
645
|
-
postMessageFromHost(closedMsg);
|
|
646
|
-
client.destroy();
|
|
647
|
-
expect(initCalled).toBe(true);
|
|
648
|
-
expect(postedMessage.message.context).toBe(args.context);
|
|
649
|
-
expect(postedMessage.message.defaultWidth).toBe(args.defaultWidth);
|
|
650
|
-
expect(postedMessage.message.iteratorNextDisabled).toBe(args.iteratorNextDisabled);
|
|
651
|
-
expect(postedMessage.message.iteratorPreviousDisabled).toBe(args.iteratorPreviousDisabled);
|
|
652
|
-
expect(postedMessage.message.maxWidth).toBe(args.maxWidth);
|
|
653
|
-
expect(postedMessage.message.minWidth).toBe(args.minWidth);
|
|
654
|
-
expect(postedMessage.message.permalink).toBe(args.permalink);
|
|
655
|
-
expect(postedMessage.message.showIterator).toBe(args.showIterator);
|
|
656
|
-
expect(postedMessage.message.url).toBe(args.url);
|
|
657
|
-
expect(postedMessage.messageType).toBe('show-flyout');
|
|
658
|
-
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
659
|
-
expect(flyoutNextClickCalled).toBe(true);
|
|
660
|
-
expect(flyoutPreviousClickCalled).toBe(true);
|
|
661
|
-
// Delay the vaildation until after the post message is done.
|
|
662
|
-
setTimeout(function () {
|
|
663
|
-
expect(flyoutClosedCalled).toBe(true);
|
|
664
|
-
done();
|
|
665
|
-
}, 100);
|
|
666
|
-
});
|
|
667
|
-
it('should raise "show-flyout" event with with default args.', function (done) {
|
|
668
|
-
var postedMessage;
|
|
669
|
-
var postedOrigin;
|
|
670
|
-
var initCalled = false;
|
|
671
|
-
var client = new addin_client_1.AddinClient({
|
|
672
|
-
callbacks: {
|
|
673
|
-
init: function () { initCalled = true; }
|
|
674
|
-
}
|
|
675
|
-
});
|
|
676
|
-
initializeHost();
|
|
677
|
-
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
678
|
-
postedMessage = message;
|
|
679
|
-
postedOrigin = targetOrigin;
|
|
680
|
-
});
|
|
681
|
-
var args = {
|
|
682
|
-
url: 'some url'
|
|
683
|
-
};
|
|
684
|
-
client.showFlyout(args);
|
|
685
|
-
client.destroy();
|
|
686
|
-
expect(initCalled).toBe(true);
|
|
687
|
-
expect(postedMessage.message.context).toBe(args.context);
|
|
688
|
-
expect(postedMessage.message.defaultWidth).toBe(args.defaultWidth);
|
|
689
|
-
expect(postedMessage.message.iteratorNextDisabled).toBe(args.iteratorNextDisabled);
|
|
690
|
-
expect(postedMessage.message.iteratorPreviousDisabled).toBe(args.iteratorPreviousDisabled);
|
|
691
|
-
expect(postedMessage.message.maxWidth).toBe(args.maxWidth);
|
|
692
|
-
expect(postedMessage.message.minWidth).toBe(args.minWidth);
|
|
693
|
-
expect(postedMessage.message.permalink).toBe(args.permalink);
|
|
694
|
-
expect(postedMessage.message.showIterator).toBe(args.showIterator);
|
|
695
|
-
expect(postedMessage.message.url).toBe(args.url);
|
|
696
|
-
expect(postedMessage.messageType).toBe('show-flyout');
|
|
697
|
-
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
698
|
-
// Delay the vaildation until after the post message is done.
|
|
699
|
-
setTimeout(function () {
|
|
700
|
-
done();
|
|
701
|
-
}, 100);
|
|
702
|
-
});
|
|
703
|
-
});
|
|
704
|
-
describe('close-flyout', function () {
|
|
705
|
-
it('should raise "close-flyout" event.', function () {
|
|
706
|
-
var postedMessage;
|
|
707
|
-
var postedOrigin;
|
|
708
|
-
var client = new addin_client_1.AddinClient({
|
|
709
|
-
callbacks: {
|
|
710
|
-
init: function () { return; }
|
|
711
|
-
}
|
|
712
|
-
});
|
|
713
|
-
initializeHost();
|
|
714
|
-
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
715
|
-
postedMessage = message;
|
|
716
|
-
postedOrigin = targetOrigin;
|
|
717
|
-
});
|
|
718
|
-
client.closeFlyout();
|
|
719
|
-
client.destroy();
|
|
720
|
-
expect(postedMessage.message).toBe(undefined);
|
|
721
|
-
expect(postedMessage.messageType).toBe('close-flyout');
|
|
722
|
-
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
723
|
-
});
|
|
724
|
-
});
|
|
725
|
-
describe('show-confirm', function () {
|
|
726
|
-
it('should raise "show-confirm" event with proper message.', function (done) {
|
|
727
|
-
var postedMessage;
|
|
728
|
-
var postedOrigin;
|
|
729
|
-
var confirmAction;
|
|
730
|
-
var client = new addin_client_1.AddinClient({
|
|
731
|
-
callbacks: {
|
|
732
|
-
init: function () { return; }
|
|
733
|
-
}
|
|
734
|
-
});
|
|
735
|
-
initializeHost();
|
|
736
|
-
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
737
|
-
postedMessage = message;
|
|
738
|
-
postedOrigin = targetOrigin;
|
|
739
|
-
});
|
|
740
|
-
var args = {
|
|
741
|
-
body: 'Confirm dialog body text',
|
|
742
|
-
buttons: [
|
|
743
|
-
{
|
|
744
|
-
action: 'action 1',
|
|
745
|
-
text: 'Action 1'
|
|
746
|
-
},
|
|
747
|
-
{
|
|
748
|
-
action: 'action 2',
|
|
749
|
-
autofocus: true,
|
|
750
|
-
style: addin_confirm_button_style_1.AddinConfirmButtonStyle.Primary,
|
|
751
|
-
text: 'Action 2'
|
|
752
|
-
}
|
|
753
|
-
],
|
|
754
|
-
message: 'This is a confirm'
|
|
755
|
-
};
|
|
756
|
-
client.showConfirm(args)
|
|
757
|
-
.then(function (result) {
|
|
758
|
-
confirmAction = result;
|
|
759
|
-
});
|
|
760
|
-
var closedMsg = {
|
|
761
|
-
message: {
|
|
762
|
-
reason: 'some action'
|
|
763
|
-
},
|
|
764
|
-
messageType: 'confirm-closed',
|
|
765
|
-
source: 'bb-addin-host'
|
|
766
|
-
};
|
|
767
|
-
postMessageFromHost(closedMsg);
|
|
768
|
-
client.destroy();
|
|
769
|
-
expect(postedMessage.message.message).toBe(args.message);
|
|
770
|
-
expect(postedMessage.messageType).toBe('show-confirm');
|
|
771
|
-
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
772
|
-
// Delay the vaildation until after the post message is done.
|
|
773
|
-
setTimeout(function () {
|
|
774
|
-
expect(confirmAction).toBe('some action');
|
|
775
|
-
done();
|
|
776
|
-
}, 100);
|
|
777
|
-
});
|
|
778
|
-
});
|
|
779
|
-
describe('show-error', function () {
|
|
780
|
-
it('should raise "show-error" event with proper message.', function () {
|
|
781
|
-
var postedMessage;
|
|
782
|
-
var postedOrigin;
|
|
783
|
-
var client = new addin_client_1.AddinClient({
|
|
784
|
-
callbacks: {
|
|
785
|
-
init: function () { return; }
|
|
786
|
-
}
|
|
787
|
-
});
|
|
788
|
-
initializeHost();
|
|
789
|
-
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
790
|
-
postedMessage = message;
|
|
791
|
-
postedOrigin = targetOrigin;
|
|
792
|
-
});
|
|
793
|
-
var args = {
|
|
794
|
-
closeText: 'Close',
|
|
795
|
-
description: 'Error desc',
|
|
796
|
-
title: 'Error title'
|
|
797
|
-
};
|
|
798
|
-
client.showError(args);
|
|
799
|
-
client.destroy();
|
|
800
|
-
expect(postedMessage.message).toBe(args);
|
|
801
|
-
expect(postedMessage.messageType).toBe('show-error');
|
|
802
|
-
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
803
|
-
});
|
|
804
|
-
});
|
|
805
|
-
describe('showWait', function () {
|
|
806
|
-
var client;
|
|
807
|
-
var spyPostMessage;
|
|
808
|
-
beforeEach(function () {
|
|
809
|
-
client = new addin_client_1.AddinClient({
|
|
810
|
-
callbacks: {
|
|
811
|
-
init: function () { return; }
|
|
812
|
-
}
|
|
813
|
-
});
|
|
814
|
-
spyPostMessage = spyOn(window.parent, 'postMessage');
|
|
815
|
-
spyPostMessage.and.stub();
|
|
816
|
-
initializeHost();
|
|
817
|
-
spyPostMessage.calls.reset();
|
|
818
|
-
});
|
|
819
|
-
afterEach(function () {
|
|
820
|
-
client.destroy();
|
|
821
|
-
});
|
|
822
|
-
it('should raise "show-wait" event.', function () {
|
|
823
|
-
var expected = jasmine.objectContaining({
|
|
824
|
-
messageType: 'show-wait'
|
|
825
|
-
});
|
|
826
|
-
client.showWait();
|
|
827
|
-
expect(window.parent.postMessage).toHaveBeenCalledWith(expected, jasmine.any(String));
|
|
828
|
-
});
|
|
829
|
-
it('should use trusted host.', function () {
|
|
830
|
-
var expected = TEST_HOST_ORIGIN;
|
|
831
|
-
client.showWait();
|
|
832
|
-
expect(spyPostMessage).toHaveBeenCalledWith(jasmine.any(Object), expected);
|
|
833
|
-
});
|
|
834
|
-
});
|
|
835
|
-
describe('hideWait', function () {
|
|
836
|
-
var client;
|
|
837
|
-
var spyPostMessage;
|
|
838
|
-
beforeEach(function () {
|
|
839
|
-
client = new addin_client_1.AddinClient({
|
|
840
|
-
callbacks: {
|
|
841
|
-
init: function () { return; }
|
|
842
|
-
}
|
|
843
|
-
});
|
|
844
|
-
spyPostMessage = spyOn(window.parent, 'postMessage');
|
|
845
|
-
spyPostMessage.and.stub();
|
|
846
|
-
initializeHost();
|
|
847
|
-
spyPostMessage.calls.reset();
|
|
848
|
-
});
|
|
849
|
-
afterEach(function () {
|
|
850
|
-
client.destroy();
|
|
851
|
-
});
|
|
852
|
-
it('should raise "hide-wait" event.', function () {
|
|
853
|
-
var expected = jasmine.objectContaining({
|
|
854
|
-
messageType: 'hide-wait'
|
|
855
|
-
});
|
|
856
|
-
client.hideWait();
|
|
857
|
-
expect(window.parent.postMessage).toHaveBeenCalledWith(expected, jasmine.any(String));
|
|
858
|
-
});
|
|
859
|
-
it('should use trusted host.', function () {
|
|
860
|
-
var expected = TEST_HOST_ORIGIN;
|
|
861
|
-
client.hideWait();
|
|
862
|
-
expect(spyPostMessage).toHaveBeenCalledWith(jasmine.any(Object), expected);
|
|
863
|
-
});
|
|
864
|
-
});
|
|
865
|
-
describe('event handler', function () {
|
|
866
|
-
var client;
|
|
867
|
-
var spyPostMessage;
|
|
868
|
-
beforeEach(function () {
|
|
869
|
-
client = new addin_client_1.AddinClient({
|
|
870
|
-
callbacks: {
|
|
871
|
-
init: function () { return; }
|
|
872
|
-
}
|
|
873
|
-
});
|
|
874
|
-
spyPostMessage = spyOn(window.parent, 'postMessage');
|
|
875
|
-
spyPostMessage.and.stub();
|
|
876
|
-
initializeHost();
|
|
877
|
-
spyPostMessage.calls.reset();
|
|
878
|
-
});
|
|
879
|
-
afterEach(function () {
|
|
880
|
-
client.destroy();
|
|
881
|
-
});
|
|
882
|
-
it('should add a callback function for the provided event type.', function () {
|
|
883
|
-
var callback = function (context) {
|
|
884
|
-
return;
|
|
885
|
-
};
|
|
886
|
-
client.addEventHandler('form-data-update', callback);
|
|
887
|
-
var addinEvents = client.registeredAddinEvents;
|
|
888
|
-
expect(Object.keys(addinEvents).length).toBe(1);
|
|
889
|
-
expect(addinEvents['form-data-update']).toBe(callback);
|
|
890
|
-
});
|
|
891
|
-
it('should execute callback function for the provided event type.', function (done) {
|
|
892
|
-
var callbackCalled = false;
|
|
893
|
-
var callbackContext = {};
|
|
894
|
-
var callback = function (context) {
|
|
895
|
-
callbackCalled = true;
|
|
896
|
-
callbackContext = context;
|
|
897
|
-
};
|
|
898
|
-
client.addEventHandler('form-data-update', callback);
|
|
899
|
-
var msg = {
|
|
900
|
-
message: {
|
|
901
|
-
context: {
|
|
902
|
-
context: {
|
|
903
|
-
constituent_id: '280',
|
|
904
|
-
gift_type: 'donation'
|
|
905
|
-
},
|
|
906
|
-
type: 'form-data-update'
|
|
907
|
-
},
|
|
908
|
-
eventRequestId: 1
|
|
909
|
-
},
|
|
910
|
-
messageType: 'host-event',
|
|
911
|
-
source: 'bb-addin-host'
|
|
912
|
-
};
|
|
913
|
-
postMessageFromHost(msg);
|
|
914
|
-
expect(callbackCalled).toBe(true);
|
|
915
|
-
expect(callbackContext).toBe(msg.message.context.context);
|
|
916
|
-
setTimeout(function () {
|
|
917
|
-
expect(window.parent.postMessage).toHaveBeenCalledWith({
|
|
918
|
-
addinId: 'test_id',
|
|
919
|
-
message: {
|
|
920
|
-
eventRequestId: 1
|
|
921
|
-
},
|
|
922
|
-
messageType: 'event-received',
|
|
923
|
-
source: 'bb-addin-client'
|
|
924
|
-
}, jasmine.any(String));
|
|
925
|
-
done();
|
|
926
|
-
}, 1);
|
|
927
|
-
});
|
|
928
|
-
it('should respond to event if callback not found.', function (done) {
|
|
929
|
-
client.addEventHandler('form-data-update', undefined);
|
|
930
|
-
var msg = {
|
|
931
|
-
message: {
|
|
932
|
-
context: {
|
|
933
|
-
context: {
|
|
934
|
-
constituent_id: '280',
|
|
935
|
-
gift_type: 'donation'
|
|
936
|
-
},
|
|
937
|
-
type: 'form-data-update'
|
|
938
|
-
},
|
|
939
|
-
eventRequestId: 1
|
|
940
|
-
},
|
|
941
|
-
messageType: 'host-event',
|
|
942
|
-
source: 'bb-addin-host'
|
|
943
|
-
};
|
|
944
|
-
postMessageFromHost(msg);
|
|
945
|
-
setTimeout(function () {
|
|
946
|
-
expect(window.parent.postMessage).toHaveBeenCalledWith({
|
|
947
|
-
addinId: 'test_id',
|
|
948
|
-
message: {
|
|
949
|
-
eventRequestId: 1
|
|
950
|
-
},
|
|
951
|
-
messageType: 'event-received',
|
|
952
|
-
source: 'bb-addin-client'
|
|
953
|
-
}, jasmine.any(String));
|
|
954
|
-
done();
|
|
955
|
-
}, 1);
|
|
956
|
-
});
|
|
957
|
-
it('should wait for blocking event type to respond.', function (done) {
|
|
958
|
-
var callbackCalled = false;
|
|
959
|
-
var callbackContext = {};
|
|
960
|
-
client.addEventHandler('form-save', function (context, saveDone) {
|
|
961
|
-
callbackCalled = true;
|
|
962
|
-
callbackContext = context;
|
|
963
|
-
saveDone();
|
|
964
|
-
});
|
|
965
|
-
var msg = {
|
|
966
|
-
message: {
|
|
967
|
-
context: {
|
|
968
|
-
context: {
|
|
969
|
-
constituent_id: '280',
|
|
970
|
-
gift_type: 'donation'
|
|
971
|
-
},
|
|
972
|
-
type: 'form-save'
|
|
973
|
-
},
|
|
974
|
-
eventRequestId: 1
|
|
975
|
-
},
|
|
976
|
-
messageType: 'host-event',
|
|
977
|
-
source: 'bb-addin-host'
|
|
978
|
-
};
|
|
979
|
-
postMessageFromHost(msg);
|
|
980
|
-
expect(callbackCalled).toBe(true);
|
|
981
|
-
expect(callbackContext).toBe(msg.message.context.context);
|
|
982
|
-
setTimeout(function () {
|
|
983
|
-
expect(window.parent.postMessage).toHaveBeenCalledWith({
|
|
984
|
-
addinId: 'test_id',
|
|
985
|
-
message: {
|
|
986
|
-
eventRequestId: 1
|
|
987
|
-
},
|
|
988
|
-
messageType: 'event-received',
|
|
989
|
-
source: 'bb-addin-client'
|
|
990
|
-
}, jasmine.any(String));
|
|
991
|
-
done();
|
|
992
|
-
}, 1);
|
|
993
|
-
});
|
|
994
|
-
});
|
|
995
|
-
describe('send event', function () {
|
|
996
|
-
var client;
|
|
997
|
-
beforeEach(function () {
|
|
998
|
-
client = new addin_client_1.AddinClient({
|
|
999
|
-
callbacks: {
|
|
1000
|
-
init: function () { return; }
|
|
1001
|
-
}
|
|
1002
|
-
});
|
|
1003
|
-
});
|
|
1004
|
-
afterEach(function () {
|
|
1005
|
-
client.destroy();
|
|
1006
|
-
});
|
|
1007
|
-
it('should initialize add-in with supported event types.', function () {
|
|
1008
|
-
var msg = {
|
|
1009
|
-
message: {
|
|
1010
|
-
context: 'my_context',
|
|
1011
|
-
envId: 'my_envid',
|
|
1012
|
-
supportedEventTypes: ['update-settings']
|
|
1013
|
-
},
|
|
1014
|
-
messageType: 'host-ready',
|
|
1015
|
-
source: 'bb-addin-host'
|
|
1016
|
-
};
|
|
1017
|
-
postMessageFromHost(msg);
|
|
1018
|
-
expect(client.supportedEventTypes).toEqual(['update-settings']);
|
|
1019
|
-
});
|
|
1020
|
-
it('should raise "client-event" event with proper message.', function (done) {
|
|
1021
|
-
var postedMessage;
|
|
1022
|
-
var postedOrigin;
|
|
1023
|
-
var msg = {
|
|
1024
|
-
message: {
|
|
1025
|
-
context: 'my_context',
|
|
1026
|
-
envId: 'my_envid',
|
|
1027
|
-
supportedEventTypes: ['update-settings']
|
|
1028
|
-
},
|
|
1029
|
-
messageType: 'host-ready',
|
|
1030
|
-
source: 'bb-addin-host'
|
|
1031
|
-
};
|
|
1032
|
-
postMessageFromHost(msg);
|
|
1033
|
-
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
1034
|
-
postedMessage = message;
|
|
1035
|
-
postedOrigin = targetOrigin;
|
|
1036
|
-
});
|
|
1037
|
-
var args = {
|
|
1038
|
-
event: {
|
|
1039
|
-
context: {
|
|
1040
|
-
constituent_id: 280
|
|
1041
|
-
},
|
|
1042
|
-
type: 'update-settings'
|
|
1043
|
-
},
|
|
1044
|
-
eventRequestId: 0
|
|
1045
|
-
};
|
|
1046
|
-
var promiseResolved = false;
|
|
1047
|
-
client.sendEvent({
|
|
1048
|
-
context: {
|
|
1049
|
-
constituent_id: 280
|
|
1050
|
-
},
|
|
1051
|
-
type: 'update-settings'
|
|
1052
|
-
}).then(function () {
|
|
1053
|
-
promiseResolved = true;
|
|
1054
|
-
});
|
|
1055
|
-
setTimeout(function () {
|
|
1056
|
-
expect(postedMessage.message).toEqual(args);
|
|
1057
|
-
expect(postedMessage.messageType).toBe('client-event');
|
|
1058
|
-
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
1059
|
-
// host responds with event-received message
|
|
1060
|
-
var msgReceived = {
|
|
1061
|
-
message: {
|
|
1062
|
-
eventRequestId: 0
|
|
1063
|
-
},
|
|
1064
|
-
messageType: 'event-received',
|
|
1065
|
-
source: 'bb-addin-host'
|
|
1066
|
-
};
|
|
1067
|
-
postMessageFromHost(msgReceived);
|
|
1068
|
-
// Delay the vaildation until after the post message is done.
|
|
1069
|
-
setTimeout(function () {
|
|
1070
|
-
expect(promiseResolved).toBe(true);
|
|
1071
|
-
done();
|
|
1072
|
-
}, 100);
|
|
1073
|
-
}, 600);
|
|
1074
|
-
});
|
|
1075
|
-
it('throws error when attempint to send an unsupported event type.', function (done) {
|
|
1076
|
-
var msg = {
|
|
1077
|
-
message: {
|
|
1078
|
-
context: 'my_context',
|
|
1079
|
-
envId: 'my_envid',
|
|
1080
|
-
supportedEventTypes: ['update-settings']
|
|
1081
|
-
},
|
|
1082
|
-
messageType: 'host-ready',
|
|
1083
|
-
source: 'bb-addin-host'
|
|
1084
|
-
};
|
|
1085
|
-
postMessageFromHost(msg);
|
|
1086
|
-
var promiseResolved = false;
|
|
1087
|
-
var error;
|
|
1088
|
-
client.sendEvent({
|
|
1089
|
-
context: {
|
|
1090
|
-
constituent_id: 280
|
|
1091
|
-
},
|
|
1092
|
-
type: 'update-settings2'
|
|
1093
|
-
}).then(function () {
|
|
1094
|
-
promiseResolved = true;
|
|
1095
|
-
}).catch(function (err) {
|
|
1096
|
-
error = err;
|
|
1097
|
-
});
|
|
1098
|
-
setTimeout(function () {
|
|
1099
|
-
expect(promiseResolved).toBeFalse();
|
|
1100
|
-
expect(error).toBe('Event type not supported');
|
|
1101
|
-
done();
|
|
1102
|
-
}, 100);
|
|
1103
|
-
});
|
|
1104
|
-
it('should cancel pending addin event when new event sent', function (done) {
|
|
1105
|
-
var postedMessage;
|
|
1106
|
-
var postedOrigin;
|
|
1107
|
-
var msg = {
|
|
1108
|
-
message: {
|
|
1109
|
-
context: 'my_context',
|
|
1110
|
-
envId: 'my_envid',
|
|
1111
|
-
supportedEventTypes: ['update-settings']
|
|
1112
|
-
},
|
|
1113
|
-
messageType: 'host-ready',
|
|
1114
|
-
source: 'bb-addin-host'
|
|
1115
|
-
};
|
|
1116
|
-
postMessageFromHost(msg);
|
|
1117
|
-
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
1118
|
-
postedMessage = message;
|
|
1119
|
-
postedOrigin = targetOrigin;
|
|
1120
|
-
});
|
|
1121
|
-
var args = {
|
|
1122
|
-
event: {
|
|
1123
|
-
context: {
|
|
1124
|
-
constituent_id: 280
|
|
1125
|
-
},
|
|
1126
|
-
type: 'update-settings'
|
|
1127
|
-
},
|
|
1128
|
-
eventRequestId: 0
|
|
1129
|
-
};
|
|
1130
|
-
var promiseResolved = false;
|
|
1131
|
-
var rejectedReason;
|
|
1132
|
-
client.sendEvent({
|
|
1133
|
-
context: {
|
|
1134
|
-
constituent_id: 280
|
|
1135
|
-
},
|
|
1136
|
-
type: 'update-settings'
|
|
1137
|
-
}).then(function () {
|
|
1138
|
-
// should not come here
|
|
1139
|
-
promiseResolved = true;
|
|
1140
|
-
}, function (reason) {
|
|
1141
|
-
rejectedReason = reason;
|
|
1142
|
-
});
|
|
1143
|
-
// immediately send second event
|
|
1144
|
-
client.sendEvent({
|
|
1145
|
-
context: {
|
|
1146
|
-
constituent_id: 280
|
|
1147
|
-
},
|
|
1148
|
-
type: 'update-settings'
|
|
1149
|
-
}).then(function () {
|
|
1150
|
-
promiseResolved = true;
|
|
1151
|
-
rejectedReason = undefined;
|
|
1152
|
-
});
|
|
1153
|
-
// Delay the vaildation until after the initial event is rejected.
|
|
1154
|
-
setTimeout(function () {
|
|
1155
|
-
expect(rejectedReason).toBe('Event cancelled');
|
|
1156
|
-
expect(promiseResolved).toBe(false);
|
|
1157
|
-
// Delay the vaildation until after the pending add-in event is sent.
|
|
1158
|
-
setTimeout(function () {
|
|
1159
|
-
expect(postedMessage.message).toEqual(args);
|
|
1160
|
-
expect(postedMessage.messageType).toBe('client-event');
|
|
1161
|
-
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
1162
|
-
// host responds with event-received message
|
|
1163
|
-
var msgReceived = {
|
|
1164
|
-
message: {
|
|
1165
|
-
eventRequestId: 0
|
|
1166
|
-
},
|
|
1167
|
-
messageType: 'event-received',
|
|
1168
|
-
source: 'bb-addin-host'
|
|
1169
|
-
};
|
|
1170
|
-
postMessageFromHost(msgReceived);
|
|
1171
|
-
// Delay the vaildation until after the post message is done.
|
|
1172
|
-
setTimeout(function () {
|
|
1173
|
-
expect(promiseResolved).toBe(true);
|
|
1174
|
-
done();
|
|
1175
|
-
}, 100);
|
|
1176
|
-
}, 600);
|
|
1177
|
-
});
|
|
1178
|
-
});
|
|
1179
|
-
});
|
|
1180
|
-
describe('postMessageToHostPage', function () {
|
|
1181
|
-
it('should warn if origin is invalid.', function () {
|
|
1182
|
-
var badOrigin = 'https://google.com';
|
|
1183
|
-
var messageWasSentFromAddin = false;
|
|
1184
|
-
var consoleWarningIssued = false;
|
|
1185
|
-
var client = new addin_client_1.AddinClient({
|
|
1186
|
-
callbacks: {
|
|
1187
|
-
init: function () { return; }
|
|
1188
|
-
}
|
|
1189
|
-
});
|
|
1190
|
-
var msg = {
|
|
1191
|
-
message: {},
|
|
1192
|
-
messageType: 'host-ready',
|
|
1193
|
-
source: 'bb-addin-host'
|
|
1194
|
-
};
|
|
1195
|
-
// Initialize from the host with a bad origin
|
|
1196
|
-
postMessageFromHost(msg, badOrigin);
|
|
1197
|
-
// Spy on messages from the add-in to make sure it doesn't post.
|
|
1198
|
-
spyOn(window.parent, 'postMessage').and.callFake(function () {
|
|
1199
|
-
messageWasSentFromAddin = true;
|
|
1200
|
-
});
|
|
1201
|
-
// Spy on messages from the add-in to make sure it doesn't post.
|
|
1202
|
-
spyOn(console, 'warn').and.callFake(function () {
|
|
1203
|
-
consoleWarningIssued = true;
|
|
1204
|
-
});
|
|
1205
|
-
var args = {
|
|
1206
|
-
url: 'https://renxt.blackbaud.com?test=1'
|
|
1207
|
-
};
|
|
1208
|
-
// Call navigate to trigger posting a message to the host.
|
|
1209
|
-
// Should result in a warning and not post because the host origin was not valid.
|
|
1210
|
-
client.navigate(args);
|
|
1211
|
-
client.destroy();
|
|
1212
|
-
expect(messageWasSentFromAddin).toBe(false);
|
|
1213
|
-
expect(consoleWarningIssued).toBe(true);
|
|
1214
|
-
});
|
|
1215
|
-
[
|
|
1216
|
-
'https://test.blackbaud.com',
|
|
1217
|
-
'https://my.test.blackbaud.com',
|
|
1218
|
-
'https://test_site.blackbaud.com',
|
|
1219
|
-
'https://test-site.blackbaud.com',
|
|
1220
|
-
'https://view-my.test_site.blackbaud.com',
|
|
1221
|
-
'https://test.blackbaud-dev.com',
|
|
1222
|
-
'https://my.test.blackbaud-dev.com',
|
|
1223
|
-
'https://test_site.blackbaud-dev.com',
|
|
1224
|
-
'https://test-site.blackbaud-dev.com',
|
|
1225
|
-
'https://view-my.test_site.blackbaud-dev.com',
|
|
1226
|
-
'http://test.blackbaud-dev.com',
|
|
1227
|
-
'http://my.test.blackbaud-dev.com',
|
|
1228
|
-
'http://test_site.blackbaud-dev.com',
|
|
1229
|
-
'http://test-site.blackbaud-dev.com',
|
|
1230
|
-
'http://view-my.test_site.blackbaud-dev.com',
|
|
1231
|
-
'https://test.blackbaudhosting.com',
|
|
1232
|
-
'https://my.test.blackbaudhosting.com',
|
|
1233
|
-
'https://test_site.blackbaudhosting.com',
|
|
1234
|
-
'https://test-site.blackbaudhosting.com',
|
|
1235
|
-
'https://view-my.test_site.blackbaudhosting.com',
|
|
1236
|
-
'https://test.bbcloudservices.com',
|
|
1237
|
-
'https://my.test.bbcloudservices.com',
|
|
1238
|
-
'https://test_site.bbcloudservices.com',
|
|
1239
|
-
'https://test-site.bbcloudservices.com',
|
|
1240
|
-
'https://view-my.test_site.bbcloudservices.com',
|
|
1241
|
-
'https://localhost',
|
|
1242
|
-
'https://localhost:8080',
|
|
1243
|
-
'https://secure2.convio.net',
|
|
1244
|
-
'https://secure3.convio.net',
|
|
1245
|
-
'https://secure8.convio.net',
|
|
1246
|
-
'https://testweb.convio.com',
|
|
1247
|
-
'https://test.blackbaudcloud.com',
|
|
1248
|
-
'https://my.test.blackbaudcloud.com',
|
|
1249
|
-
'https://test_site.blackbaudcloud.com',
|
|
1250
|
-
'https://test-site.blackbaudcloud.com',
|
|
1251
|
-
'https://view-my.test_site.blackbaudcloud.com',
|
|
1252
|
-
'https://test.conviocloud.com',
|
|
1253
|
-
'https://my.test.conviocloud.com',
|
|
1254
|
-
'https://test_site.conviocloud.com',
|
|
1255
|
-
'https://test-site.conviocloud.com',
|
|
1256
|
-
'https://view-my.test_site.conviocloud.com',
|
|
1257
|
-
'https://www.blackbaudfaith.com',
|
|
1258
|
-
'https://test.blackbaudfaith.com',
|
|
1259
|
-
'https://my.test.blackbaudfaith.com',
|
|
1260
|
-
'https://test_site.blackbaudfaith.com',
|
|
1261
|
-
'https://test-site.blackbaudfaith.com',
|
|
1262
|
-
'https://view-my.test_site.blackbaudfaith.com',
|
|
1263
|
-
'https://www.blackbaudportal.com',
|
|
1264
|
-
'https://test.blackbaudportal.com',
|
|
1265
|
-
'https://my.test.blackbaudportal.com',
|
|
1266
|
-
'https://test_site.blackbaudportal.com',
|
|
1267
|
-
'https://test-site.blackbaudportal.com',
|
|
1268
|
-
'https://view-my.test_site.blackbaudportal.com',
|
|
1269
|
-
'https://www.bbk12.com',
|
|
1270
|
-
'https://test.bbk12.com',
|
|
1271
|
-
'https://my.test.bbk12.com',
|
|
1272
|
-
'https://test_site.bbk12.com',
|
|
1273
|
-
'https://test-site.bbk12.com',
|
|
1274
|
-
'https://view-my.test_site.bbk12.com',
|
|
1275
|
-
'https://www.mycampus-app.com',
|
|
1276
|
-
'https://test.mycampus-app.com',
|
|
1277
|
-
'https://my.test.mycampus-app.com',
|
|
1278
|
-
'https://test_site.mycampus-app.com',
|
|
1279
|
-
'https://test-site.mycampus-app.com',
|
|
1280
|
-
'https://view-my.test_site.mycampus-app.com',
|
|
1281
|
-
'https://www.myschoolapp.com',
|
|
1282
|
-
'https://test.myschoolapp.com',
|
|
1283
|
-
'https://my.test.myschoolapp.com',
|
|
1284
|
-
'https://test_site.myschoolapp.com',
|
|
1285
|
-
'https://test-site.myschoolapp.com',
|
|
1286
|
-
'https://view-my.test_site.myschoolapp.com',
|
|
1287
|
-
'https://www.myschoolautomation.com',
|
|
1288
|
-
'https://test.myschoolautomation.com',
|
|
1289
|
-
'https://my.test.myschoolautomation.com',
|
|
1290
|
-
'https://test_site.myschoolautomation.com',
|
|
1291
|
-
'https://test-site.myschoolautomation.com',
|
|
1292
|
-
'https://view-my.test_site.myschoolautomation.com',
|
|
1293
|
-
'https://www.myschooldemo.com',
|
|
1294
|
-
'https://test.myschooldemo.com',
|
|
1295
|
-
'https://my.test.myschooldemo.com',
|
|
1296
|
-
'https://test_site.myschooldemo.com',
|
|
1297
|
-
'https://test-site.myschooldemo.com',
|
|
1298
|
-
'https://view-my.test_site.myschooldemo.com',
|
|
1299
|
-
'https://www.myschooltraining.com',
|
|
1300
|
-
'https://test.myschooltraining.com',
|
|
1301
|
-
'https://my.test.myschooltraining.com',
|
|
1302
|
-
'https://test_site.myschooltraining.com',
|
|
1303
|
-
'https://test-site.myschooltraining.com',
|
|
1304
|
-
'https://view-my.test_site.myschooltraining.com'
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
client.
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
});
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var addin_client_1 = require("./addin-client");
|
|
4
|
+
var addin_confirm_button_style_1 = require("./client-interfaces/addin-confirm-button-style");
|
|
5
|
+
var addin_toast_style_1 = require("./client-interfaces/addin-toast-style");
|
|
6
|
+
var TEST_HOST_ORIGIN = 'https://host.nxt.blackbaud.com';
|
|
7
|
+
function postMessageFromHost(msg, origin) {
|
|
8
|
+
if (!origin) {
|
|
9
|
+
origin = TEST_HOST_ORIGIN;
|
|
10
|
+
}
|
|
11
|
+
window.dispatchEvent(new MessageEvent('message', {
|
|
12
|
+
data: msg,
|
|
13
|
+
origin: origin
|
|
14
|
+
}));
|
|
15
|
+
}
|
|
16
|
+
function initializeHost() {
|
|
17
|
+
var msg = {
|
|
18
|
+
message: {
|
|
19
|
+
context: 'my_context',
|
|
20
|
+
envId: 'my_envid'
|
|
21
|
+
},
|
|
22
|
+
messageType: 'host-ready',
|
|
23
|
+
source: 'bb-addin-host'
|
|
24
|
+
};
|
|
25
|
+
postMessageFromHost(msg);
|
|
26
|
+
}
|
|
27
|
+
describe('AddinClient ', function () {
|
|
28
|
+
// Set the addinId query string.
|
|
29
|
+
addin_client_1.AddinClient.getQueryString = function () {
|
|
30
|
+
return '?test=value&addinId=test_id&test2=value2';
|
|
31
|
+
};
|
|
32
|
+
describe('constructor', function () {
|
|
33
|
+
it('should raise "ready" message to "*" on constructor including the addinId from the query string.', function () {
|
|
34
|
+
var post;
|
|
35
|
+
window.parent.postMessage = function (message, targetOrigin) {
|
|
36
|
+
post = {
|
|
37
|
+
message: message,
|
|
38
|
+
targetOrigin: targetOrigin
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
var client = new addin_client_1.AddinClient({
|
|
42
|
+
callbacks: {
|
|
43
|
+
init: function () { return; }
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
client.destroy();
|
|
47
|
+
expect(post.message.messageType).toBe('ready');
|
|
48
|
+
expect(post.message.source).toBe('bb-addin-client');
|
|
49
|
+
expect(post.message.addinId).toBe('test_id');
|
|
50
|
+
expect(post.targetOrigin).toBe('*');
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
describe('getAuthToken', function () {
|
|
54
|
+
it('should delegate to the "getUserIdentityToken" function.', function () {
|
|
55
|
+
var delegated = false;
|
|
56
|
+
var client = new addin_client_1.AddinClient({
|
|
57
|
+
callbacks: {
|
|
58
|
+
init: function () { return; }
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
initializeHost();
|
|
62
|
+
spyOn(client, 'getUserIdentityToken').and.callFake(function () {
|
|
63
|
+
delegated = true;
|
|
64
|
+
return Promise.resolve('');
|
|
65
|
+
});
|
|
66
|
+
client.getAuthToken();
|
|
67
|
+
client.destroy();
|
|
68
|
+
expect(delegated).toBe(true);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
describe('handleMessage', function () {
|
|
72
|
+
describe('host-ready', function () {
|
|
73
|
+
it('should not call the "init" callback event if the source is not "bb-addin-host".', function () {
|
|
74
|
+
var initCalled = false;
|
|
75
|
+
var client = new addin_client_1.AddinClient({
|
|
76
|
+
callbacks: {
|
|
77
|
+
init: function () { initCalled = true; }
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
var msg = {
|
|
81
|
+
message: {},
|
|
82
|
+
messageType: 'host-ready',
|
|
83
|
+
source: 'not-bb-addin-host'
|
|
84
|
+
};
|
|
85
|
+
postMessageFromHost(msg);
|
|
86
|
+
client.destroy();
|
|
87
|
+
expect(initCalled).toBe(false);
|
|
88
|
+
});
|
|
89
|
+
it('should call the "init" callback if source is "bb-addin-host" and pass through context and event id.', function () {
|
|
90
|
+
var initArgs;
|
|
91
|
+
var client = new addin_client_1.AddinClient({
|
|
92
|
+
callbacks: {
|
|
93
|
+
init: function (args) {
|
|
94
|
+
initArgs = args;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
var msg = {
|
|
99
|
+
message: {
|
|
100
|
+
context: 'my_context',
|
|
101
|
+
envId: 'my_envid',
|
|
102
|
+
supportedEventTypes: ['update-event'],
|
|
103
|
+
themeSettings: {
|
|
104
|
+
mode: 'light',
|
|
105
|
+
theme: 'default'
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
messageType: 'host-ready',
|
|
109
|
+
source: 'bb-addin-host'
|
|
110
|
+
};
|
|
111
|
+
postMessageFromHost(msg);
|
|
112
|
+
client.destroy();
|
|
113
|
+
expect(initArgs.context).toBe('my_context');
|
|
114
|
+
expect(initArgs.envId).toBe('my_envid');
|
|
115
|
+
expect(initArgs.supportedEventTypes).toEqual(['update-event']);
|
|
116
|
+
expect(initArgs.themeSettings).toEqual({
|
|
117
|
+
mode: 'light',
|
|
118
|
+
theme: 'default'
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
it('should disregard host messages from the wrong origin.', function () {
|
|
123
|
+
var buttonClickCalled = false;
|
|
124
|
+
var client = new addin_client_1.AddinClient({
|
|
125
|
+
callbacks: {
|
|
126
|
+
buttonClick: function () { buttonClickCalled = true; },
|
|
127
|
+
init: function () { return; }
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
var msg = {
|
|
131
|
+
message: {},
|
|
132
|
+
messageType: 'button-click',
|
|
133
|
+
source: 'bb-addin-host'
|
|
134
|
+
};
|
|
135
|
+
// Raising this message even though the host never issued host-ready.
|
|
136
|
+
// Therefore the origin should not be trusted and message ignored.
|
|
137
|
+
postMessageFromHost(msg);
|
|
138
|
+
client.destroy();
|
|
139
|
+
expect(buttonClickCalled).toBe(false);
|
|
140
|
+
});
|
|
141
|
+
describe('button-click', function () {
|
|
142
|
+
it('should call the "buttonClick" callback.', function () {
|
|
143
|
+
var buttonClickCalled = false;
|
|
144
|
+
var client = new addin_client_1.AddinClient({
|
|
145
|
+
callbacks: {
|
|
146
|
+
buttonClick: function () { buttonClickCalled = true; },
|
|
147
|
+
init: function () { return; }
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
initializeHost();
|
|
151
|
+
var msg = {
|
|
152
|
+
message: {},
|
|
153
|
+
messageType: 'button-click',
|
|
154
|
+
source: 'bb-addin-host'
|
|
155
|
+
};
|
|
156
|
+
postMessageFromHost(msg);
|
|
157
|
+
client.destroy();
|
|
158
|
+
expect(buttonClickCalled).toBe(true);
|
|
159
|
+
});
|
|
160
|
+
it('should tolerate the "buttonClick" callback being undefined.', function () {
|
|
161
|
+
var client = new addin_client_1.AddinClient({
|
|
162
|
+
callbacks: {
|
|
163
|
+
init: function () { return; }
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
initializeHost();
|
|
167
|
+
var msg = {
|
|
168
|
+
message: {},
|
|
169
|
+
messageType: 'button-click',
|
|
170
|
+
source: 'bb-addin-host'
|
|
171
|
+
};
|
|
172
|
+
postMessageFromHost(msg);
|
|
173
|
+
client.destroy();
|
|
174
|
+
// No assertion. Just don't fail.
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
describe('update-context', function () {
|
|
178
|
+
it('should call the "updateContext" callback.', function () {
|
|
179
|
+
var contextUpdated = false;
|
|
180
|
+
var client = new addin_client_1.AddinClient({
|
|
181
|
+
callbacks: {
|
|
182
|
+
init: function () { return; },
|
|
183
|
+
updateContext: function (contextId) { contextUpdated = true; }
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
initializeHost();
|
|
187
|
+
var msg = {
|
|
188
|
+
message: { context: { id: '123' } },
|
|
189
|
+
messageType: 'update-context',
|
|
190
|
+
source: 'bb-addin-host'
|
|
191
|
+
};
|
|
192
|
+
postMessageFromHost(msg);
|
|
193
|
+
client.destroy();
|
|
194
|
+
expect(contextUpdated).toBeTrue();
|
|
195
|
+
});
|
|
196
|
+
it('should tolerate the "updateContext" callback being undefined.', function () {
|
|
197
|
+
var client = new addin_client_1.AddinClient({
|
|
198
|
+
callbacks: {
|
|
199
|
+
init: function () { return; }
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
initializeHost();
|
|
203
|
+
var msg = {
|
|
204
|
+
message: {},
|
|
205
|
+
messageType: 'update-context',
|
|
206
|
+
source: 'bb-addin-host'
|
|
207
|
+
};
|
|
208
|
+
postMessageFromHost(msg);
|
|
209
|
+
client.destroy();
|
|
210
|
+
// No assertion. Just don't fail.
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
describe('help-click', function () {
|
|
214
|
+
it('should call the "helpClick" callback.', function () {
|
|
215
|
+
var helpClickCalled = false;
|
|
216
|
+
var client = new addin_client_1.AddinClient({
|
|
217
|
+
callbacks: {
|
|
218
|
+
helpClick: function () { helpClickCalled = true; },
|
|
219
|
+
init: function () { return; }
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
initializeHost();
|
|
223
|
+
var msg = {
|
|
224
|
+
message: {},
|
|
225
|
+
messageType: 'help-click',
|
|
226
|
+
source: 'bb-addin-host'
|
|
227
|
+
};
|
|
228
|
+
postMessageFromHost(msg);
|
|
229
|
+
client.destroy();
|
|
230
|
+
expect(helpClickCalled).toBe(true);
|
|
231
|
+
});
|
|
232
|
+
it('should tolerate the "helpClick" callback being undefined.', function () {
|
|
233
|
+
var client = new addin_client_1.AddinClient({
|
|
234
|
+
callbacks: {
|
|
235
|
+
init: function () { return; }
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
initializeHost();
|
|
239
|
+
var msg = {
|
|
240
|
+
message: {},
|
|
241
|
+
messageType: 'help-click',
|
|
242
|
+
source: 'bb-addin-host'
|
|
243
|
+
};
|
|
244
|
+
postMessageFromHost(msg);
|
|
245
|
+
client.destroy();
|
|
246
|
+
// No assertion. Just don't fail.
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
describe('settings-click', function () {
|
|
250
|
+
it('should call the "settingsClick" callback.', function () {
|
|
251
|
+
var settingsClickCalled = false;
|
|
252
|
+
var client = new addin_client_1.AddinClient({
|
|
253
|
+
callbacks: {
|
|
254
|
+
init: function () { return; },
|
|
255
|
+
settingsClick: function () { settingsClickCalled = true; }
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
initializeHost();
|
|
259
|
+
var msg = {
|
|
260
|
+
message: {},
|
|
261
|
+
messageType: 'settings-click',
|
|
262
|
+
source: 'bb-addin-host'
|
|
263
|
+
};
|
|
264
|
+
postMessageFromHost(msg);
|
|
265
|
+
client.destroy();
|
|
266
|
+
expect(settingsClickCalled).toBe(true);
|
|
267
|
+
});
|
|
268
|
+
it('should tolerate the "settingsClick" callback being undefined.', function () {
|
|
269
|
+
var client = new addin_client_1.AddinClient({
|
|
270
|
+
callbacks: {
|
|
271
|
+
init: function () { return; }
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
initializeHost();
|
|
275
|
+
var msg = {
|
|
276
|
+
message: {},
|
|
277
|
+
messageType: 'settings-click',
|
|
278
|
+
source: 'bb-addin-host'
|
|
279
|
+
};
|
|
280
|
+
postMessageFromHost(msg);
|
|
281
|
+
client.destroy();
|
|
282
|
+
// No assertion. Just don't fail.
|
|
283
|
+
});
|
|
284
|
+
});
|
|
285
|
+
describe('theme-change', function () {
|
|
286
|
+
it('should call the "themeChange" callback.', function () {
|
|
287
|
+
var themeChangeCalled = false;
|
|
288
|
+
var client = new addin_client_1.AddinClient({
|
|
289
|
+
callbacks: {
|
|
290
|
+
init: function () { return; },
|
|
291
|
+
themeChange: function () { themeChangeCalled = true; }
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
initializeHost();
|
|
295
|
+
var msg = {
|
|
296
|
+
message: {},
|
|
297
|
+
messageType: 'theme-change',
|
|
298
|
+
source: 'bb-addin-host'
|
|
299
|
+
};
|
|
300
|
+
postMessageFromHost(msg);
|
|
301
|
+
client.destroy();
|
|
302
|
+
expect(themeChangeCalled).toBe(true);
|
|
303
|
+
});
|
|
304
|
+
it('should tolerate the "themeChange" callback being undefined.', function () {
|
|
305
|
+
var client = new addin_client_1.AddinClient({
|
|
306
|
+
callbacks: {
|
|
307
|
+
init: function () { return; }
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
initializeHost();
|
|
311
|
+
var msg = {
|
|
312
|
+
message: {},
|
|
313
|
+
messageType: 'themeChange',
|
|
314
|
+
source: 'bb-addin-host'
|
|
315
|
+
};
|
|
316
|
+
postMessageFromHost(msg);
|
|
317
|
+
client.destroy();
|
|
318
|
+
// No assertion. Just don't fail.
|
|
319
|
+
});
|
|
320
|
+
});
|
|
321
|
+
describe('auth-token', function () {
|
|
322
|
+
it('should pass result back through promise from getUserIdentityToken.', function (done) {
|
|
323
|
+
var tokenReceived;
|
|
324
|
+
var client = new addin_client_1.AddinClient({
|
|
325
|
+
callbacks: {
|
|
326
|
+
init: function () { return; }
|
|
327
|
+
}
|
|
328
|
+
});
|
|
329
|
+
initializeHost();
|
|
330
|
+
client.getUserIdentityToken().then(function (token) {
|
|
331
|
+
tokenReceived = token;
|
|
332
|
+
});
|
|
333
|
+
var msg = {
|
|
334
|
+
message: {
|
|
335
|
+
authToken: 'the auth token',
|
|
336
|
+
authTokenRequestId: 1 // One because this is the first request for this client.
|
|
337
|
+
},
|
|
338
|
+
messageType: 'auth-token',
|
|
339
|
+
source: 'bb-addin-host'
|
|
340
|
+
};
|
|
341
|
+
postMessageFromHost(msg);
|
|
342
|
+
client.destroy();
|
|
343
|
+
// Delay the vaildation until after the post message is done.
|
|
344
|
+
setTimeout(function () {
|
|
345
|
+
expect(tokenReceived).toBe('the auth token');
|
|
346
|
+
done();
|
|
347
|
+
}, 0);
|
|
348
|
+
});
|
|
349
|
+
});
|
|
350
|
+
describe('auth-token-fail', function () {
|
|
351
|
+
it('should reject the promise from getUserIdentityToken and return the reason.', function () {
|
|
352
|
+
var reasonReceived;
|
|
353
|
+
var client = new addin_client_1.AddinClient({
|
|
354
|
+
callbacks: {
|
|
355
|
+
init: function () { return; }
|
|
356
|
+
}
|
|
357
|
+
});
|
|
358
|
+
initializeHost();
|
|
359
|
+
client.getUserIdentityToken().catch(function (reason) {
|
|
360
|
+
reasonReceived = reason;
|
|
361
|
+
});
|
|
362
|
+
var msg = {
|
|
363
|
+
message: {
|
|
364
|
+
authTokenRequestId: 1,
|
|
365
|
+
reason: 'the reason'
|
|
366
|
+
},
|
|
367
|
+
messageType: 'auth-token-fail',
|
|
368
|
+
source: 'bb-addin-host'
|
|
369
|
+
};
|
|
370
|
+
postMessageFromHost(msg);
|
|
371
|
+
client.destroy();
|
|
372
|
+
// Delay the vaildation until after the post message is done.
|
|
373
|
+
setTimeout(function () {
|
|
374
|
+
expect(reasonReceived).toBe('the reason');
|
|
375
|
+
}, 1);
|
|
376
|
+
});
|
|
377
|
+
});
|
|
378
|
+
describe('close-modal', function () {
|
|
379
|
+
it('should pass context back through promise from showModal.', function (done) {
|
|
380
|
+
var testContext = {};
|
|
381
|
+
var contextReceived = null;
|
|
382
|
+
var client = new addin_client_1.AddinClient({
|
|
383
|
+
callbacks: {
|
|
384
|
+
init: function () { return; }
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
initializeHost();
|
|
388
|
+
var args = {};
|
|
389
|
+
client.showModal(args).modalClosed.then(function (ctx) {
|
|
390
|
+
contextReceived = ctx;
|
|
391
|
+
});
|
|
392
|
+
var msg = {
|
|
393
|
+
message: {
|
|
394
|
+
context: testContext,
|
|
395
|
+
modalRequestId: 1 // One because this is the first request for this client.
|
|
396
|
+
},
|
|
397
|
+
messageType: 'modal-closed',
|
|
398
|
+
source: 'bb-addin-host'
|
|
399
|
+
};
|
|
400
|
+
postMessageFromHost(msg);
|
|
401
|
+
client.destroy();
|
|
402
|
+
// Delay the vaildation until after the post message is done.
|
|
403
|
+
setTimeout(function () {
|
|
404
|
+
expect(contextReceived).toBe(testContext);
|
|
405
|
+
done();
|
|
406
|
+
}, 100);
|
|
407
|
+
});
|
|
408
|
+
});
|
|
409
|
+
});
|
|
410
|
+
describe('init ready callback', function () {
|
|
411
|
+
it('should raise "addin-ready" event.', function () {
|
|
412
|
+
var readyArgs = {};
|
|
413
|
+
var postedMessage;
|
|
414
|
+
var postedOrigin;
|
|
415
|
+
var client = new addin_client_1.AddinClient({
|
|
416
|
+
callbacks: {
|
|
417
|
+
init: function (args) {
|
|
418
|
+
args.ready(readyArgs);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
});
|
|
422
|
+
var msg = {
|
|
423
|
+
message: {},
|
|
424
|
+
messageType: 'host-ready',
|
|
425
|
+
source: 'bb-addin-host'
|
|
426
|
+
};
|
|
427
|
+
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
428
|
+
postedMessage = message;
|
|
429
|
+
postedOrigin = targetOrigin;
|
|
430
|
+
});
|
|
431
|
+
postMessageFromHost(msg);
|
|
432
|
+
client.destroy();
|
|
433
|
+
expect(postedMessage.message).toBe(readyArgs);
|
|
434
|
+
expect(postedMessage.messageType).toBe('addin-ready');
|
|
435
|
+
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
436
|
+
});
|
|
437
|
+
});
|
|
438
|
+
describe('closeModal', function () {
|
|
439
|
+
it('should raise "close-modal" event.', function () {
|
|
440
|
+
var postedMessage;
|
|
441
|
+
var postedOrigin;
|
|
442
|
+
var client = new addin_client_1.AddinClient({
|
|
443
|
+
callbacks: {
|
|
444
|
+
init: function () { return; }
|
|
445
|
+
}
|
|
446
|
+
});
|
|
447
|
+
initializeHost();
|
|
448
|
+
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
449
|
+
postedMessage = message;
|
|
450
|
+
postedOrigin = targetOrigin;
|
|
451
|
+
});
|
|
452
|
+
var args = {};
|
|
453
|
+
client.closeModal(args);
|
|
454
|
+
client.destroy();
|
|
455
|
+
expect(postedMessage.message).toBe(args);
|
|
456
|
+
expect(postedMessage.messageType).toBe('close-modal');
|
|
457
|
+
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
458
|
+
});
|
|
459
|
+
});
|
|
460
|
+
describe('getUserIdentityToken', function () {
|
|
461
|
+
it('should raise "get-auth-token" event with increasing request id.', function () {
|
|
462
|
+
var postedMessage;
|
|
463
|
+
var postedOrigin;
|
|
464
|
+
var client = new addin_client_1.AddinClient({
|
|
465
|
+
callbacks: {
|
|
466
|
+
init: function () { return; }
|
|
467
|
+
}
|
|
468
|
+
});
|
|
469
|
+
initializeHost();
|
|
470
|
+
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
471
|
+
postedMessage = message;
|
|
472
|
+
postedOrigin = targetOrigin;
|
|
473
|
+
});
|
|
474
|
+
client.getUserIdentityToken();
|
|
475
|
+
expect(postedMessage.message.authTokenRequestId).toBe(1);
|
|
476
|
+
expect(postedMessage.messageType).toBe('get-auth-token');
|
|
477
|
+
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
478
|
+
client.getUserIdentityToken();
|
|
479
|
+
// A second call should increment the request id
|
|
480
|
+
expect(postedMessage.message.authTokenRequestId).toBe(2);
|
|
481
|
+
expect(postedMessage.messageType).toBe('get-auth-token');
|
|
482
|
+
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
483
|
+
client.destroy();
|
|
484
|
+
});
|
|
485
|
+
});
|
|
486
|
+
describe('navigate', function () {
|
|
487
|
+
it('should raise "navigate" event with proper url.', function () {
|
|
488
|
+
var postedMessage;
|
|
489
|
+
var postedOrigin;
|
|
490
|
+
var client = new addin_client_1.AddinClient({
|
|
491
|
+
callbacks: {
|
|
492
|
+
init: function () { return; }
|
|
493
|
+
}
|
|
494
|
+
});
|
|
495
|
+
initializeHost();
|
|
496
|
+
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
497
|
+
postedMessage = message;
|
|
498
|
+
postedOrigin = targetOrigin;
|
|
499
|
+
});
|
|
500
|
+
var args = {
|
|
501
|
+
url: 'https://renxt.blackbaud.com?test=1'
|
|
502
|
+
};
|
|
503
|
+
client.navigate(args);
|
|
504
|
+
client.destroy();
|
|
505
|
+
expect(postedMessage.message.url).toBe(args.url);
|
|
506
|
+
expect(postedMessage.messageType).toBe('navigate');
|
|
507
|
+
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
508
|
+
});
|
|
509
|
+
});
|
|
510
|
+
describe('open-help', function () {
|
|
511
|
+
it('should raise "open-help" event with proper help key.', function () {
|
|
512
|
+
var postedMessage;
|
|
513
|
+
var postedOrigin;
|
|
514
|
+
var client = new addin_client_1.AddinClient({
|
|
515
|
+
callbacks: {
|
|
516
|
+
init: function () { return; }
|
|
517
|
+
}
|
|
518
|
+
});
|
|
519
|
+
initializeHost();
|
|
520
|
+
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
521
|
+
postedMessage = message;
|
|
522
|
+
postedOrigin = targetOrigin;
|
|
523
|
+
});
|
|
524
|
+
var args = {
|
|
525
|
+
helpKey: 'test-help-key.html'
|
|
526
|
+
};
|
|
527
|
+
client.openHelp(args);
|
|
528
|
+
client.destroy();
|
|
529
|
+
expect(postedMessage.message.helpKey).toBe(args.helpKey);
|
|
530
|
+
expect(postedMessage.messageType).toBe('open-help');
|
|
531
|
+
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
532
|
+
});
|
|
533
|
+
});
|
|
534
|
+
describe('showModal', function () {
|
|
535
|
+
it('should raise "show-modal" event with increasing request id.', function () {
|
|
536
|
+
var postedMessage;
|
|
537
|
+
var postedOrigin;
|
|
538
|
+
var client = new addin_client_1.AddinClient({
|
|
539
|
+
callbacks: {
|
|
540
|
+
init: function () { return; }
|
|
541
|
+
}
|
|
542
|
+
});
|
|
543
|
+
initializeHost();
|
|
544
|
+
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
545
|
+
postedMessage = message;
|
|
546
|
+
postedOrigin = targetOrigin;
|
|
547
|
+
});
|
|
548
|
+
var args = {};
|
|
549
|
+
client.showModal(args);
|
|
550
|
+
expect(postedMessage.message.args).toBe(args);
|
|
551
|
+
expect(postedMessage.message.modalRequestId).toBe(1);
|
|
552
|
+
expect(postedMessage.messageType).toBe('show-modal');
|
|
553
|
+
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
554
|
+
client.showModal(args);
|
|
555
|
+
// A second call should increment the request id
|
|
556
|
+
expect(postedMessage.message.args).toBe(args);
|
|
557
|
+
expect(postedMessage.message.modalRequestId).toBe(2);
|
|
558
|
+
expect(postedMessage.messageType).toBe('show-modal');
|
|
559
|
+
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
560
|
+
client.destroy();
|
|
561
|
+
});
|
|
562
|
+
});
|
|
563
|
+
describe('show-toast', function () {
|
|
564
|
+
it('should raise "show-toast" event with proper message.', function () {
|
|
565
|
+
var postedMessage;
|
|
566
|
+
var postedOrigin;
|
|
567
|
+
var client = new addin_client_1.AddinClient({
|
|
568
|
+
callbacks: {
|
|
569
|
+
init: function () { return; }
|
|
570
|
+
}
|
|
571
|
+
});
|
|
572
|
+
initializeHost();
|
|
573
|
+
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
574
|
+
postedMessage = message;
|
|
575
|
+
postedOrigin = targetOrigin;
|
|
576
|
+
});
|
|
577
|
+
var args = {
|
|
578
|
+
message: 'this is a toast message',
|
|
579
|
+
style: addin_toast_style_1.AddinToastStyle.Warning
|
|
580
|
+
};
|
|
581
|
+
client.showToast(args);
|
|
582
|
+
client.destroy();
|
|
583
|
+
expect(postedMessage.message.message).toBe(args.message);
|
|
584
|
+
expect(postedMessage.messageType).toBe('show-toast');
|
|
585
|
+
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
586
|
+
});
|
|
587
|
+
});
|
|
588
|
+
describe('show-flyout', function () {
|
|
589
|
+
it('should raise "show-flyout" event with proper message.', function (done) {
|
|
590
|
+
var postedMessage;
|
|
591
|
+
var postedOrigin;
|
|
592
|
+
var initCalled = false;
|
|
593
|
+
var flyoutNextClickCalled = false;
|
|
594
|
+
var flyoutPreviousClickCalled = false;
|
|
595
|
+
var flyoutClosedCalled = false;
|
|
596
|
+
var client = new addin_client_1.AddinClient({
|
|
597
|
+
callbacks: {
|
|
598
|
+
flyoutNextClick: function () { flyoutNextClickCalled = true; },
|
|
599
|
+
flyoutPreviousClick: function () { flyoutPreviousClickCalled = true; },
|
|
600
|
+
init: function () { initCalled = true; }
|
|
601
|
+
}
|
|
602
|
+
});
|
|
603
|
+
initializeHost();
|
|
604
|
+
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
605
|
+
postedMessage = message;
|
|
606
|
+
postedOrigin = targetOrigin;
|
|
607
|
+
});
|
|
608
|
+
var args = {
|
|
609
|
+
context: {
|
|
610
|
+
userData: 'some data'
|
|
611
|
+
},
|
|
612
|
+
defaultWidth: 600,
|
|
613
|
+
iteratorNextDisabled: false,
|
|
614
|
+
iteratorPreviousDisabled: true,
|
|
615
|
+
maxWidth: 1000,
|
|
616
|
+
minWidth: 200,
|
|
617
|
+
permalink: {
|
|
618
|
+
label: 'some label',
|
|
619
|
+
url: 'some url'
|
|
620
|
+
},
|
|
621
|
+
showIterator: true,
|
|
622
|
+
url: 'some url'
|
|
623
|
+
};
|
|
624
|
+
client.showFlyout(args)
|
|
625
|
+
.flyoutClosed.then(function () {
|
|
626
|
+
flyoutClosedCalled = true;
|
|
627
|
+
});
|
|
628
|
+
var nextClickMsg = {
|
|
629
|
+
message: {},
|
|
630
|
+
messageType: 'flyout-next-click',
|
|
631
|
+
source: 'bb-addin-host'
|
|
632
|
+
};
|
|
633
|
+
postMessageFromHost(nextClickMsg);
|
|
634
|
+
var previousClickMsg = {
|
|
635
|
+
message: {},
|
|
636
|
+
messageType: 'flyout-previous-click',
|
|
637
|
+
source: 'bb-addin-host'
|
|
638
|
+
};
|
|
639
|
+
postMessageFromHost(previousClickMsg);
|
|
640
|
+
var closedMsg = {
|
|
641
|
+
message: {},
|
|
642
|
+
messageType: 'flyout-closed',
|
|
643
|
+
source: 'bb-addin-host'
|
|
644
|
+
};
|
|
645
|
+
postMessageFromHost(closedMsg);
|
|
646
|
+
client.destroy();
|
|
647
|
+
expect(initCalled).toBe(true);
|
|
648
|
+
expect(postedMessage.message.context).toBe(args.context);
|
|
649
|
+
expect(postedMessage.message.defaultWidth).toBe(args.defaultWidth);
|
|
650
|
+
expect(postedMessage.message.iteratorNextDisabled).toBe(args.iteratorNextDisabled);
|
|
651
|
+
expect(postedMessage.message.iteratorPreviousDisabled).toBe(args.iteratorPreviousDisabled);
|
|
652
|
+
expect(postedMessage.message.maxWidth).toBe(args.maxWidth);
|
|
653
|
+
expect(postedMessage.message.minWidth).toBe(args.minWidth);
|
|
654
|
+
expect(postedMessage.message.permalink).toBe(args.permalink);
|
|
655
|
+
expect(postedMessage.message.showIterator).toBe(args.showIterator);
|
|
656
|
+
expect(postedMessage.message.url).toBe(args.url);
|
|
657
|
+
expect(postedMessage.messageType).toBe('show-flyout');
|
|
658
|
+
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
659
|
+
expect(flyoutNextClickCalled).toBe(true);
|
|
660
|
+
expect(flyoutPreviousClickCalled).toBe(true);
|
|
661
|
+
// Delay the vaildation until after the post message is done.
|
|
662
|
+
setTimeout(function () {
|
|
663
|
+
expect(flyoutClosedCalled).toBe(true);
|
|
664
|
+
done();
|
|
665
|
+
}, 100);
|
|
666
|
+
});
|
|
667
|
+
it('should raise "show-flyout" event with with default args.', function (done) {
|
|
668
|
+
var postedMessage;
|
|
669
|
+
var postedOrigin;
|
|
670
|
+
var initCalled = false;
|
|
671
|
+
var client = new addin_client_1.AddinClient({
|
|
672
|
+
callbacks: {
|
|
673
|
+
init: function () { initCalled = true; }
|
|
674
|
+
}
|
|
675
|
+
});
|
|
676
|
+
initializeHost();
|
|
677
|
+
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
678
|
+
postedMessage = message;
|
|
679
|
+
postedOrigin = targetOrigin;
|
|
680
|
+
});
|
|
681
|
+
var args = {
|
|
682
|
+
url: 'some url'
|
|
683
|
+
};
|
|
684
|
+
client.showFlyout(args);
|
|
685
|
+
client.destroy();
|
|
686
|
+
expect(initCalled).toBe(true);
|
|
687
|
+
expect(postedMessage.message.context).toBe(args.context);
|
|
688
|
+
expect(postedMessage.message.defaultWidth).toBe(args.defaultWidth);
|
|
689
|
+
expect(postedMessage.message.iteratorNextDisabled).toBe(args.iteratorNextDisabled);
|
|
690
|
+
expect(postedMessage.message.iteratorPreviousDisabled).toBe(args.iteratorPreviousDisabled);
|
|
691
|
+
expect(postedMessage.message.maxWidth).toBe(args.maxWidth);
|
|
692
|
+
expect(postedMessage.message.minWidth).toBe(args.minWidth);
|
|
693
|
+
expect(postedMessage.message.permalink).toBe(args.permalink);
|
|
694
|
+
expect(postedMessage.message.showIterator).toBe(args.showIterator);
|
|
695
|
+
expect(postedMessage.message.url).toBe(args.url);
|
|
696
|
+
expect(postedMessage.messageType).toBe('show-flyout');
|
|
697
|
+
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
698
|
+
// Delay the vaildation until after the post message is done.
|
|
699
|
+
setTimeout(function () {
|
|
700
|
+
done();
|
|
701
|
+
}, 100);
|
|
702
|
+
});
|
|
703
|
+
});
|
|
704
|
+
describe('close-flyout', function () {
|
|
705
|
+
it('should raise "close-flyout" event.', function () {
|
|
706
|
+
var postedMessage;
|
|
707
|
+
var postedOrigin;
|
|
708
|
+
var client = new addin_client_1.AddinClient({
|
|
709
|
+
callbacks: {
|
|
710
|
+
init: function () { return; }
|
|
711
|
+
}
|
|
712
|
+
});
|
|
713
|
+
initializeHost();
|
|
714
|
+
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
715
|
+
postedMessage = message;
|
|
716
|
+
postedOrigin = targetOrigin;
|
|
717
|
+
});
|
|
718
|
+
client.closeFlyout();
|
|
719
|
+
client.destroy();
|
|
720
|
+
expect(postedMessage.message).toBe(undefined);
|
|
721
|
+
expect(postedMessage.messageType).toBe('close-flyout');
|
|
722
|
+
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
723
|
+
});
|
|
724
|
+
});
|
|
725
|
+
describe('show-confirm', function () {
|
|
726
|
+
it('should raise "show-confirm" event with proper message.', function (done) {
|
|
727
|
+
var postedMessage;
|
|
728
|
+
var postedOrigin;
|
|
729
|
+
var confirmAction;
|
|
730
|
+
var client = new addin_client_1.AddinClient({
|
|
731
|
+
callbacks: {
|
|
732
|
+
init: function () { return; }
|
|
733
|
+
}
|
|
734
|
+
});
|
|
735
|
+
initializeHost();
|
|
736
|
+
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
737
|
+
postedMessage = message;
|
|
738
|
+
postedOrigin = targetOrigin;
|
|
739
|
+
});
|
|
740
|
+
var args = {
|
|
741
|
+
body: 'Confirm dialog body text',
|
|
742
|
+
buttons: [
|
|
743
|
+
{
|
|
744
|
+
action: 'action 1',
|
|
745
|
+
text: 'Action 1'
|
|
746
|
+
},
|
|
747
|
+
{
|
|
748
|
+
action: 'action 2',
|
|
749
|
+
autofocus: true,
|
|
750
|
+
style: addin_confirm_button_style_1.AddinConfirmButtonStyle.Primary,
|
|
751
|
+
text: 'Action 2'
|
|
752
|
+
}
|
|
753
|
+
],
|
|
754
|
+
message: 'This is a confirm'
|
|
755
|
+
};
|
|
756
|
+
client.showConfirm(args)
|
|
757
|
+
.then(function (result) {
|
|
758
|
+
confirmAction = result;
|
|
759
|
+
});
|
|
760
|
+
var closedMsg = {
|
|
761
|
+
message: {
|
|
762
|
+
reason: 'some action'
|
|
763
|
+
},
|
|
764
|
+
messageType: 'confirm-closed',
|
|
765
|
+
source: 'bb-addin-host'
|
|
766
|
+
};
|
|
767
|
+
postMessageFromHost(closedMsg);
|
|
768
|
+
client.destroy();
|
|
769
|
+
expect(postedMessage.message.message).toBe(args.message);
|
|
770
|
+
expect(postedMessage.messageType).toBe('show-confirm');
|
|
771
|
+
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
772
|
+
// Delay the vaildation until after the post message is done.
|
|
773
|
+
setTimeout(function () {
|
|
774
|
+
expect(confirmAction).toBe('some action');
|
|
775
|
+
done();
|
|
776
|
+
}, 100);
|
|
777
|
+
});
|
|
778
|
+
});
|
|
779
|
+
describe('show-error', function () {
|
|
780
|
+
it('should raise "show-error" event with proper message.', function () {
|
|
781
|
+
var postedMessage;
|
|
782
|
+
var postedOrigin;
|
|
783
|
+
var client = new addin_client_1.AddinClient({
|
|
784
|
+
callbacks: {
|
|
785
|
+
init: function () { return; }
|
|
786
|
+
}
|
|
787
|
+
});
|
|
788
|
+
initializeHost();
|
|
789
|
+
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
790
|
+
postedMessage = message;
|
|
791
|
+
postedOrigin = targetOrigin;
|
|
792
|
+
});
|
|
793
|
+
var args = {
|
|
794
|
+
closeText: 'Close',
|
|
795
|
+
description: 'Error desc',
|
|
796
|
+
title: 'Error title'
|
|
797
|
+
};
|
|
798
|
+
client.showError(args);
|
|
799
|
+
client.destroy();
|
|
800
|
+
expect(postedMessage.message).toBe(args);
|
|
801
|
+
expect(postedMessage.messageType).toBe('show-error');
|
|
802
|
+
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
803
|
+
});
|
|
804
|
+
});
|
|
805
|
+
describe('showWait', function () {
|
|
806
|
+
var client;
|
|
807
|
+
var spyPostMessage;
|
|
808
|
+
beforeEach(function () {
|
|
809
|
+
client = new addin_client_1.AddinClient({
|
|
810
|
+
callbacks: {
|
|
811
|
+
init: function () { return; }
|
|
812
|
+
}
|
|
813
|
+
});
|
|
814
|
+
spyPostMessage = spyOn(window.parent, 'postMessage');
|
|
815
|
+
spyPostMessage.and.stub();
|
|
816
|
+
initializeHost();
|
|
817
|
+
spyPostMessage.calls.reset();
|
|
818
|
+
});
|
|
819
|
+
afterEach(function () {
|
|
820
|
+
client.destroy();
|
|
821
|
+
});
|
|
822
|
+
it('should raise "show-wait" event.', function () {
|
|
823
|
+
var expected = jasmine.objectContaining({
|
|
824
|
+
messageType: 'show-wait'
|
|
825
|
+
});
|
|
826
|
+
client.showWait();
|
|
827
|
+
expect(window.parent.postMessage).toHaveBeenCalledWith(expected, jasmine.any(String));
|
|
828
|
+
});
|
|
829
|
+
it('should use trusted host.', function () {
|
|
830
|
+
var expected = TEST_HOST_ORIGIN;
|
|
831
|
+
client.showWait();
|
|
832
|
+
expect(spyPostMessage).toHaveBeenCalledWith(jasmine.any(Object), expected);
|
|
833
|
+
});
|
|
834
|
+
});
|
|
835
|
+
describe('hideWait', function () {
|
|
836
|
+
var client;
|
|
837
|
+
var spyPostMessage;
|
|
838
|
+
beforeEach(function () {
|
|
839
|
+
client = new addin_client_1.AddinClient({
|
|
840
|
+
callbacks: {
|
|
841
|
+
init: function () { return; }
|
|
842
|
+
}
|
|
843
|
+
});
|
|
844
|
+
spyPostMessage = spyOn(window.parent, 'postMessage');
|
|
845
|
+
spyPostMessage.and.stub();
|
|
846
|
+
initializeHost();
|
|
847
|
+
spyPostMessage.calls.reset();
|
|
848
|
+
});
|
|
849
|
+
afterEach(function () {
|
|
850
|
+
client.destroy();
|
|
851
|
+
});
|
|
852
|
+
it('should raise "hide-wait" event.', function () {
|
|
853
|
+
var expected = jasmine.objectContaining({
|
|
854
|
+
messageType: 'hide-wait'
|
|
855
|
+
});
|
|
856
|
+
client.hideWait();
|
|
857
|
+
expect(window.parent.postMessage).toHaveBeenCalledWith(expected, jasmine.any(String));
|
|
858
|
+
});
|
|
859
|
+
it('should use trusted host.', function () {
|
|
860
|
+
var expected = TEST_HOST_ORIGIN;
|
|
861
|
+
client.hideWait();
|
|
862
|
+
expect(spyPostMessage).toHaveBeenCalledWith(jasmine.any(Object), expected);
|
|
863
|
+
});
|
|
864
|
+
});
|
|
865
|
+
describe('event handler', function () {
|
|
866
|
+
var client;
|
|
867
|
+
var spyPostMessage;
|
|
868
|
+
beforeEach(function () {
|
|
869
|
+
client = new addin_client_1.AddinClient({
|
|
870
|
+
callbacks: {
|
|
871
|
+
init: function () { return; }
|
|
872
|
+
}
|
|
873
|
+
});
|
|
874
|
+
spyPostMessage = spyOn(window.parent, 'postMessage');
|
|
875
|
+
spyPostMessage.and.stub();
|
|
876
|
+
initializeHost();
|
|
877
|
+
spyPostMessage.calls.reset();
|
|
878
|
+
});
|
|
879
|
+
afterEach(function () {
|
|
880
|
+
client.destroy();
|
|
881
|
+
});
|
|
882
|
+
it('should add a callback function for the provided event type.', function () {
|
|
883
|
+
var callback = function (context) {
|
|
884
|
+
return;
|
|
885
|
+
};
|
|
886
|
+
client.addEventHandler('form-data-update', callback);
|
|
887
|
+
var addinEvents = client.registeredAddinEvents;
|
|
888
|
+
expect(Object.keys(addinEvents).length).toBe(1);
|
|
889
|
+
expect(addinEvents['form-data-update']).toBe(callback);
|
|
890
|
+
});
|
|
891
|
+
it('should execute callback function for the provided event type.', function (done) {
|
|
892
|
+
var callbackCalled = false;
|
|
893
|
+
var callbackContext = {};
|
|
894
|
+
var callback = function (context) {
|
|
895
|
+
callbackCalled = true;
|
|
896
|
+
callbackContext = context;
|
|
897
|
+
};
|
|
898
|
+
client.addEventHandler('form-data-update', callback);
|
|
899
|
+
var msg = {
|
|
900
|
+
message: {
|
|
901
|
+
context: {
|
|
902
|
+
context: {
|
|
903
|
+
constituent_id: '280',
|
|
904
|
+
gift_type: 'donation'
|
|
905
|
+
},
|
|
906
|
+
type: 'form-data-update'
|
|
907
|
+
},
|
|
908
|
+
eventRequestId: 1
|
|
909
|
+
},
|
|
910
|
+
messageType: 'host-event',
|
|
911
|
+
source: 'bb-addin-host'
|
|
912
|
+
};
|
|
913
|
+
postMessageFromHost(msg);
|
|
914
|
+
expect(callbackCalled).toBe(true);
|
|
915
|
+
expect(callbackContext).toBe(msg.message.context.context);
|
|
916
|
+
setTimeout(function () {
|
|
917
|
+
expect(window.parent.postMessage).toHaveBeenCalledWith({
|
|
918
|
+
addinId: 'test_id',
|
|
919
|
+
message: {
|
|
920
|
+
eventRequestId: 1
|
|
921
|
+
},
|
|
922
|
+
messageType: 'event-received',
|
|
923
|
+
source: 'bb-addin-client'
|
|
924
|
+
}, jasmine.any(String));
|
|
925
|
+
done();
|
|
926
|
+
}, 1);
|
|
927
|
+
});
|
|
928
|
+
it('should respond to event if callback not found.', function (done) {
|
|
929
|
+
client.addEventHandler('form-data-update', undefined);
|
|
930
|
+
var msg = {
|
|
931
|
+
message: {
|
|
932
|
+
context: {
|
|
933
|
+
context: {
|
|
934
|
+
constituent_id: '280',
|
|
935
|
+
gift_type: 'donation'
|
|
936
|
+
},
|
|
937
|
+
type: 'form-data-update'
|
|
938
|
+
},
|
|
939
|
+
eventRequestId: 1
|
|
940
|
+
},
|
|
941
|
+
messageType: 'host-event',
|
|
942
|
+
source: 'bb-addin-host'
|
|
943
|
+
};
|
|
944
|
+
postMessageFromHost(msg);
|
|
945
|
+
setTimeout(function () {
|
|
946
|
+
expect(window.parent.postMessage).toHaveBeenCalledWith({
|
|
947
|
+
addinId: 'test_id',
|
|
948
|
+
message: {
|
|
949
|
+
eventRequestId: 1
|
|
950
|
+
},
|
|
951
|
+
messageType: 'event-received',
|
|
952
|
+
source: 'bb-addin-client'
|
|
953
|
+
}, jasmine.any(String));
|
|
954
|
+
done();
|
|
955
|
+
}, 1);
|
|
956
|
+
});
|
|
957
|
+
it('should wait for blocking event type to respond.', function (done) {
|
|
958
|
+
var callbackCalled = false;
|
|
959
|
+
var callbackContext = {};
|
|
960
|
+
client.addEventHandler('form-save', function (context, saveDone) {
|
|
961
|
+
callbackCalled = true;
|
|
962
|
+
callbackContext = context;
|
|
963
|
+
saveDone();
|
|
964
|
+
});
|
|
965
|
+
var msg = {
|
|
966
|
+
message: {
|
|
967
|
+
context: {
|
|
968
|
+
context: {
|
|
969
|
+
constituent_id: '280',
|
|
970
|
+
gift_type: 'donation'
|
|
971
|
+
},
|
|
972
|
+
type: 'form-save'
|
|
973
|
+
},
|
|
974
|
+
eventRequestId: 1
|
|
975
|
+
},
|
|
976
|
+
messageType: 'host-event',
|
|
977
|
+
source: 'bb-addin-host'
|
|
978
|
+
};
|
|
979
|
+
postMessageFromHost(msg);
|
|
980
|
+
expect(callbackCalled).toBe(true);
|
|
981
|
+
expect(callbackContext).toBe(msg.message.context.context);
|
|
982
|
+
setTimeout(function () {
|
|
983
|
+
expect(window.parent.postMessage).toHaveBeenCalledWith({
|
|
984
|
+
addinId: 'test_id',
|
|
985
|
+
message: {
|
|
986
|
+
eventRequestId: 1
|
|
987
|
+
},
|
|
988
|
+
messageType: 'event-received',
|
|
989
|
+
source: 'bb-addin-client'
|
|
990
|
+
}, jasmine.any(String));
|
|
991
|
+
done();
|
|
992
|
+
}, 1);
|
|
993
|
+
});
|
|
994
|
+
});
|
|
995
|
+
describe('send event', function () {
|
|
996
|
+
var client;
|
|
997
|
+
beforeEach(function () {
|
|
998
|
+
client = new addin_client_1.AddinClient({
|
|
999
|
+
callbacks: {
|
|
1000
|
+
init: function () { return; }
|
|
1001
|
+
}
|
|
1002
|
+
});
|
|
1003
|
+
});
|
|
1004
|
+
afterEach(function () {
|
|
1005
|
+
client.destroy();
|
|
1006
|
+
});
|
|
1007
|
+
it('should initialize add-in with supported event types.', function () {
|
|
1008
|
+
var msg = {
|
|
1009
|
+
message: {
|
|
1010
|
+
context: 'my_context',
|
|
1011
|
+
envId: 'my_envid',
|
|
1012
|
+
supportedEventTypes: ['update-settings']
|
|
1013
|
+
},
|
|
1014
|
+
messageType: 'host-ready',
|
|
1015
|
+
source: 'bb-addin-host'
|
|
1016
|
+
};
|
|
1017
|
+
postMessageFromHost(msg);
|
|
1018
|
+
expect(client.supportedEventTypes).toEqual(['update-settings']);
|
|
1019
|
+
});
|
|
1020
|
+
it('should raise "client-event" event with proper message.', function (done) {
|
|
1021
|
+
var postedMessage;
|
|
1022
|
+
var postedOrigin;
|
|
1023
|
+
var msg = {
|
|
1024
|
+
message: {
|
|
1025
|
+
context: 'my_context',
|
|
1026
|
+
envId: 'my_envid',
|
|
1027
|
+
supportedEventTypes: ['update-settings']
|
|
1028
|
+
},
|
|
1029
|
+
messageType: 'host-ready',
|
|
1030
|
+
source: 'bb-addin-host'
|
|
1031
|
+
};
|
|
1032
|
+
postMessageFromHost(msg);
|
|
1033
|
+
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
1034
|
+
postedMessage = message;
|
|
1035
|
+
postedOrigin = targetOrigin;
|
|
1036
|
+
});
|
|
1037
|
+
var args = {
|
|
1038
|
+
event: {
|
|
1039
|
+
context: {
|
|
1040
|
+
constituent_id: 280
|
|
1041
|
+
},
|
|
1042
|
+
type: 'update-settings'
|
|
1043
|
+
},
|
|
1044
|
+
eventRequestId: 0
|
|
1045
|
+
};
|
|
1046
|
+
var promiseResolved = false;
|
|
1047
|
+
client.sendEvent({
|
|
1048
|
+
context: {
|
|
1049
|
+
constituent_id: 280
|
|
1050
|
+
},
|
|
1051
|
+
type: 'update-settings'
|
|
1052
|
+
}).then(function () {
|
|
1053
|
+
promiseResolved = true;
|
|
1054
|
+
});
|
|
1055
|
+
setTimeout(function () {
|
|
1056
|
+
expect(postedMessage.message).toEqual(args);
|
|
1057
|
+
expect(postedMessage.messageType).toBe('client-event');
|
|
1058
|
+
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
1059
|
+
// host responds with event-received message
|
|
1060
|
+
var msgReceived = {
|
|
1061
|
+
message: {
|
|
1062
|
+
eventRequestId: 0
|
|
1063
|
+
},
|
|
1064
|
+
messageType: 'event-received',
|
|
1065
|
+
source: 'bb-addin-host'
|
|
1066
|
+
};
|
|
1067
|
+
postMessageFromHost(msgReceived);
|
|
1068
|
+
// Delay the vaildation until after the post message is done.
|
|
1069
|
+
setTimeout(function () {
|
|
1070
|
+
expect(promiseResolved).toBe(true);
|
|
1071
|
+
done();
|
|
1072
|
+
}, 100);
|
|
1073
|
+
}, 600);
|
|
1074
|
+
});
|
|
1075
|
+
it('throws error when attempint to send an unsupported event type.', function (done) {
|
|
1076
|
+
var msg = {
|
|
1077
|
+
message: {
|
|
1078
|
+
context: 'my_context',
|
|
1079
|
+
envId: 'my_envid',
|
|
1080
|
+
supportedEventTypes: ['update-settings']
|
|
1081
|
+
},
|
|
1082
|
+
messageType: 'host-ready',
|
|
1083
|
+
source: 'bb-addin-host'
|
|
1084
|
+
};
|
|
1085
|
+
postMessageFromHost(msg);
|
|
1086
|
+
var promiseResolved = false;
|
|
1087
|
+
var error;
|
|
1088
|
+
client.sendEvent({
|
|
1089
|
+
context: {
|
|
1090
|
+
constituent_id: 280
|
|
1091
|
+
},
|
|
1092
|
+
type: 'update-settings2'
|
|
1093
|
+
}).then(function () {
|
|
1094
|
+
promiseResolved = true;
|
|
1095
|
+
}).catch(function (err) {
|
|
1096
|
+
error = err;
|
|
1097
|
+
});
|
|
1098
|
+
setTimeout(function () {
|
|
1099
|
+
expect(promiseResolved).toBeFalse();
|
|
1100
|
+
expect(error).toBe('Event type not supported');
|
|
1101
|
+
done();
|
|
1102
|
+
}, 100);
|
|
1103
|
+
});
|
|
1104
|
+
it('should cancel pending addin event when new event sent', function (done) {
|
|
1105
|
+
var postedMessage;
|
|
1106
|
+
var postedOrigin;
|
|
1107
|
+
var msg = {
|
|
1108
|
+
message: {
|
|
1109
|
+
context: 'my_context',
|
|
1110
|
+
envId: 'my_envid',
|
|
1111
|
+
supportedEventTypes: ['update-settings']
|
|
1112
|
+
},
|
|
1113
|
+
messageType: 'host-ready',
|
|
1114
|
+
source: 'bb-addin-host'
|
|
1115
|
+
};
|
|
1116
|
+
postMessageFromHost(msg);
|
|
1117
|
+
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
1118
|
+
postedMessage = message;
|
|
1119
|
+
postedOrigin = targetOrigin;
|
|
1120
|
+
});
|
|
1121
|
+
var args = {
|
|
1122
|
+
event: {
|
|
1123
|
+
context: {
|
|
1124
|
+
constituent_id: 280
|
|
1125
|
+
},
|
|
1126
|
+
type: 'update-settings'
|
|
1127
|
+
},
|
|
1128
|
+
eventRequestId: 0
|
|
1129
|
+
};
|
|
1130
|
+
var promiseResolved = false;
|
|
1131
|
+
var rejectedReason;
|
|
1132
|
+
client.sendEvent({
|
|
1133
|
+
context: {
|
|
1134
|
+
constituent_id: 280
|
|
1135
|
+
},
|
|
1136
|
+
type: 'update-settings'
|
|
1137
|
+
}).then(function () {
|
|
1138
|
+
// should not come here
|
|
1139
|
+
promiseResolved = true;
|
|
1140
|
+
}, function (reason) {
|
|
1141
|
+
rejectedReason = reason;
|
|
1142
|
+
});
|
|
1143
|
+
// immediately send second event
|
|
1144
|
+
client.sendEvent({
|
|
1145
|
+
context: {
|
|
1146
|
+
constituent_id: 280
|
|
1147
|
+
},
|
|
1148
|
+
type: 'update-settings'
|
|
1149
|
+
}).then(function () {
|
|
1150
|
+
promiseResolved = true;
|
|
1151
|
+
rejectedReason = undefined;
|
|
1152
|
+
});
|
|
1153
|
+
// Delay the vaildation until after the initial event is rejected.
|
|
1154
|
+
setTimeout(function () {
|
|
1155
|
+
expect(rejectedReason).toBe('Event cancelled');
|
|
1156
|
+
expect(promiseResolved).toBe(false);
|
|
1157
|
+
// Delay the vaildation until after the pending add-in event is sent.
|
|
1158
|
+
setTimeout(function () {
|
|
1159
|
+
expect(postedMessage.message).toEqual(args);
|
|
1160
|
+
expect(postedMessage.messageType).toBe('client-event');
|
|
1161
|
+
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
1162
|
+
// host responds with event-received message
|
|
1163
|
+
var msgReceived = {
|
|
1164
|
+
message: {
|
|
1165
|
+
eventRequestId: 0
|
|
1166
|
+
},
|
|
1167
|
+
messageType: 'event-received',
|
|
1168
|
+
source: 'bb-addin-host'
|
|
1169
|
+
};
|
|
1170
|
+
postMessageFromHost(msgReceived);
|
|
1171
|
+
// Delay the vaildation until after the post message is done.
|
|
1172
|
+
setTimeout(function () {
|
|
1173
|
+
expect(promiseResolved).toBe(true);
|
|
1174
|
+
done();
|
|
1175
|
+
}, 100);
|
|
1176
|
+
}, 600);
|
|
1177
|
+
});
|
|
1178
|
+
});
|
|
1179
|
+
});
|
|
1180
|
+
describe('postMessageToHostPage', function () {
|
|
1181
|
+
it('should warn if origin is invalid.', function () {
|
|
1182
|
+
var badOrigin = 'https://google.com';
|
|
1183
|
+
var messageWasSentFromAddin = false;
|
|
1184
|
+
var consoleWarningIssued = false;
|
|
1185
|
+
var client = new addin_client_1.AddinClient({
|
|
1186
|
+
callbacks: {
|
|
1187
|
+
init: function () { return; }
|
|
1188
|
+
}
|
|
1189
|
+
});
|
|
1190
|
+
var msg = {
|
|
1191
|
+
message: {},
|
|
1192
|
+
messageType: 'host-ready',
|
|
1193
|
+
source: 'bb-addin-host'
|
|
1194
|
+
};
|
|
1195
|
+
// Initialize from the host with a bad origin
|
|
1196
|
+
postMessageFromHost(msg, badOrigin);
|
|
1197
|
+
// Spy on messages from the add-in to make sure it doesn't post.
|
|
1198
|
+
spyOn(window.parent, 'postMessage').and.callFake(function () {
|
|
1199
|
+
messageWasSentFromAddin = true;
|
|
1200
|
+
});
|
|
1201
|
+
// Spy on messages from the add-in to make sure it doesn't post.
|
|
1202
|
+
spyOn(console, 'warn').and.callFake(function () {
|
|
1203
|
+
consoleWarningIssued = true;
|
|
1204
|
+
});
|
|
1205
|
+
var args = {
|
|
1206
|
+
url: 'https://renxt.blackbaud.com?test=1'
|
|
1207
|
+
};
|
|
1208
|
+
// Call navigate to trigger posting a message to the host.
|
|
1209
|
+
// Should result in a warning and not post because the host origin was not valid.
|
|
1210
|
+
client.navigate(args);
|
|
1211
|
+
client.destroy();
|
|
1212
|
+
expect(messageWasSentFromAddin).toBe(false);
|
|
1213
|
+
expect(consoleWarningIssued).toBe(true);
|
|
1214
|
+
});
|
|
1215
|
+
[
|
|
1216
|
+
'https://test.blackbaud.com',
|
|
1217
|
+
'https://my.test.blackbaud.com',
|
|
1218
|
+
'https://test_site.blackbaud.com',
|
|
1219
|
+
'https://test-site.blackbaud.com',
|
|
1220
|
+
'https://view-my.test_site.blackbaud.com',
|
|
1221
|
+
'https://test.blackbaud-dev.com',
|
|
1222
|
+
'https://my.test.blackbaud-dev.com',
|
|
1223
|
+
'https://test_site.blackbaud-dev.com',
|
|
1224
|
+
'https://test-site.blackbaud-dev.com',
|
|
1225
|
+
'https://view-my.test_site.blackbaud-dev.com',
|
|
1226
|
+
'http://test.blackbaud-dev.com',
|
|
1227
|
+
'http://my.test.blackbaud-dev.com',
|
|
1228
|
+
'http://test_site.blackbaud-dev.com',
|
|
1229
|
+
'http://test-site.blackbaud-dev.com',
|
|
1230
|
+
'http://view-my.test_site.blackbaud-dev.com',
|
|
1231
|
+
'https://test.blackbaudhosting.com',
|
|
1232
|
+
'https://my.test.blackbaudhosting.com',
|
|
1233
|
+
'https://test_site.blackbaudhosting.com',
|
|
1234
|
+
'https://test-site.blackbaudhosting.com',
|
|
1235
|
+
'https://view-my.test_site.blackbaudhosting.com',
|
|
1236
|
+
'https://test.bbcloudservices.com',
|
|
1237
|
+
'https://my.test.bbcloudservices.com',
|
|
1238
|
+
'https://test_site.bbcloudservices.com',
|
|
1239
|
+
'https://test-site.bbcloudservices.com',
|
|
1240
|
+
'https://view-my.test_site.bbcloudservices.com',
|
|
1241
|
+
'https://localhost',
|
|
1242
|
+
'https://localhost:8080',
|
|
1243
|
+
'https://secure2.convio.net',
|
|
1244
|
+
'https://secure3.convio.net',
|
|
1245
|
+
'https://secure8.convio.net',
|
|
1246
|
+
'https://testweb.convio.com',
|
|
1247
|
+
'https://test.blackbaudcloud.com',
|
|
1248
|
+
'https://my.test.blackbaudcloud.com',
|
|
1249
|
+
'https://test_site.blackbaudcloud.com',
|
|
1250
|
+
'https://test-site.blackbaudcloud.com',
|
|
1251
|
+
'https://view-my.test_site.blackbaudcloud.com',
|
|
1252
|
+
'https://test.conviocloud.com',
|
|
1253
|
+
'https://my.test.conviocloud.com',
|
|
1254
|
+
'https://test_site.conviocloud.com',
|
|
1255
|
+
'https://test-site.conviocloud.com',
|
|
1256
|
+
'https://view-my.test_site.conviocloud.com',
|
|
1257
|
+
'https://www.blackbaudfaith.com',
|
|
1258
|
+
'https://test.blackbaudfaith.com',
|
|
1259
|
+
'https://my.test.blackbaudfaith.com',
|
|
1260
|
+
'https://test_site.blackbaudfaith.com',
|
|
1261
|
+
'https://test-site.blackbaudfaith.com',
|
|
1262
|
+
'https://view-my.test_site.blackbaudfaith.com',
|
|
1263
|
+
'https://www.blackbaudportal.com',
|
|
1264
|
+
'https://test.blackbaudportal.com',
|
|
1265
|
+
'https://my.test.blackbaudportal.com',
|
|
1266
|
+
'https://test_site.blackbaudportal.com',
|
|
1267
|
+
'https://test-site.blackbaudportal.com',
|
|
1268
|
+
'https://view-my.test_site.blackbaudportal.com',
|
|
1269
|
+
'https://www.bbk12.com',
|
|
1270
|
+
'https://test.bbk12.com',
|
|
1271
|
+
'https://my.test.bbk12.com',
|
|
1272
|
+
'https://test_site.bbk12.com',
|
|
1273
|
+
'https://test-site.bbk12.com',
|
|
1274
|
+
'https://view-my.test_site.bbk12.com',
|
|
1275
|
+
'https://www.mycampus-app.com',
|
|
1276
|
+
'https://test.mycampus-app.com',
|
|
1277
|
+
'https://my.test.mycampus-app.com',
|
|
1278
|
+
'https://test_site.mycampus-app.com',
|
|
1279
|
+
'https://test-site.mycampus-app.com',
|
|
1280
|
+
'https://view-my.test_site.mycampus-app.com',
|
|
1281
|
+
'https://www.myschoolapp.com',
|
|
1282
|
+
'https://test.myschoolapp.com',
|
|
1283
|
+
'https://my.test.myschoolapp.com',
|
|
1284
|
+
'https://test_site.myschoolapp.com',
|
|
1285
|
+
'https://test-site.myschoolapp.com',
|
|
1286
|
+
'https://view-my.test_site.myschoolapp.com',
|
|
1287
|
+
'https://www.myschoolautomation.com',
|
|
1288
|
+
'https://test.myschoolautomation.com',
|
|
1289
|
+
'https://my.test.myschoolautomation.com',
|
|
1290
|
+
'https://test_site.myschoolautomation.com',
|
|
1291
|
+
'https://test-site.myschoolautomation.com',
|
|
1292
|
+
'https://view-my.test_site.myschoolautomation.com',
|
|
1293
|
+
'https://www.myschooldemo.com',
|
|
1294
|
+
'https://test.myschooldemo.com',
|
|
1295
|
+
'https://my.test.myschooldemo.com',
|
|
1296
|
+
'https://test_site.myschooldemo.com',
|
|
1297
|
+
'https://test-site.myschooldemo.com',
|
|
1298
|
+
'https://view-my.test_site.myschooldemo.com',
|
|
1299
|
+
'https://www.myschooltraining.com',
|
|
1300
|
+
'https://test.myschooltraining.com',
|
|
1301
|
+
'https://my.test.myschooltraining.com',
|
|
1302
|
+
'https://test_site.myschooltraining.com',
|
|
1303
|
+
'https://test-site.myschooltraining.com',
|
|
1304
|
+
'https://view-my.test_site.myschooltraining.com',
|
|
1305
|
+
'https://give.blackbaudwp.com',
|
|
1306
|
+
'https://participate.carrytheload.org',
|
|
1307
|
+
'https://secure.ummsfoundation.org',
|
|
1308
|
+
'http://participate.lcrf.org',
|
|
1309
|
+
'https://secure.go2.org',
|
|
1310
|
+
'https://give.nationwidechildrens.org',
|
|
1311
|
+
'https://support.lupus.org',
|
|
1312
|
+
'https://secure.operationsmile.ca',
|
|
1313
|
+
'https://secure2.convio.net',
|
|
1314
|
+
'https://secure.ontariospca.ca',
|
|
1315
|
+
'https://events.brighamandwomens.org',
|
|
1316
|
+
'https://secure.northernlighthealth.org',
|
|
1317
|
+
'http://hjcnm.convio.net',
|
|
1318
|
+
'https://secure.alpha1.org',
|
|
1319
|
+
'https://fundraising.pscpartners.org',
|
|
1320
|
+
'https://hope.mercyforanimals.org',
|
|
1321
|
+
'https://secure.braintumor.org',
|
|
1322
|
+
'https://support.cancer.ca',
|
|
1323
|
+
'https://secure.phoenixchildrensfoundation.org',
|
|
1324
|
+
'https://secure.ocmc.org',
|
|
1325
|
+
'https://support.stlouischildrens.org',
|
|
1326
|
+
'https://give.choa.org',
|
|
1327
|
+
'https://secure.acsevents.org',
|
|
1328
|
+
'https://secure.operationsmile.org',
|
|
1329
|
+
'https://give.mdmercy.com',
|
|
1330
|
+
'https://foundation.cookchildrens.org',
|
|
1331
|
+
'https://secure1.chla.org',
|
|
1332
|
+
'https://secure.nleomf.org',
|
|
1333
|
+
'https://secure.pwatoronto.org',
|
|
1334
|
+
'https://support.jfsla.org',
|
|
1335
|
+
'https://give.roswellpark.org',
|
|
1336
|
+
'https://secure.alsagoldenwest.org',
|
|
1337
|
+
'https://events.cancercarefoundation.ca',
|
|
1338
|
+
'https://secure.alsnc.org',
|
|
1339
|
+
'https://secure.alsanm.org',
|
|
1340
|
+
'https://secure.waysidewaifs.org',
|
|
1341
|
+
'https://www.bladdercancercanada.org',
|
|
1342
|
+
'https://danafarber.jimmyfund.org',
|
|
1343
|
+
'https://secure.info-komen.org',
|
|
1344
|
+
'https://giving.mountsinai.org',
|
|
1345
|
+
'https://www.walkforpd.ca',
|
|
1346
|
+
'https://secure.alsoregon.org',
|
|
1347
|
+
'https://www.feedhopenow.org',
|
|
1348
|
+
'https://secure.trilliumgiving.ca',
|
|
1349
|
+
'https://www.swimacrossamerica.org',
|
|
1350
|
+
'https://ovariancanada.org',
|
|
1351
|
+
'https://secure.alsunitedchicago.org',
|
|
1352
|
+
'https://secure.fredhutch.org',
|
|
1353
|
+
'https://www.hss.edu',
|
|
1354
|
+
'https://donate.nyghfoundation.ca',
|
|
1355
|
+
'https://secure.natureconservancy.ca',
|
|
1356
|
+
'https://secure.llscanada.org',
|
|
1357
|
+
'https://secure.als-ny.org',
|
|
1358
|
+
'https://support.zerocancer.org',
|
|
1359
|
+
'https://secure.alsmidatlantic.org',
|
|
1360
|
+
'https://support.habitat.ca',
|
|
1361
|
+
'https://support.stamfordhospitalfoundation.org',
|
|
1362
|
+
'https://secure.alsohio.org',
|
|
1363
|
+
'https://support.cancercarefdn.mb.ca',
|
|
1364
|
+
'https://support.baycrestfoundation.org',
|
|
1365
|
+
'https://give.southlake.ca',
|
|
1366
|
+
'https://donate.parkinson.ca',
|
|
1367
|
+
].forEach(function (url) {
|
|
1368
|
+
it("should not warn because ".concat(url, " is allowed."), function () {
|
|
1369
|
+
var messageWasSentFromAddin = false;
|
|
1370
|
+
var consoleWarningIssued = false;
|
|
1371
|
+
var client = new addin_client_1.AddinClient({
|
|
1372
|
+
callbacks: {
|
|
1373
|
+
init: function () {
|
|
1374
|
+
return;
|
|
1375
|
+
}
|
|
1376
|
+
}
|
|
1377
|
+
});
|
|
1378
|
+
var msg = {
|
|
1379
|
+
message: {},
|
|
1380
|
+
messageType: 'host-ready',
|
|
1381
|
+
source: 'bb-addin-host'
|
|
1382
|
+
};
|
|
1383
|
+
postMessageFromHost(msg, url);
|
|
1384
|
+
// Spy on messages from the add-in to make sure it does post.
|
|
1385
|
+
spyOn(window.parent, 'postMessage').and.callFake(function () {
|
|
1386
|
+
messageWasSentFromAddin = true;
|
|
1387
|
+
});
|
|
1388
|
+
// Spy on messages from the add-in to make sure it doesn't warn.
|
|
1389
|
+
spyOn(console, 'warn').and.callFake(function () {
|
|
1390
|
+
consoleWarningIssued = true;
|
|
1391
|
+
});
|
|
1392
|
+
var args = {
|
|
1393
|
+
url: 'https://renxt.blackbaud.com?test=1'
|
|
1394
|
+
};
|
|
1395
|
+
// Call navigate to trigger posting a message to the host.
|
|
1396
|
+
// Should result in a successful post and no warning because the host origin is valid.
|
|
1397
|
+
client.navigate(args);
|
|
1398
|
+
client.destroy();
|
|
1399
|
+
expect(messageWasSentFromAddin).toBe(true);
|
|
1400
|
+
expect(consoleWarningIssued).toBe(false);
|
|
1401
|
+
});
|
|
1402
|
+
});
|
|
1403
|
+
});
|
|
1404
|
+
describe('trackHeightChangesOfAddinContent', function () {
|
|
1405
|
+
it('should raise "height-change" event when the height changes.', function () {
|
|
1406
|
+
jasmine.clock().install();
|
|
1407
|
+
var postedMessage;
|
|
1408
|
+
var postedOrigin;
|
|
1409
|
+
var initArgs;
|
|
1410
|
+
var client = new addin_client_1.AddinClient({
|
|
1411
|
+
callbacks: {
|
|
1412
|
+
init: function (args) { initArgs = args; }
|
|
1413
|
+
}
|
|
1414
|
+
});
|
|
1415
|
+
initializeHost();
|
|
1416
|
+
spyOn(window.parent, 'postMessage').and.callFake(function (message, targetOrigin) {
|
|
1417
|
+
// Filter out the add-in ready event.
|
|
1418
|
+
if (message.messageType === 'height-change') {
|
|
1419
|
+
postedMessage = message;
|
|
1420
|
+
postedOrigin = targetOrigin;
|
|
1421
|
+
}
|
|
1422
|
+
});
|
|
1423
|
+
// Change height and wait for interval
|
|
1424
|
+
// The height posted should be the sum of offset height and top/bottom margin.
|
|
1425
|
+
document.body.style.marginTop = '10px';
|
|
1426
|
+
document.body.style.marginBottom = '5px';
|
|
1427
|
+
document.body.style.height = '100px';
|
|
1428
|
+
expect(document.body.offsetHeight).toBe(100);
|
|
1429
|
+
expect(document.documentElement.offsetHeight).toBe(115);
|
|
1430
|
+
jasmine.clock().tick(1100);
|
|
1431
|
+
// Validate message was sent.
|
|
1432
|
+
expect(postedMessage.message.height).toBe('115px');
|
|
1433
|
+
expect(postedMessage.messageType).toBe('height-change');
|
|
1434
|
+
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
1435
|
+
postedMessage = undefined;
|
|
1436
|
+
postedOrigin = undefined;
|
|
1437
|
+
// Change height and wait for interval
|
|
1438
|
+
document.body.style.height = '200px';
|
|
1439
|
+
expect(document.body.offsetHeight).toBe(200);
|
|
1440
|
+
expect(document.documentElement.offsetHeight).toBe(215);
|
|
1441
|
+
jasmine.clock().tick(1100);
|
|
1442
|
+
// Validate message was sent.
|
|
1443
|
+
expect(postedMessage.message.height).toBe('215px');
|
|
1444
|
+
expect(postedMessage.messageType).toBe('height-change');
|
|
1445
|
+
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
1446
|
+
postedMessage = undefined;
|
|
1447
|
+
postedOrigin = undefined;
|
|
1448
|
+
// Don't change height and wait for interval
|
|
1449
|
+
expect(document.body.offsetHeight).toBe(200);
|
|
1450
|
+
expect(document.documentElement.offsetHeight).toBe(215);
|
|
1451
|
+
jasmine.clock().tick(1100);
|
|
1452
|
+
// Validate message was not sent.
|
|
1453
|
+
expect(postedMessage).toBe(undefined);
|
|
1454
|
+
expect(postedOrigin).toBe(undefined);
|
|
1455
|
+
postedMessage = undefined;
|
|
1456
|
+
postedOrigin = undefined;
|
|
1457
|
+
// Change height and complete init.ready. This should trigger the message even without waiting
|
|
1458
|
+
// on the interval to pass.
|
|
1459
|
+
document.body.style.height = '300px';
|
|
1460
|
+
expect(document.body.offsetHeight).toBe(300);
|
|
1461
|
+
expect(document.documentElement.offsetHeight).toBe(315);
|
|
1462
|
+
expect(initArgs).not.toBe(null);
|
|
1463
|
+
if (initArgs) {
|
|
1464
|
+
initArgs.ready({});
|
|
1465
|
+
}
|
|
1466
|
+
// Validate message was sent.
|
|
1467
|
+
expect(postedMessage.message.height).toBe('315px');
|
|
1468
|
+
expect(postedMessage.messageType).toBe('height-change');
|
|
1469
|
+
expect(postedOrigin).toBe(TEST_HOST_ORIGIN);
|
|
1470
|
+
postedMessage = undefined;
|
|
1471
|
+
postedOrigin = undefined;
|
|
1472
|
+
client.destroy();
|
|
1473
|
+
jasmine.clock().uninstall();
|
|
1474
|
+
});
|
|
1475
|
+
});
|
|
1476
|
+
});
|
|
1415
1477
|
//# sourceMappingURL=addin-client.spec.js.map
|