@storybook/manager-api 7.0.20 → 7.0.21
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/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +8 -8
- package/src/tests/addons.test.js +167 -0
- package/src/tests/layout.test.js +168 -0
- package/src/tests/notifications.test.js +35 -0
- package/src/tests/shortcut.test.js +111 -0
- package/src/tests/shortcuts.test.js +287 -0
- package/src/tests/store.test.js +153 -0
- package/src/tests/url.test.js +211 -0
- package/src/tests/versions.test.js +397 -0
- package/src/typings.d.ts +14 -0
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
import { init as initVersions } from '../modules/versions';
|
|
2
|
+
|
|
3
|
+
jest.mock('../version', () => ({
|
|
4
|
+
version: '3.0.0',
|
|
5
|
+
}));
|
|
6
|
+
|
|
7
|
+
jest.mock('@storybook/global', () => ({
|
|
8
|
+
global: {
|
|
9
|
+
VERSIONCHECK: JSON.stringify({
|
|
10
|
+
success: true,
|
|
11
|
+
data: {
|
|
12
|
+
latest: {
|
|
13
|
+
version: '5.2.3',
|
|
14
|
+
},
|
|
15
|
+
next: {
|
|
16
|
+
version: '5.3.0-alpha.15',
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
time: 1571565216284,
|
|
20
|
+
}),
|
|
21
|
+
},
|
|
22
|
+
}));
|
|
23
|
+
|
|
24
|
+
jest.mock('@storybook/client-logger');
|
|
25
|
+
|
|
26
|
+
function createMockStore() {
|
|
27
|
+
let state = {
|
|
28
|
+
versions: {
|
|
29
|
+
latest: {
|
|
30
|
+
version: '3.0.0',
|
|
31
|
+
},
|
|
32
|
+
current: {
|
|
33
|
+
version: '3.0.0',
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
return {
|
|
38
|
+
getState: jest.fn().mockImplementation(() => state),
|
|
39
|
+
setState: jest.fn().mockImplementation((s) => {
|
|
40
|
+
state = { ...state, ...s };
|
|
41
|
+
}),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
jest.mock('@storybook/client-logger');
|
|
46
|
+
|
|
47
|
+
describe('versions API', () => {
|
|
48
|
+
it('sets initial state with current version', async () => {
|
|
49
|
+
const store = createMockStore();
|
|
50
|
+
const { state } = initVersions({ store });
|
|
51
|
+
|
|
52
|
+
expect(state.versions.current).toEqual({ version: '3.0.0' });
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it('sets initial state with latest version', async () => {
|
|
56
|
+
const store = createMockStore();
|
|
57
|
+
const { state } = initVersions({ store });
|
|
58
|
+
|
|
59
|
+
expect(state.versions.latest).toEqual({ version: '5.2.3' });
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('sets initial state with next version', async () => {
|
|
63
|
+
const store = createMockStore();
|
|
64
|
+
const { state } = initVersions({ store });
|
|
65
|
+
|
|
66
|
+
expect(state.versions.next).toEqual({ version: '5.3.0-alpha.15' });
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('sets versions in the init function', async () => {
|
|
70
|
+
const store = createMockStore();
|
|
71
|
+
const { state: initialState, init } = initVersions({
|
|
72
|
+
store,
|
|
73
|
+
fullAPI: { addNotification: jest.fn() },
|
|
74
|
+
});
|
|
75
|
+
store.setState(initialState);
|
|
76
|
+
store.setState.mockReset();
|
|
77
|
+
|
|
78
|
+
await init();
|
|
79
|
+
|
|
80
|
+
expect(store.setState).toHaveBeenCalledWith({
|
|
81
|
+
versions: {
|
|
82
|
+
latest: { version: '5.2.3' },
|
|
83
|
+
next: { version: '5.3.0-alpha.15' },
|
|
84
|
+
current: { version: '3.0.0' },
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
describe('notifications', () => {
|
|
90
|
+
it('sets an update notification right away in the init function', async () => {
|
|
91
|
+
const store = createMockStore();
|
|
92
|
+
const addNotification = jest.fn();
|
|
93
|
+
const { init, state: initialState } = initVersions({
|
|
94
|
+
store,
|
|
95
|
+
fullAPI: { addNotification },
|
|
96
|
+
});
|
|
97
|
+
store.setState(initialState);
|
|
98
|
+
|
|
99
|
+
await init();
|
|
100
|
+
expect(addNotification).toHaveBeenCalled();
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
it('does not set an update notification if it has been dismissed', async () => {
|
|
104
|
+
const store = createMockStore();
|
|
105
|
+
store.setState({ dismissedVersionNotification: '5.2.3' });
|
|
106
|
+
const {
|
|
107
|
+
init,
|
|
108
|
+
api,
|
|
109
|
+
state: initialState,
|
|
110
|
+
} = initVersions({
|
|
111
|
+
store,
|
|
112
|
+
fullAPI: { addNotification: jest.fn() },
|
|
113
|
+
});
|
|
114
|
+
store.setState(initialState);
|
|
115
|
+
|
|
116
|
+
const addNotification = jest.fn();
|
|
117
|
+
await init();
|
|
118
|
+
expect(addNotification).not.toHaveBeenCalled();
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
it('does not set an update notification if the latest version is a patch', async () => {
|
|
122
|
+
const store = createMockStore();
|
|
123
|
+
const {
|
|
124
|
+
init,
|
|
125
|
+
api,
|
|
126
|
+
state: initialState,
|
|
127
|
+
} = initVersions({
|
|
128
|
+
store,
|
|
129
|
+
fullAPI: { addNotification: jest.fn() },
|
|
130
|
+
});
|
|
131
|
+
store.setState({
|
|
132
|
+
...initialState,
|
|
133
|
+
versions: { ...initialState.versions, current: { version: '5.2.1' } },
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
const addNotification = jest.fn();
|
|
137
|
+
await init();
|
|
138
|
+
expect(addNotification).not.toHaveBeenCalled();
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
it('does not set an update notification in production mode', async () => {
|
|
142
|
+
const store = createMockStore();
|
|
143
|
+
const {
|
|
144
|
+
init,
|
|
145
|
+
api,
|
|
146
|
+
state: initialState,
|
|
147
|
+
} = initVersions({
|
|
148
|
+
store,
|
|
149
|
+
fullAPI: { addNotification: jest.fn() },
|
|
150
|
+
});
|
|
151
|
+
store.setState(initialState);
|
|
152
|
+
|
|
153
|
+
const addNotification = jest.fn();
|
|
154
|
+
await init();
|
|
155
|
+
expect(addNotification).not.toHaveBeenCalled();
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
it('persists a dismissed notification', async () => {
|
|
159
|
+
const store = createMockStore();
|
|
160
|
+
let notification;
|
|
161
|
+
const addNotification = jest.fn().mockImplementation((n) => {
|
|
162
|
+
notification = n;
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
const {
|
|
166
|
+
init,
|
|
167
|
+
api,
|
|
168
|
+
state: initialState,
|
|
169
|
+
} = initVersions({
|
|
170
|
+
store,
|
|
171
|
+
fullAPI: { addNotification },
|
|
172
|
+
});
|
|
173
|
+
store.setState(initialState);
|
|
174
|
+
|
|
175
|
+
await init();
|
|
176
|
+
|
|
177
|
+
notification.onClear();
|
|
178
|
+
expect(store.setState).toHaveBeenCalledWith(
|
|
179
|
+
{ dismissedVersionNotification: '5.2.3' },
|
|
180
|
+
{ persistence: 'permanent' }
|
|
181
|
+
);
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
it('getCurrentVersion works', async () => {
|
|
186
|
+
const store = createMockStore();
|
|
187
|
+
const {
|
|
188
|
+
init,
|
|
189
|
+
api,
|
|
190
|
+
state: initialState,
|
|
191
|
+
} = initVersions({
|
|
192
|
+
store,
|
|
193
|
+
fullAPI: { addNotification: jest.fn() },
|
|
194
|
+
});
|
|
195
|
+
store.setState(initialState);
|
|
196
|
+
|
|
197
|
+
await init();
|
|
198
|
+
|
|
199
|
+
expect(api.getCurrentVersion()).toEqual({
|
|
200
|
+
version: '3.0.0',
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
it('getLatestVersion works', async () => {
|
|
205
|
+
const store = createMockStore();
|
|
206
|
+
const {
|
|
207
|
+
init,
|
|
208
|
+
api,
|
|
209
|
+
state: initialState,
|
|
210
|
+
} = initVersions({
|
|
211
|
+
store,
|
|
212
|
+
fullAPI: { addNotification: jest.fn() },
|
|
213
|
+
});
|
|
214
|
+
store.setState(initialState);
|
|
215
|
+
|
|
216
|
+
await init();
|
|
217
|
+
|
|
218
|
+
expect(api.getLatestVersion()).toMatchObject({
|
|
219
|
+
version: '5.2.3',
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
describe('versionUpdateAvailable', () => {
|
|
224
|
+
it('matching version', async () => {
|
|
225
|
+
const store = createMockStore();
|
|
226
|
+
const {
|
|
227
|
+
init,
|
|
228
|
+
api,
|
|
229
|
+
state: initialState,
|
|
230
|
+
} = initVersions({
|
|
231
|
+
store,
|
|
232
|
+
fullAPI: { addNotification: jest.fn() },
|
|
233
|
+
});
|
|
234
|
+
store.setState({
|
|
235
|
+
...initialState,
|
|
236
|
+
versions: {
|
|
237
|
+
...initialState.versions,
|
|
238
|
+
current: { version: '5.2.1' },
|
|
239
|
+
latest: { version: '5.2.1' },
|
|
240
|
+
},
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
await init();
|
|
244
|
+
|
|
245
|
+
expect(api.versionUpdateAvailable()).toEqual(false);
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
it('new patch version', async () => {
|
|
249
|
+
const store = createMockStore();
|
|
250
|
+
const {
|
|
251
|
+
init,
|
|
252
|
+
api,
|
|
253
|
+
state: initialState,
|
|
254
|
+
} = initVersions({
|
|
255
|
+
store,
|
|
256
|
+
fullAPI: { addNotification: jest.fn() },
|
|
257
|
+
});
|
|
258
|
+
store.setState({
|
|
259
|
+
...initialState,
|
|
260
|
+
versions: {
|
|
261
|
+
...initialState.versions,
|
|
262
|
+
current: { version: '5.2.1' },
|
|
263
|
+
latest: { version: '5.2.2' },
|
|
264
|
+
},
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
await init();
|
|
268
|
+
|
|
269
|
+
expect(api.versionUpdateAvailable()).toEqual(false);
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
it('new minor version', async () => {
|
|
273
|
+
const store = createMockStore();
|
|
274
|
+
const {
|
|
275
|
+
init,
|
|
276
|
+
api,
|
|
277
|
+
state: initialState,
|
|
278
|
+
} = initVersions({
|
|
279
|
+
store,
|
|
280
|
+
fullAPI: { addNotification: jest.fn() },
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
await init();
|
|
284
|
+
|
|
285
|
+
store.setState({
|
|
286
|
+
...initialState,
|
|
287
|
+
versions: {
|
|
288
|
+
...initialState.versions,
|
|
289
|
+
current: { version: '5.2.1' },
|
|
290
|
+
latest: { version: '5.3.1' },
|
|
291
|
+
},
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
expect(api.versionUpdateAvailable()).toEqual(true);
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
it('new major version', async () => {
|
|
298
|
+
const store = createMockStore();
|
|
299
|
+
const {
|
|
300
|
+
init,
|
|
301
|
+
api,
|
|
302
|
+
state: initialState,
|
|
303
|
+
} = initVersions({
|
|
304
|
+
store,
|
|
305
|
+
fullAPI: { addNotification: jest.fn() },
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
await init();
|
|
309
|
+
|
|
310
|
+
store.setState({
|
|
311
|
+
...initialState,
|
|
312
|
+
versions: {
|
|
313
|
+
...initialState.versions,
|
|
314
|
+
current: { version: '5.2.1' },
|
|
315
|
+
latest: { version: '6.2.1' },
|
|
316
|
+
},
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
expect(api.versionUpdateAvailable()).toEqual(true);
|
|
320
|
+
});
|
|
321
|
+
|
|
322
|
+
it('new prerelease version', async () => {
|
|
323
|
+
const store = createMockStore();
|
|
324
|
+
const {
|
|
325
|
+
init,
|
|
326
|
+
api,
|
|
327
|
+
state: initialState,
|
|
328
|
+
} = initVersions({
|
|
329
|
+
store,
|
|
330
|
+
fullAPI: { addNotification: jest.fn() },
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
await init();
|
|
334
|
+
|
|
335
|
+
store.setState({
|
|
336
|
+
...initialState,
|
|
337
|
+
versions: {
|
|
338
|
+
...initialState.versions,
|
|
339
|
+
current: { version: '5.2.1' },
|
|
340
|
+
latest: { version: '6.2.1-prerelease.0' },
|
|
341
|
+
},
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
expect(api.versionUpdateAvailable()).toEqual(false);
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
it('from older prerelease version', async () => {
|
|
348
|
+
const store = createMockStore();
|
|
349
|
+
const {
|
|
350
|
+
init,
|
|
351
|
+
api,
|
|
352
|
+
state: initialState,
|
|
353
|
+
} = initVersions({
|
|
354
|
+
store,
|
|
355
|
+
fullAPI: { addNotification: jest.fn() },
|
|
356
|
+
});
|
|
357
|
+
|
|
358
|
+
await init();
|
|
359
|
+
|
|
360
|
+
store.setState({
|
|
361
|
+
...initialState,
|
|
362
|
+
versions: {
|
|
363
|
+
...initialState.versions,
|
|
364
|
+
current: { version: '5.2.1-prerelease.0' },
|
|
365
|
+
latest: { version: '6.2.1' },
|
|
366
|
+
},
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
expect(api.versionUpdateAvailable()).toEqual(true);
|
|
370
|
+
});
|
|
371
|
+
|
|
372
|
+
it('from newer prerelease version', async () => {
|
|
373
|
+
const store = createMockStore();
|
|
374
|
+
const {
|
|
375
|
+
init,
|
|
376
|
+
api,
|
|
377
|
+
state: initialState,
|
|
378
|
+
} = initVersions({
|
|
379
|
+
store,
|
|
380
|
+
fullAPI: { addNotification: jest.fn() },
|
|
381
|
+
});
|
|
382
|
+
|
|
383
|
+
await init();
|
|
384
|
+
|
|
385
|
+
store.setState({
|
|
386
|
+
...initialState,
|
|
387
|
+
versions: {
|
|
388
|
+
...initialState.versions,
|
|
389
|
+
current: { version: '5.2.1-prerelease.0' },
|
|
390
|
+
latest: { version: '3.2.1' },
|
|
391
|
+
},
|
|
392
|
+
});
|
|
393
|
+
|
|
394
|
+
expect(api.versionUpdateAvailable()).toEqual(false);
|
|
395
|
+
});
|
|
396
|
+
});
|
|
397
|
+
});
|
package/src/typings.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/* eslint-disable no-underscore-dangle, @typescript-eslint/naming-convention */
|
|
2
|
+
declare var RELEASE_NOTES_DATA: any;
|
|
3
|
+
declare var __STORYBOOK_ADDONS_MANAGER: any;
|
|
4
|
+
|
|
5
|
+
declare var FEATURES:
|
|
6
|
+
| {
|
|
7
|
+
storyStoreV7?: boolean;
|
|
8
|
+
argTypeTargetsV7?: boolean;
|
|
9
|
+
}
|
|
10
|
+
| undefined;
|
|
11
|
+
|
|
12
|
+
declare var REFS: any;
|
|
13
|
+
declare var VERSIONCHECK: any;
|
|
14
|
+
declare var LOGLEVEL: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'silent' | undefined;
|