@companion-module/host 0.1.0-0 → 0.1.0-1-nightly-feat-2-0-20260118-163706-cd65d67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/context.d.ts +3 -13
- package/dist/context.d.ts.map +1 -1
- package/dist/instance.d.ts +2 -1
- package/dist/instance.d.ts.map +1 -1
- package/dist/instance.js +8 -26
- package/dist/instance.js.map +1 -1
- package/dist/internal/actions.d.ts +2 -2
- package/dist/internal/actions.d.ts.map +1 -1
- package/dist/internal/actions.js +7 -35
- package/dist/internal/actions.js.map +1 -1
- package/dist/internal/feedback.d.ts +2 -3
- package/dist/internal/feedback.d.ts.map +1 -1
- package/dist/internal/feedback.js +15 -45
- package/dist/internal/feedback.js.map +1 -1
- package/package.json +5 -4
- package/dist/__tests__/ipc-wrapper.spec.d.ts +0 -2
- package/dist/__tests__/ipc-wrapper.spec.d.ts.map +0 -1
- package/dist/__tests__/ipc-wrapper.spec.js +0 -272
- package/dist/__tests__/ipc-wrapper.spec.js.map +0 -1
- package/dist/api.d.ts +0 -360
- package/dist/api.d.ts.map +0 -1
- package/dist/api.js +0 -8
- package/dist/api.js.map +0 -1
- package/dist/internal/__tests__/feedback.spec.d.ts +0 -2
- package/dist/internal/__tests__/feedback.spec.d.ts.map +0 -1
- package/dist/internal/__tests__/feedback.spec.js +0 -686
- package/dist/internal/__tests__/feedback.spec.js.map +0 -1
- package/dist/internal/__tests__/serializeIsVisibleFn.spec.d.ts +0 -2
- package/dist/internal/__tests__/serializeIsVisibleFn.spec.d.ts.map +0 -1
- package/dist/internal/__tests__/serializeIsVisibleFn.spec.js +0 -119
- package/dist/internal/__tests__/serializeIsVisibleFn.spec.js.map +0 -1
- package/dist/internal/__tests__/upgrade.spec.d.ts +0 -2
- package/dist/internal/__tests__/upgrade.spec.d.ts.map +0 -1
- package/dist/internal/__tests__/upgrade.spec.js +0 -280
- package/dist/internal/__tests__/upgrade.spec.js.map +0 -1
- package/dist/internal/base.d.ts +0 -4
- package/dist/internal/base.d.ts.map +0 -1
- package/dist/internal/base.js +0 -31
- package/dist/internal/base.js.map +0 -1
- package/dist/ipc-wrapper.d.ts +0 -37
- package/dist/ipc-wrapper.d.ts.map +0 -1
- package/dist/ipc-wrapper.js +0 -123
- package/dist/ipc-wrapper.js.map +0 -1
- package/dist/plugin.d.ts +0 -25
- package/dist/plugin.d.ts.map +0 -1
- package/dist/plugin.js +0 -301
- package/dist/plugin.js.map +0 -1
- package/dist/versions.d.ts +0 -10
- package/dist/versions.d.ts.map +0 -1
- package/dist/versions.js +0 -2
- package/dist/versions.js.map +0 -1
|
@@ -1,686 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, vi, beforeAll } from 'vitest';
|
|
2
|
-
import { runAllTimers } from '@companion-module/base/src/__mocks__/util.js';
|
|
3
|
-
import { FeedbackManager } from '../feedback.js';
|
|
4
|
-
const mockDefinitionId = 'definition0';
|
|
5
|
-
const mockDefinitionId2 = 'definition1';
|
|
6
|
-
const feedbackId = 'abcdef';
|
|
7
|
-
const feedback = {
|
|
8
|
-
id: feedbackId,
|
|
9
|
-
upgradeIndex: null,
|
|
10
|
-
disabled: false,
|
|
11
|
-
feedbackId: mockDefinitionId,
|
|
12
|
-
options: { a: 1, b: 4 },
|
|
13
|
-
isInverted: false,
|
|
14
|
-
controlId: 'control0',
|
|
15
|
-
image: undefined,
|
|
16
|
-
};
|
|
17
|
-
const feedbackId2 = 'abc123';
|
|
18
|
-
const feedback2 = {
|
|
19
|
-
id: feedbackId2,
|
|
20
|
-
upgradeIndex: null,
|
|
21
|
-
disabled: false,
|
|
22
|
-
feedbackId: mockDefinitionId2,
|
|
23
|
-
options: { a: 1, b: 4 },
|
|
24
|
-
isInverted: false,
|
|
25
|
-
controlId: 'control1',
|
|
26
|
-
image: undefined,
|
|
27
|
-
};
|
|
28
|
-
const unimplementedAsyncFunction = async () => {
|
|
29
|
-
throw new Error('Not implemented');
|
|
30
|
-
};
|
|
31
|
-
const unimplementedFunction = () => {
|
|
32
|
-
throw new Error('Not implemented');
|
|
33
|
-
};
|
|
34
|
-
describe('FeedbackManager', () => {
|
|
35
|
-
beforeEach(() => {
|
|
36
|
-
vi.useFakeTimers();
|
|
37
|
-
vi.clearAllMocks();
|
|
38
|
-
});
|
|
39
|
-
it('set definitions', () => {
|
|
40
|
-
const mockSetFeedbackDefinitions = vi.fn((_feedbacks) => null);
|
|
41
|
-
const manager = new FeedbackManager(unimplementedAsyncFunction, mockSetFeedbackDefinitions, unimplementedFunction);
|
|
42
|
-
expect(manager.getDefinitionIds()).toHaveLength(0);
|
|
43
|
-
expect(manager.getInstanceIds()).toHaveLength(0);
|
|
44
|
-
const mockDefinition = {
|
|
45
|
-
type: 'boolean',
|
|
46
|
-
name: 'Definition0',
|
|
47
|
-
defaultStyle: {},
|
|
48
|
-
options: [],
|
|
49
|
-
callback: vi.fn(() => false),
|
|
50
|
-
};
|
|
51
|
-
manager.setFeedbackDefinitions({ [mockDefinitionId]: mockDefinition });
|
|
52
|
-
expect(manager.getDefinitionIds()).toEqual([mockDefinitionId]);
|
|
53
|
-
expect(mockSetFeedbackDefinitions).toHaveBeenCalledTimes(1);
|
|
54
|
-
expect(mockSetFeedbackDefinitions).lastCalledWith([
|
|
55
|
-
{
|
|
56
|
-
id: mockDefinitionId,
|
|
57
|
-
type: 'boolean',
|
|
58
|
-
name: 'Definition0',
|
|
59
|
-
description: undefined,
|
|
60
|
-
hasLearn: false,
|
|
61
|
-
defaultStyle: {},
|
|
62
|
-
options: [],
|
|
63
|
-
},
|
|
64
|
-
]);
|
|
65
|
-
// replace existing
|
|
66
|
-
const mockDefinitionId2 = 'definition0';
|
|
67
|
-
manager.setFeedbackDefinitions({ [mockDefinitionId2]: mockDefinition });
|
|
68
|
-
expect(manager.getDefinitionIds()).toEqual([mockDefinitionId2]);
|
|
69
|
-
expect(manager.getInstanceIds()).toHaveLength(0);
|
|
70
|
-
expect(mockSetFeedbackDefinitions).toHaveBeenCalledTimes(2);
|
|
71
|
-
});
|
|
72
|
-
it('execute callback on registration', async () => {
|
|
73
|
-
const mockUpdateFeedbackValues = vi.fn((_values) => null);
|
|
74
|
-
const mockSetFeedbackDefinitions = vi.fn((_feedbacks) => null);
|
|
75
|
-
const manager = new FeedbackManager(unimplementedAsyncFunction, mockSetFeedbackDefinitions, mockUpdateFeedbackValues);
|
|
76
|
-
expect(manager.getDefinitionIds()).toHaveLength(0);
|
|
77
|
-
expect(manager.getInstanceIds()).toHaveLength(0);
|
|
78
|
-
const mockDefinitionId = 'definition0';
|
|
79
|
-
const mockDefinition = {
|
|
80
|
-
type: 'boolean',
|
|
81
|
-
name: 'Definition0',
|
|
82
|
-
defaultStyle: {},
|
|
83
|
-
options: [],
|
|
84
|
-
callback: vi.fn(() => false),
|
|
85
|
-
};
|
|
86
|
-
// setup definition
|
|
87
|
-
manager.setFeedbackDefinitions({ [mockDefinitionId]: mockDefinition });
|
|
88
|
-
expect(manager.getDefinitionIds()).toEqual([mockDefinitionId]);
|
|
89
|
-
expect(manager.getInstanceIds()).toHaveLength(0);
|
|
90
|
-
expect(mockSetFeedbackDefinitions).toHaveBeenCalledTimes(1);
|
|
91
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(0);
|
|
92
|
-
// report a feedback
|
|
93
|
-
manager.handleUpdateFeedbacks({
|
|
94
|
-
[feedbackId]: feedback,
|
|
95
|
-
});
|
|
96
|
-
// not called immediately
|
|
97
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(0);
|
|
98
|
-
// wait for debounce
|
|
99
|
-
await runAllTimers();
|
|
100
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(1);
|
|
101
|
-
// make sure it looks like expected
|
|
102
|
-
expect(mockDefinition.callback).toHaveBeenLastCalledWith({
|
|
103
|
-
id: feedbackId,
|
|
104
|
-
type: mockDefinition.type,
|
|
105
|
-
feedbackId: feedback.feedbackId,
|
|
106
|
-
controlId: feedback.controlId,
|
|
107
|
-
options: feedback.options,
|
|
108
|
-
}, expect.anything());
|
|
109
|
-
expect(manager.getInstanceIds()).toEqual([feedbackId]);
|
|
110
|
-
expect(mockUpdateFeedbackValues).toHaveBeenCalledTimes(1);
|
|
111
|
-
expect(mockUpdateFeedbackValues).toHaveBeenLastCalledWith([
|
|
112
|
-
{
|
|
113
|
-
id: 'abcdef',
|
|
114
|
-
controlId: 'control0',
|
|
115
|
-
value: false,
|
|
116
|
-
},
|
|
117
|
-
]);
|
|
118
|
-
});
|
|
119
|
-
it('instance: disabled', async () => {
|
|
120
|
-
const mockSetFeedbackDefinitions = vi.fn((_feedbacks) => null);
|
|
121
|
-
const manager = new FeedbackManager(unimplementedAsyncFunction, mockSetFeedbackDefinitions, unimplementedFunction);
|
|
122
|
-
expect(manager.getDefinitionIds()).toHaveLength(0);
|
|
123
|
-
expect(manager.getInstanceIds()).toHaveLength(0);
|
|
124
|
-
const mockDefinitionId = 'definition0';
|
|
125
|
-
const mockDefinition = {
|
|
126
|
-
type: 'boolean',
|
|
127
|
-
name: 'Definition0',
|
|
128
|
-
defaultStyle: {},
|
|
129
|
-
options: [],
|
|
130
|
-
callback: vi.fn(() => false),
|
|
131
|
-
};
|
|
132
|
-
// setup definition
|
|
133
|
-
manager.setFeedbackDefinitions({ [mockDefinitionId]: mockDefinition });
|
|
134
|
-
expect(manager.getDefinitionIds()).toEqual([mockDefinitionId]);
|
|
135
|
-
expect(manager.getInstanceIds()).toHaveLength(0);
|
|
136
|
-
expect(mockSetFeedbackDefinitions).toHaveBeenCalledTimes(1);
|
|
137
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(0);
|
|
138
|
-
// report a feedback
|
|
139
|
-
manager.handleUpdateFeedbacks({
|
|
140
|
-
[feedbackId]: {
|
|
141
|
-
...feedback,
|
|
142
|
-
disabled: true,
|
|
143
|
-
},
|
|
144
|
-
});
|
|
145
|
-
// wait for debounce
|
|
146
|
-
await runAllTimers();
|
|
147
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(0);
|
|
148
|
-
expect(manager.getInstanceIds()).toHaveLength(0);
|
|
149
|
-
});
|
|
150
|
-
it('instance: delete', async () => {
|
|
151
|
-
const mockUpdateFeedbackValues = vi.fn((_values) => null);
|
|
152
|
-
const mockSetFeedbackDefinitions = vi.fn((_feedbacks) => null);
|
|
153
|
-
const manager = new FeedbackManager(unimplementedAsyncFunction, mockSetFeedbackDefinitions, mockUpdateFeedbackValues);
|
|
154
|
-
expect(manager.getDefinitionIds()).toHaveLength(0);
|
|
155
|
-
expect(manager.getInstanceIds()).toHaveLength(0);
|
|
156
|
-
const mockDefinition = {
|
|
157
|
-
type: 'boolean',
|
|
158
|
-
name: 'Definition0',
|
|
159
|
-
defaultStyle: {},
|
|
160
|
-
options: [],
|
|
161
|
-
callback: vi.fn(() => false),
|
|
162
|
-
};
|
|
163
|
-
// setup definition
|
|
164
|
-
manager.setFeedbackDefinitions({ [mockDefinitionId]: mockDefinition });
|
|
165
|
-
expect(manager.getDefinitionIds()).toEqual([mockDefinitionId]);
|
|
166
|
-
expect(manager.getInstanceIds()).toHaveLength(0);
|
|
167
|
-
expect(mockSetFeedbackDefinitions).toHaveBeenCalledTimes(1);
|
|
168
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(0);
|
|
169
|
-
// report a feedback
|
|
170
|
-
manager.handleUpdateFeedbacks({
|
|
171
|
-
[feedbackId]: feedback,
|
|
172
|
-
[feedbackId2]: {
|
|
173
|
-
...feedback2,
|
|
174
|
-
feedbackId: mockDefinitionId,
|
|
175
|
-
},
|
|
176
|
-
});
|
|
177
|
-
// wait for debounce
|
|
178
|
-
await runAllTimers();
|
|
179
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(2);
|
|
180
|
-
expect(manager.getInstanceIds()).toEqual([feedbackId, feedbackId2]);
|
|
181
|
-
// remove a feedback
|
|
182
|
-
manager.handleUpdateFeedbacks({
|
|
183
|
-
[feedbackId]: undefined,
|
|
184
|
-
});
|
|
185
|
-
// wait for debounce
|
|
186
|
-
await runAllTimers();
|
|
187
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(2);
|
|
188
|
-
expect(manager.getInstanceIds()).toEqual([feedbackId2]);
|
|
189
|
-
});
|
|
190
|
-
describe('checkFeedbacks', () => {
|
|
191
|
-
const mockSetFeedbackDefinitions = vi.fn((_feedbacks) => null);
|
|
192
|
-
const mockUpdateFeedbackValues = vi.fn((_values) => null);
|
|
193
|
-
const manager = new FeedbackManager(unimplementedAsyncFunction, mockSetFeedbackDefinitions, mockUpdateFeedbackValues);
|
|
194
|
-
const mockDefinition = {
|
|
195
|
-
type: 'boolean',
|
|
196
|
-
name: 'Definition0',
|
|
197
|
-
defaultStyle: {},
|
|
198
|
-
options: [],
|
|
199
|
-
callback: vi.fn(() => false),
|
|
200
|
-
};
|
|
201
|
-
const mockDefinition2 = {
|
|
202
|
-
type: 'advanced',
|
|
203
|
-
name: 'Definition2',
|
|
204
|
-
options: [],
|
|
205
|
-
callback: vi.fn(() => ({})),
|
|
206
|
-
};
|
|
207
|
-
beforeAll(async () => {
|
|
208
|
-
expect(manager.getDefinitionIds()).toHaveLength(0);
|
|
209
|
-
expect(manager.getInstanceIds()).toHaveLength(0);
|
|
210
|
-
// setup definition
|
|
211
|
-
manager.setFeedbackDefinitions({
|
|
212
|
-
[mockDefinitionId]: mockDefinition,
|
|
213
|
-
[mockDefinitionId2]: mockDefinition2,
|
|
214
|
-
});
|
|
215
|
-
expect(manager.getDefinitionIds()).toEqual([mockDefinitionId, mockDefinitionId2]);
|
|
216
|
-
expect(mockSetFeedbackDefinitions).toHaveBeenCalledTimes(1);
|
|
217
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(0);
|
|
218
|
-
// report a feedback
|
|
219
|
-
manager.handleUpdateFeedbacks({
|
|
220
|
-
[feedbackId]: feedback,
|
|
221
|
-
[feedbackId2]: feedback2,
|
|
222
|
-
});
|
|
223
|
-
await runAllTimers();
|
|
224
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(1);
|
|
225
|
-
expect(mockDefinition2.callback).toHaveBeenCalledTimes(1);
|
|
226
|
-
expect(manager.getInstanceIds()).toEqual([feedbackId, feedbackId2]);
|
|
227
|
-
});
|
|
228
|
-
beforeEach(() => {
|
|
229
|
-
vi.clearAllMocks();
|
|
230
|
-
});
|
|
231
|
-
it('no types specified', async () => {
|
|
232
|
-
// make sure it didnt want to rerun by itself
|
|
233
|
-
await runAllTimers();
|
|
234
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(0);
|
|
235
|
-
expect(mockDefinition2.callback).toHaveBeenCalledTimes(0);
|
|
236
|
-
// check all
|
|
237
|
-
manager.checkFeedbacks([]);
|
|
238
|
-
await runAllTimers();
|
|
239
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(1);
|
|
240
|
-
expect(mockDefinition2.callback).toHaveBeenCalledTimes(1);
|
|
241
|
-
expect(mockUpdateFeedbackValues).toHaveBeenCalledTimes(1);
|
|
242
|
-
expect(mockUpdateFeedbackValues).toHaveBeenLastCalledWith([
|
|
243
|
-
{
|
|
244
|
-
id: 'abcdef',
|
|
245
|
-
controlId: 'control0',
|
|
246
|
-
value: false,
|
|
247
|
-
},
|
|
248
|
-
{
|
|
249
|
-
id: 'abc123',
|
|
250
|
-
controlId: 'control1',
|
|
251
|
-
value: {},
|
|
252
|
-
},
|
|
253
|
-
]);
|
|
254
|
-
});
|
|
255
|
-
it('for type', async () => {
|
|
256
|
-
// make sure it didnt want to rerun by itself
|
|
257
|
-
await runAllTimers();
|
|
258
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(0);
|
|
259
|
-
expect(mockDefinition2.callback).toHaveBeenCalledTimes(0);
|
|
260
|
-
// check all
|
|
261
|
-
manager.checkFeedbacks([mockDefinitionId2, 'fake-id']);
|
|
262
|
-
await runAllTimers();
|
|
263
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(0);
|
|
264
|
-
expect(mockDefinition2.callback).toHaveBeenCalledTimes(1);
|
|
265
|
-
expect(mockUpdateFeedbackValues).toHaveBeenCalledTimes(1);
|
|
266
|
-
expect(mockUpdateFeedbackValues).toHaveBeenLastCalledWith([
|
|
267
|
-
{
|
|
268
|
-
id: 'abc123',
|
|
269
|
-
controlId: 'control1',
|
|
270
|
-
value: {},
|
|
271
|
-
},
|
|
272
|
-
]);
|
|
273
|
-
});
|
|
274
|
-
it('for ids', async () => {
|
|
275
|
-
// make sure it didnt want to rerun by itself
|
|
276
|
-
await runAllTimers();
|
|
277
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(0);
|
|
278
|
-
expect(mockDefinition2.callback).toHaveBeenCalledTimes(0);
|
|
279
|
-
// check all
|
|
280
|
-
manager.checkFeedbacksById([feedbackId, 'fake-id']);
|
|
281
|
-
await runAllTimers();
|
|
282
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(1);
|
|
283
|
-
expect(mockDefinition2.callback).toHaveBeenCalledTimes(0);
|
|
284
|
-
expect(mockUpdateFeedbackValues).toHaveBeenCalledTimes(1);
|
|
285
|
-
expect(mockUpdateFeedbackValues).toHaveBeenLastCalledWith([
|
|
286
|
-
{
|
|
287
|
-
id: 'abcdef',
|
|
288
|
-
controlId: 'control0',
|
|
289
|
-
value: false,
|
|
290
|
-
},
|
|
291
|
-
]);
|
|
292
|
-
});
|
|
293
|
-
});
|
|
294
|
-
describe('check while being checked', () => {
|
|
295
|
-
const mockParseVariables = vi.fn(async (text, _info) => `res - ${text}`);
|
|
296
|
-
const mockSetFeedbackDefinitions = vi.fn((_feedbacks) => null);
|
|
297
|
-
const mockUpdateFeedbackValues = vi.fn((_values) => null);
|
|
298
|
-
const manager = new FeedbackManager(mockParseVariables, mockSetFeedbackDefinitions, mockUpdateFeedbackValues);
|
|
299
|
-
let waitForManualResolve = false;
|
|
300
|
-
let nextResolve;
|
|
301
|
-
const mockDefinition = {
|
|
302
|
-
type: 'boolean',
|
|
303
|
-
name: 'Definition0',
|
|
304
|
-
defaultStyle: {},
|
|
305
|
-
options: [],
|
|
306
|
-
callback: vi.fn(async (fb, ctx) => {
|
|
307
|
-
await ctx.parseVariablesInString(fb.id);
|
|
308
|
-
if (waitForManualResolve) {
|
|
309
|
-
expect(nextResolve).toBeUndefined();
|
|
310
|
-
await new Promise((resolve) => {
|
|
311
|
-
nextResolve = resolve;
|
|
312
|
-
});
|
|
313
|
-
nextResolve = undefined;
|
|
314
|
-
// await new Promise((resolve) => setImmediate(resolve))
|
|
315
|
-
}
|
|
316
|
-
return false;
|
|
317
|
-
}),
|
|
318
|
-
};
|
|
319
|
-
beforeAll(async () => {
|
|
320
|
-
expect(manager.getDefinitionIds()).toHaveLength(0);
|
|
321
|
-
expect(manager.getInstanceIds()).toHaveLength(0);
|
|
322
|
-
// setup definition
|
|
323
|
-
manager.setFeedbackDefinitions({ [mockDefinitionId]: mockDefinition });
|
|
324
|
-
expect(manager.getDefinitionIds()).toEqual([mockDefinitionId]);
|
|
325
|
-
expect(mockSetFeedbackDefinitions).toHaveBeenCalledTimes(1);
|
|
326
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(0);
|
|
327
|
-
// report a feedback
|
|
328
|
-
manager.handleUpdateFeedbacks({ [feedbackId]: feedback });
|
|
329
|
-
await runAllTimers();
|
|
330
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(1);
|
|
331
|
-
expect(manager.getInstanceIds()).toEqual([feedbackId]);
|
|
332
|
-
expect(mockParseVariables).toHaveBeenCalledTimes(1);
|
|
333
|
-
});
|
|
334
|
-
beforeEach(() => {
|
|
335
|
-
vi.clearAllMocks();
|
|
336
|
-
waitForManualResolve = false;
|
|
337
|
-
});
|
|
338
|
-
it('basic run', async () => {
|
|
339
|
-
// make sure it didnt want to rerun by itself
|
|
340
|
-
await runAllTimers();
|
|
341
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(0);
|
|
342
|
-
// check all
|
|
343
|
-
manager.checkFeedbacks([]);
|
|
344
|
-
await runAllTimers();
|
|
345
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(1);
|
|
346
|
-
// check the value sent to the client
|
|
347
|
-
expect(mockUpdateFeedbackValues).toHaveBeenCalledTimes(1);
|
|
348
|
-
expect(mockUpdateFeedbackValues).toHaveBeenLastCalledWith([
|
|
349
|
-
{
|
|
350
|
-
id: 'abcdef',
|
|
351
|
-
controlId: 'control0',
|
|
352
|
-
value: false,
|
|
353
|
-
},
|
|
354
|
-
]);
|
|
355
|
-
});
|
|
356
|
-
it('freeze feedback callback', async () => {
|
|
357
|
-
// make sure it didnt want to rerun by itself
|
|
358
|
-
await runAllTimers();
|
|
359
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(0);
|
|
360
|
-
waitForManualResolve = true;
|
|
361
|
-
// check all
|
|
362
|
-
manager.checkFeedbacks([]);
|
|
363
|
-
// make sure it hasnt completed yet
|
|
364
|
-
await runAllTimers();
|
|
365
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(1);
|
|
366
|
-
expect(nextResolve).toBeTruthy();
|
|
367
|
-
expect(mockUpdateFeedbackValues).toHaveBeenCalledTimes(0);
|
|
368
|
-
// let it complete now
|
|
369
|
-
nextResolve();
|
|
370
|
-
await runAllTimers();
|
|
371
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(1);
|
|
372
|
-
expect(nextResolve).toBeFalsy();
|
|
373
|
-
// check the value sent to the client
|
|
374
|
-
expect(mockUpdateFeedbackValues).toHaveBeenCalledTimes(1);
|
|
375
|
-
expect(mockUpdateFeedbackValues).toHaveBeenLastCalledWith([
|
|
376
|
-
{
|
|
377
|
-
id: 'abcdef',
|
|
378
|
-
controlId: 'control0',
|
|
379
|
-
value: false,
|
|
380
|
-
},
|
|
381
|
-
]);
|
|
382
|
-
});
|
|
383
|
-
it('update while frozen', async () => {
|
|
384
|
-
// make sure it didnt want to rerun by itself
|
|
385
|
-
await runAllTimers();
|
|
386
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(0);
|
|
387
|
-
waitForManualResolve = true;
|
|
388
|
-
// check all
|
|
389
|
-
manager.checkFeedbacks([]);
|
|
390
|
-
// make sure it hasnt completed yet
|
|
391
|
-
await runAllTimers();
|
|
392
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(1);
|
|
393
|
-
expect(nextResolve).toBeTruthy();
|
|
394
|
-
expect(mockUpdateFeedbackValues).toHaveBeenCalledTimes(0);
|
|
395
|
-
// trigger it to be checked again
|
|
396
|
-
waitForManualResolve = false;
|
|
397
|
-
manager.checkFeedbacks([]);
|
|
398
|
-
// make sure the second doesnt start by itself
|
|
399
|
-
await runAllTimers();
|
|
400
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(1);
|
|
401
|
-
// let it complete now
|
|
402
|
-
setImmediate(() => nextResolve());
|
|
403
|
-
await runAllTimers();
|
|
404
|
-
await runAllTimers();
|
|
405
|
-
// make sure it ran twice
|
|
406
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(2);
|
|
407
|
-
expect(nextResolve).toBeFalsy();
|
|
408
|
-
// check the value sent to the client
|
|
409
|
-
expect(mockUpdateFeedbackValues).toHaveBeenCalledTimes(2);
|
|
410
|
-
});
|
|
411
|
-
});
|
|
412
|
-
it('learn values: no implementation', async () => {
|
|
413
|
-
const mockSetFeedbackDefinitions = vi.fn((_feedbacks) => null);
|
|
414
|
-
const manager = new FeedbackManager(unimplementedAsyncFunction, mockSetFeedbackDefinitions, unimplementedFunction);
|
|
415
|
-
expect(manager.getDefinitionIds()).toHaveLength(0);
|
|
416
|
-
const mockDefinitionId = 'definition0';
|
|
417
|
-
const mockDefinition = {
|
|
418
|
-
type: 'boolean',
|
|
419
|
-
name: 'Definition0',
|
|
420
|
-
defaultStyle: {},
|
|
421
|
-
options: [],
|
|
422
|
-
callback: vi.fn(() => false),
|
|
423
|
-
};
|
|
424
|
-
// setup definition
|
|
425
|
-
manager.setFeedbackDefinitions({ [mockDefinitionId]: mockDefinition });
|
|
426
|
-
expect(manager.getDefinitionIds()).toEqual([mockDefinitionId]);
|
|
427
|
-
expect(mockSetFeedbackDefinitions).toHaveBeenCalledTimes(1);
|
|
428
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(0);
|
|
429
|
-
// make the call
|
|
430
|
-
await expect(manager.handleLearnFeedback(feedback)).resolves.toEqual({ options: undefined });
|
|
431
|
-
});
|
|
432
|
-
it('learn values: with implementation', async () => {
|
|
433
|
-
const mockSetFeedbackDefinitions = vi.fn((_feedbacks) => null);
|
|
434
|
-
const manager = new FeedbackManager(unimplementedAsyncFunction, mockSetFeedbackDefinitions, unimplementedFunction);
|
|
435
|
-
expect(manager.getDefinitionIds()).toHaveLength(0);
|
|
436
|
-
const mockDefinitionId = 'definition0';
|
|
437
|
-
const mockDefinition = {
|
|
438
|
-
type: 'boolean',
|
|
439
|
-
name: 'Definition0',
|
|
440
|
-
defaultStyle: {},
|
|
441
|
-
options: [],
|
|
442
|
-
callback: vi.fn(() => false),
|
|
443
|
-
learn: vi.fn(() => ({ abc: 123 })),
|
|
444
|
-
};
|
|
445
|
-
// setup definition
|
|
446
|
-
manager.setFeedbackDefinitions({ [mockDefinitionId]: mockDefinition });
|
|
447
|
-
expect(manager.getDefinitionIds()).toEqual([mockDefinitionId]);
|
|
448
|
-
expect(mockSetFeedbackDefinitions).toHaveBeenCalledTimes(1);
|
|
449
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(0);
|
|
450
|
-
// make the call
|
|
451
|
-
await expect(manager.handleLearnFeedback(feedback)).resolves.toEqual({ options: { abc: 123 } });
|
|
452
|
-
expect(mockDefinition.learn).toBeCalledTimes(1);
|
|
453
|
-
expect(mockDefinition.learn).lastCalledWith({
|
|
454
|
-
id: feedbackId,
|
|
455
|
-
type: mockDefinition.type,
|
|
456
|
-
feedbackId: feedback.feedbackId,
|
|
457
|
-
controlId: feedback.controlId,
|
|
458
|
-
options: feedback.options,
|
|
459
|
-
}, expect.anything());
|
|
460
|
-
});
|
|
461
|
-
it('learn values: with implementation using variables', async () => {
|
|
462
|
-
const mockParseVariables = vi.fn(async (_text, _info) => 'res str');
|
|
463
|
-
const mockSetFeedbackDefinitions = vi.fn((_feedbacks) => null);
|
|
464
|
-
const manager = new FeedbackManager(mockParseVariables, mockSetFeedbackDefinitions, unimplementedFunction);
|
|
465
|
-
expect(manager.getDefinitionIds()).toHaveLength(0);
|
|
466
|
-
const mockDefinitionId = 'definition0';
|
|
467
|
-
const mockDefinition = {
|
|
468
|
-
type: 'boolean',
|
|
469
|
-
name: 'Definition0',
|
|
470
|
-
defaultStyle: {},
|
|
471
|
-
options: [],
|
|
472
|
-
callback: vi.fn(() => false),
|
|
473
|
-
learn: vi.fn(async (fb, context) => {
|
|
474
|
-
const val = await context.parseVariablesInString('test string');
|
|
475
|
-
return { abc: val };
|
|
476
|
-
}),
|
|
477
|
-
};
|
|
478
|
-
// setup definition
|
|
479
|
-
manager.setFeedbackDefinitions({ [mockDefinitionId]: mockDefinition });
|
|
480
|
-
expect(manager.getDefinitionIds()).toEqual([mockDefinitionId]);
|
|
481
|
-
expect(mockSetFeedbackDefinitions).toHaveBeenCalledTimes(1);
|
|
482
|
-
expect(mockParseVariables).toHaveBeenCalledTimes(0);
|
|
483
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(0);
|
|
484
|
-
// make the call
|
|
485
|
-
await expect(manager.handleLearnFeedback(feedback)).resolves.toEqual({
|
|
486
|
-
options: { abc: 'res str' },
|
|
487
|
-
});
|
|
488
|
-
expect(mockParseVariables).toHaveBeenCalledTimes(1);
|
|
489
|
-
expect(mockParseVariables).lastCalledWith('test string', {
|
|
490
|
-
controlId: 'control0',
|
|
491
|
-
actionInstanceId: undefined,
|
|
492
|
-
feedbackInstanceId: 'abcdef',
|
|
493
|
-
});
|
|
494
|
-
expect(mockDefinition.learn).toBeCalledTimes(1);
|
|
495
|
-
expect(mockDefinition.learn).lastCalledWith({
|
|
496
|
-
id: feedbackId,
|
|
497
|
-
type: mockDefinition.type,
|
|
498
|
-
feedbackId: feedback.feedbackId,
|
|
499
|
-
controlId: feedback.controlId,
|
|
500
|
-
options: feedback.options,
|
|
501
|
-
}, expect.anything());
|
|
502
|
-
});
|
|
503
|
-
describe('subscribe', () => {
|
|
504
|
-
const mockSetFeedbackDefinitions = vi.fn((_feedbacks) => null);
|
|
505
|
-
const mockUpdateFeedbackValues = vi.fn((_values) => null);
|
|
506
|
-
const manager = new FeedbackManager(unimplementedAsyncFunction, mockSetFeedbackDefinitions, mockUpdateFeedbackValues);
|
|
507
|
-
const mockDefinition = {
|
|
508
|
-
type: 'boolean',
|
|
509
|
-
name: 'Definition0',
|
|
510
|
-
defaultStyle: {},
|
|
511
|
-
options: [],
|
|
512
|
-
callback: vi.fn(async (_fb, _ctx) => false),
|
|
513
|
-
subscribe: vi.fn(async (_fb, _ctx) => undefined),
|
|
514
|
-
};
|
|
515
|
-
beforeAll(async () => {
|
|
516
|
-
expect(manager.getDefinitionIds()).toHaveLength(0);
|
|
517
|
-
expect(manager.getInstanceIds()).toHaveLength(0);
|
|
518
|
-
// setup definition
|
|
519
|
-
manager.setFeedbackDefinitions({ [mockDefinitionId]: mockDefinition });
|
|
520
|
-
expect(manager.getDefinitionIds()).toEqual([mockDefinitionId]);
|
|
521
|
-
expect(mockSetFeedbackDefinitions).toHaveBeenCalledTimes(1);
|
|
522
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(0);
|
|
523
|
-
});
|
|
524
|
-
beforeEach(async () => {
|
|
525
|
-
manager.handleUpdateFeedbacks({
|
|
526
|
-
[feedbackId]: undefined,
|
|
527
|
-
[feedbackId2]: undefined,
|
|
528
|
-
});
|
|
529
|
-
vi.clearAllMocks();
|
|
530
|
-
});
|
|
531
|
-
it('called when adding', async () => {
|
|
532
|
-
// report a feedback
|
|
533
|
-
manager.handleUpdateFeedbacks({ [feedbackId]: feedback });
|
|
534
|
-
await runAllTimers();
|
|
535
|
-
expect(mockDefinition.subscribe).toHaveBeenCalledTimes(1);
|
|
536
|
-
expect(mockDefinition.subscribe).toHaveBeenLastCalledWith({
|
|
537
|
-
id: feedbackId,
|
|
538
|
-
type: mockDefinition.type,
|
|
539
|
-
feedbackId: mockDefinitionId,
|
|
540
|
-
controlId: feedback.controlId,
|
|
541
|
-
options: feedback.options,
|
|
542
|
-
}, expect.anything());
|
|
543
|
-
expect(manager.getInstanceIds()).toEqual([feedbackId]);
|
|
544
|
-
});
|
|
545
|
-
it('called when updated', async () => {
|
|
546
|
-
// report a feedback
|
|
547
|
-
manager.handleUpdateFeedbacks({ [feedbackId]: feedback });
|
|
548
|
-
await runAllTimers();
|
|
549
|
-
expect(mockDefinition.subscribe).toHaveBeenCalledTimes(1);
|
|
550
|
-
// update it
|
|
551
|
-
manager.handleUpdateFeedbacks({
|
|
552
|
-
[feedbackId]: {
|
|
553
|
-
...feedback,
|
|
554
|
-
controlId: 'new-control',
|
|
555
|
-
options: { val: 'changed' },
|
|
556
|
-
},
|
|
557
|
-
});
|
|
558
|
-
await runAllTimers();
|
|
559
|
-
expect(mockDefinition.subscribe).toHaveBeenCalledTimes(1);
|
|
560
|
-
expect(manager.getInstanceIds()).toEqual([feedbackId]);
|
|
561
|
-
});
|
|
562
|
-
it('not called when removed', async () => {
|
|
563
|
-
// report a feedback
|
|
564
|
-
manager.handleUpdateFeedbacks({ [feedbackId]: feedback });
|
|
565
|
-
await runAllTimers();
|
|
566
|
-
expect(mockDefinition.subscribe).toHaveBeenCalledTimes(1);
|
|
567
|
-
// update it
|
|
568
|
-
manager.handleUpdateFeedbacks({
|
|
569
|
-
[feedbackId]: undefined,
|
|
570
|
-
});
|
|
571
|
-
await runAllTimers();
|
|
572
|
-
expect(mockDefinition.subscribe).toHaveBeenCalledTimes(1);
|
|
573
|
-
expect(manager.getInstanceIds()).toEqual([]);
|
|
574
|
-
});
|
|
575
|
-
it('trigger all', async () => {
|
|
576
|
-
// report a feedback
|
|
577
|
-
manager.handleUpdateFeedbacks({
|
|
578
|
-
[feedbackId]: feedback,
|
|
579
|
-
[feedbackId2]: {
|
|
580
|
-
...feedback2,
|
|
581
|
-
feedbackId: mockDefinitionId,
|
|
582
|
-
},
|
|
583
|
-
});
|
|
584
|
-
await runAllTimers();
|
|
585
|
-
expect(mockDefinition.subscribe).toHaveBeenCalledTimes(2);
|
|
586
|
-
expect(manager.getInstanceIds()).toEqual([feedbackId, feedbackId2]);
|
|
587
|
-
// trigger unsubscribe
|
|
588
|
-
manager.subscribeFeedbacks([]);
|
|
589
|
-
await runAllTimers();
|
|
590
|
-
expect(mockDefinition.subscribe).toHaveBeenCalledTimes(4);
|
|
591
|
-
expect(manager.getInstanceIds()).toEqual([feedbackId, feedbackId2]);
|
|
592
|
-
});
|
|
593
|
-
});
|
|
594
|
-
describe('unsubscribe', () => {
|
|
595
|
-
const mockSetFeedbackDefinitions = vi.fn((_feedbacks) => null);
|
|
596
|
-
const mockUpdateFeedbackValues = vi.fn((_values) => null);
|
|
597
|
-
const manager = new FeedbackManager(unimplementedAsyncFunction, mockSetFeedbackDefinitions, mockUpdateFeedbackValues);
|
|
598
|
-
const mockDefinition = {
|
|
599
|
-
type: 'boolean',
|
|
600
|
-
name: 'Definition0',
|
|
601
|
-
defaultStyle: {},
|
|
602
|
-
options: [],
|
|
603
|
-
callback: vi.fn(async (_fb, _ctx) => false),
|
|
604
|
-
unsubscribe: vi.fn(async (_fb, _ctx) => undefined),
|
|
605
|
-
};
|
|
606
|
-
beforeAll(async () => {
|
|
607
|
-
expect(manager.getDefinitionIds()).toHaveLength(0);
|
|
608
|
-
expect(manager.getInstanceIds()).toHaveLength(0);
|
|
609
|
-
// setup definition
|
|
610
|
-
manager.setFeedbackDefinitions({ [mockDefinitionId]: mockDefinition });
|
|
611
|
-
expect(manager.getDefinitionIds()).toEqual([mockDefinitionId]);
|
|
612
|
-
expect(mockSetFeedbackDefinitions).toHaveBeenCalledTimes(1);
|
|
613
|
-
expect(mockDefinition.callback).toHaveBeenCalledTimes(0);
|
|
614
|
-
});
|
|
615
|
-
beforeEach(async () => {
|
|
616
|
-
manager.handleUpdateFeedbacks({
|
|
617
|
-
[feedbackId]: undefined,
|
|
618
|
-
[feedbackId2]: undefined,
|
|
619
|
-
});
|
|
620
|
-
vi.clearAllMocks();
|
|
621
|
-
});
|
|
622
|
-
it('not called when adding', async () => {
|
|
623
|
-
// report a feedback
|
|
624
|
-
manager.handleUpdateFeedbacks({ [feedbackId]: feedback });
|
|
625
|
-
await runAllTimers();
|
|
626
|
-
expect(mockDefinition.unsubscribe).toHaveBeenCalledTimes(0);
|
|
627
|
-
expect(manager.getInstanceIds()).toEqual([feedbackId]);
|
|
628
|
-
});
|
|
629
|
-
it('not called when updated', async () => {
|
|
630
|
-
// report a feedback
|
|
631
|
-
manager.handleUpdateFeedbacks({ [feedbackId]: feedback });
|
|
632
|
-
await runAllTimers();
|
|
633
|
-
expect(mockDefinition.unsubscribe).toHaveBeenCalledTimes(0);
|
|
634
|
-
// update it
|
|
635
|
-
manager.handleUpdateFeedbacks({
|
|
636
|
-
[feedbackId]: {
|
|
637
|
-
...feedback,
|
|
638
|
-
controlId: 'new-control',
|
|
639
|
-
options: { val: 'changed' },
|
|
640
|
-
},
|
|
641
|
-
});
|
|
642
|
-
await runAllTimers();
|
|
643
|
-
expect(mockDefinition.unsubscribe).toHaveBeenCalledTimes(0);
|
|
644
|
-
expect(manager.getInstanceIds()).toEqual([feedbackId]);
|
|
645
|
-
});
|
|
646
|
-
it('called when removed', async () => {
|
|
647
|
-
// report a feedback
|
|
648
|
-
manager.handleUpdateFeedbacks({ [feedbackId]: feedback });
|
|
649
|
-
await runAllTimers();
|
|
650
|
-
expect(mockDefinition.unsubscribe).toHaveBeenCalledTimes(0);
|
|
651
|
-
// update it
|
|
652
|
-
manager.handleUpdateFeedbacks({
|
|
653
|
-
[feedbackId]: undefined,
|
|
654
|
-
});
|
|
655
|
-
await runAllTimers();
|
|
656
|
-
expect(mockDefinition.unsubscribe).toHaveBeenCalledTimes(1);
|
|
657
|
-
expect(mockDefinition.unsubscribe).toHaveBeenLastCalledWith({
|
|
658
|
-
id: feedbackId,
|
|
659
|
-
type: mockDefinition.type,
|
|
660
|
-
feedbackId: mockDefinitionId,
|
|
661
|
-
controlId: feedback.controlId,
|
|
662
|
-
options: feedback.options,
|
|
663
|
-
}, expect.anything());
|
|
664
|
-
expect(manager.getInstanceIds()).toEqual([]);
|
|
665
|
-
});
|
|
666
|
-
it('trigger all', async () => {
|
|
667
|
-
// report a feedback
|
|
668
|
-
manager.handleUpdateFeedbacks({
|
|
669
|
-
[feedbackId]: feedback,
|
|
670
|
-
[feedbackId2]: {
|
|
671
|
-
...feedback2,
|
|
672
|
-
feedbackId: mockDefinitionId,
|
|
673
|
-
},
|
|
674
|
-
});
|
|
675
|
-
await runAllTimers();
|
|
676
|
-
expect(mockDefinition.unsubscribe).toHaveBeenCalledTimes(0);
|
|
677
|
-
expect(manager.getInstanceIds()).toEqual([feedbackId, feedbackId2]);
|
|
678
|
-
// trigger unsubscribe
|
|
679
|
-
manager.unsubscribeFeedbacks([]);
|
|
680
|
-
await runAllTimers();
|
|
681
|
-
expect(mockDefinition.unsubscribe).toHaveBeenCalledTimes(2);
|
|
682
|
-
expect(manager.getInstanceIds()).toEqual([feedbackId, feedbackId2]);
|
|
683
|
-
});
|
|
684
|
-
});
|
|
685
|
-
});
|
|
686
|
-
//# sourceMappingURL=feedback.spec.js.map
|