@atlaskit/media-test-helpers 30.1.1 → 30.1.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 +6 -0
- package/dist/cjs/I18nWrapper.js +8 -24
- package/dist/cjs/MockGlobalImage.js +0 -16
- package/dist/cjs/authProvider.js +0 -18
- package/dist/cjs/await-error.js +0 -10
- package/dist/cjs/clipboardEventMocks.js +6 -39
- package/dist/cjs/createMouseEvent.js +4 -8
- package/dist/cjs/createTouchEvent.js +0 -2
- package/dist/cjs/docs-content-tabs.js +1 -14
- package/dist/cjs/example-mediaFeatureFlags.js +0 -7
- package/dist/cjs/exampleMediaItems.js +6 -7
- package/dist/cjs/fakeI18n.js +2 -4
- package/dist/cjs/fakeMediaClient.js +5 -18
- package/dist/cjs/featureFlagsWrapper/dropdown.js +12 -46
- package/dist/cjs/featureFlagsWrapper/helpers.js +0 -14
- package/dist/cjs/featureFlagsWrapper/index.js +5 -19
- package/dist/cjs/fileReader.js +0 -28
- package/dist/cjs/fileStateFactory/createFileState.js +9 -27
- package/dist/cjs/fileStateFactory/factory.js +7 -44
- package/dist/cjs/fileStateFactory/helpers.js +10 -23
- package/dist/cjs/fileStateFactory/index.js +0 -3
- package/dist/cjs/flushPromises.js +0 -2
- package/dist/cjs/getAuthFromContextProvider.js +0 -9
- package/dist/cjs/getJest.js +3 -5
- package/dist/cjs/globalEventEmitterListeners.js +0 -8
- package/dist/cjs/images.js +0 -6
- package/dist/cjs/index.js +0 -42
- package/dist/cjs/jestHelpers.js +0 -20
- package/dist/cjs/keyboardEventWithKeyCode.js +0 -18
- package/dist/cjs/mediaClientErrors.js +0 -11
- package/dist/cjs/mediaClientProvider.js +1 -17
- package/dist/cjs/mediaPickerAuthProvider.js +5 -21
- package/dist/cjs/mockCanvas.js +0 -4
- package/dist/cjs/mockData/handlers/copyWithToken.js +0 -14
- package/dist/cjs/mockData/handlers/getFile.js +0 -8
- package/dist/cjs/mockData/handlers/getFileImage.js +0 -9
- package/dist/cjs/mockData/handlers/index.js +0 -5
- package/dist/cjs/mockData/handlers/tenantAuth.js +0 -6
- package/dist/cjs/mockData/handlers/userCollectionFetch.js +0 -11
- package/dist/cjs/mockData/index.js +0 -9
- package/dist/cjs/mockData/matchers.js +0 -11
- package/dist/cjs/mockData/utils.js +10 -10
- package/dist/cjs/mockLoadImage.js +2 -14
- package/dist/cjs/mocks/database/chunk.js +0 -3
- package/dist/cjs/mocks/database/collection-item.js +14 -23
- package/dist/cjs/mocks/database/collection.js +0 -2
- package/dist/cjs/mocks/database/index.js +5 -23
- package/dist/cjs/mocks/database/upload.js +0 -6
- package/dist/cjs/mocks/fileAndDirectoriesUtils.js +12 -20
- package/dist/cjs/mocks/media-mock.js +14 -45
- package/dist/cjs/mocks/routers/api-router.js +78 -162
- package/dist/cjs/mocks/routers/index.js +0 -2
- package/dist/cjs/mocks/routers/media-playground-router.js +0 -3
- package/dist/cjs/mocks/websockets/index.js +0 -1
- package/dist/cjs/mocks/websockets/messages.js +0 -9
- package/dist/cjs/mocks/websockets/remote-upload-server.js +19 -45
- package/dist/cjs/mountWithIntlContext.js +9 -27
- package/dist/cjs/nextTick.js +0 -4
- package/dist/cjs/renderWithIntl.js +0 -6
- package/dist/cjs/story-list.js +4 -22
- package/dist/cjs/story-styles.js +0 -6
- package/dist/cjs/styled.js +0 -6
- package/dist/cjs/timeoutPromise.js +0 -1
- package/dist/cjs/ufoLogger.js +0 -7
- package/dist/cjs/utils/index.js +2 -11
- package/dist/cjs/utils/logging.js +11 -12
- package/dist/cjs/utils/mockData.js +5 -19
- package/dist/cjs/version.json +1 -1
- package/dist/cjs/waitUntil.js +2 -10
- package/dist/es2019/I18nWrapper.js +2 -4
- package/dist/es2019/MockGlobalImage.js +0 -3
- package/dist/es2019/authProvider.js +2 -5
- package/dist/es2019/clipboardEventMocks.js +12 -26
- package/dist/es2019/createMouseEvent.js +0 -2
- package/dist/es2019/docs-content-tabs.js +1 -3
- package/dist/es2019/example-mediaFeatureFlags.js +3 -2
- package/dist/es2019/exampleMediaItems.js +8 -3
- package/dist/es2019/fakeI18n.js +2 -1
- package/dist/es2019/fakeMediaClient.js +0 -1
- package/dist/es2019/featureFlagsWrapper/dropdown.js +0 -10
- package/dist/es2019/featureFlagsWrapper/helpers.js +2 -1
- package/dist/es2019/featureFlagsWrapper/index.js +2 -7
- package/dist/es2019/fileReader.js +0 -17
- package/dist/es2019/fileStateFactory/createFileState.js +6 -14
- package/dist/es2019/fileStateFactory/factory.js +4 -15
- package/dist/es2019/fileStateFactory/helpers.js +2 -7
- package/dist/es2019/getJest.js +3 -6
- package/dist/es2019/globalEventEmitterListeners.js +0 -3
- package/dist/es2019/images.js +2 -1
- package/dist/es2019/keyboardEventWithKeyCode.js +0 -5
- package/dist/es2019/mediaClientErrors.js +2 -1
- package/dist/es2019/mediaClientProvider.js +1 -1
- package/dist/es2019/mediaPickerAuthProvider.js +2 -5
- package/dist/es2019/mockData/handlers/copyWithToken.js +0 -2
- package/dist/es2019/mockData/handlers/getFile.js +0 -3
- package/dist/es2019/mockData/handlers/getFileImage.js +0 -3
- package/dist/es2019/mockData/handlers/tenantAuth.js +0 -2
- package/dist/es2019/mockData/handlers/userCollectionFetch.js +0 -2
- package/dist/es2019/mockData/index.js +0 -2
- package/dist/es2019/mockData/utils.js +10 -6
- package/dist/es2019/mockLoadImage.js +4 -2
- package/dist/es2019/mocks/database/index.js +0 -2
- package/dist/es2019/mocks/fileAndDirectoriesUtils.js +20 -14
- package/dist/es2019/mocks/media-mock.js +4 -16
- package/dist/es2019/mocks/routers/api-router.js +13 -45
- package/dist/es2019/mocks/websockets/remote-upload-server.js +11 -14
- package/dist/es2019/mountWithIntlContext.js +4 -4
- package/dist/es2019/story-list.js +0 -1
- package/dist/es2019/ufoLogger.js +0 -1
- package/dist/es2019/utils/index.js +0 -2
- package/dist/es2019/utils/logging.js +4 -4
- package/dist/es2019/utils/mockData.js +5 -3
- package/dist/es2019/version.json +1 -1
- package/dist/es2019/waitUntil.js +0 -1
- package/dist/esm/I18nWrapper.js +8 -12
- package/dist/esm/MockGlobalImage.js +0 -10
- package/dist/esm/authProvider.js +0 -10
- package/dist/esm/await-error.js +0 -6
- package/dist/esm/clipboardEventMocks.js +15 -39
- package/dist/esm/createMouseEvent.js +4 -6
- package/dist/esm/docs-content-tabs.js +2 -5
- package/dist/esm/example-mediaFeatureFlags.js +0 -3
- package/dist/esm/exampleMediaItems.js +8 -3
- package/dist/esm/fakeI18n.js +2 -1
- package/dist/esm/fakeMediaClient.js +5 -8
- package/dist/esm/featureFlagsWrapper/dropdown.js +12 -30
- package/dist/esm/featureFlagsWrapper/helpers.js +0 -3
- package/dist/esm/featureFlagsWrapper/index.js +5 -12
- package/dist/esm/fileReader.js +0 -28
- package/dist/esm/fileStateFactory/createFileState.js +9 -22
- package/dist/esm/fileStateFactory/factory.js +7 -41
- package/dist/esm/fileStateFactory/helpers.js +10 -18
- package/dist/esm/getAuthFromContextProvider.js +0 -3
- package/dist/esm/getJest.js +3 -3
- package/dist/esm/globalEventEmitterListeners.js +0 -3
- package/dist/esm/images.js +2 -1
- package/dist/esm/jestHelpers.js +0 -2
- package/dist/esm/keyboardEventWithKeyCode.js +0 -10
- package/dist/esm/mediaClientErrors.js +0 -3
- package/dist/esm/mediaClientProvider.js +1 -1
- package/dist/esm/mediaPickerAuthProvider.js +5 -12
- package/dist/esm/mockData/handlers/copyWithToken.js +0 -4
- package/dist/esm/mockData/handlers/getFile.js +0 -3
- package/dist/esm/mockData/handlers/getFileImage.js +0 -3
- package/dist/esm/mockData/handlers/tenantAuth.js +0 -2
- package/dist/esm/mockData/handlers/userCollectionFetch.js +0 -5
- package/dist/esm/mockData/index.js +0 -2
- package/dist/esm/mockData/utils.js +10 -6
- package/dist/esm/mockLoadImage.js +2 -4
- package/dist/esm/mocks/database/collection-item.js +14 -15
- package/dist/esm/mocks/database/index.js +5 -7
- package/dist/esm/mocks/fileAndDirectoriesUtils.js +12 -13
- package/dist/esm/mocks/media-mock.js +14 -26
- package/dist/esm/mocks/routers/api-router.js +78 -144
- package/dist/esm/mocks/websockets/remote-upload-server.js +19 -24
- package/dist/esm/mountWithIntlContext.js +9 -17
- package/dist/esm/story-list.js +4 -12
- package/dist/esm/story-styles.js +0 -2
- package/dist/esm/styled.js +0 -2
- package/dist/esm/ufoLogger.js +0 -4
- package/dist/esm/utils/index.js +2 -5
- package/dist/esm/utils/logging.js +11 -11
- package/dist/esm/utils/mockData.js +5 -3
- package/dist/esm/version.json +1 -1
- package/dist/esm/waitUntil.js +2 -6
- package/package.json +4 -4
|
@@ -5,17 +5,16 @@ export const defaultFileDetails = {
|
|
|
5
5
|
mimeType: 'image/png',
|
|
6
6
|
name: 'file-name.png',
|
|
7
7
|
size: 1
|
|
8
|
-
};
|
|
8
|
+
};
|
|
9
9
|
|
|
10
|
+
// min inclusive / max exclusive
|
|
10
11
|
function random(min = 0, max = 10000) {
|
|
11
12
|
min = Math.ceil(min);
|
|
12
13
|
max = Math.floor(max) - 1;
|
|
13
14
|
const result = Math.floor(Math.random() * (max - min + 1)) + min;
|
|
14
15
|
return result;
|
|
15
16
|
}
|
|
16
|
-
|
|
17
17
|
const getRandomElem = arr => arr[Math.floor(Math.random() * arr.length)];
|
|
18
|
-
|
|
19
18
|
export const createIdentifier = ({
|
|
20
19
|
collectionName = `collection-${random()}`,
|
|
21
20
|
occurrenceKey = `occurrence-${random()}`
|
|
@@ -25,12 +24,10 @@ export const createIdentifier = ({
|
|
|
25
24
|
collectionName,
|
|
26
25
|
occurrenceKey
|
|
27
26
|
});
|
|
28
|
-
|
|
29
27
|
const generateFileName = extension => {
|
|
30
28
|
const fileNames = ['quick-and-dirty', 'quality-time', 'down-for-the-count', 'hard-pill-to-swallow', 'between-a-rock-and-a-hard-place', 'fish-out-of-water', 'top-drawer', 'like-father-like-son', 'mountain-out-of-a-molehill', 'under-your-nose', 'a-chip-on-your-shoulder', 'hit-below-the-belt'];
|
|
31
29
|
return `${getRandomElem(fileNames)}.${extension}`;
|
|
32
30
|
};
|
|
33
|
-
|
|
34
31
|
const mediaTypesDetails = {
|
|
35
32
|
image: {
|
|
36
33
|
ext: 'png',
|
|
@@ -58,7 +55,6 @@ const mediaTypesDetails = {
|
|
|
58
55
|
}
|
|
59
56
|
};
|
|
60
57
|
const mediaTypes = Object.keys(mediaTypesDetails);
|
|
61
|
-
|
|
62
58
|
const generateMediaTypeDetails = mediaType => {
|
|
63
59
|
const {
|
|
64
60
|
mimeType,
|
|
@@ -69,7 +65,6 @@ const generateMediaTypeDetails = mediaType => {
|
|
|
69
65
|
name: generateFileName(ext)
|
|
70
66
|
};
|
|
71
67
|
};
|
|
72
|
-
|
|
73
68
|
export const createFileDetails = (id, mediaType = getRandomElem(mediaTypes)) => {
|
|
74
69
|
const {
|
|
75
70
|
mimeType,
|
package/dist/es2019/getJest.js
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
// Mock the bare minimum of jest used within `media-test-helpers`.
|
|
2
2
|
// Ideally this is not required in the future when functions are no longer used in Examples
|
|
3
3
|
// as they should only be used in unit tests.
|
|
4
|
+
|
|
4
5
|
const mockStub = () => Object.assign(() => {}, {
|
|
5
6
|
mockReturnValue(value) {},
|
|
6
|
-
|
|
7
7
|
mockImplementation(value) {},
|
|
8
|
-
|
|
9
8
|
mockResolvedValue(value) {}
|
|
10
|
-
|
|
11
9
|
});
|
|
12
|
-
|
|
13
10
|
const mockJest = () => {
|
|
14
11
|
// eslint-disable-next-line no-console
|
|
15
12
|
console.warn('Using mock jest. Please remove references to media-test-helpers in non-test code.');
|
|
@@ -20,7 +17,7 @@ const mockJest = () => {
|
|
|
20
17
|
requireActual: () => {},
|
|
21
18
|
doMock: () => {}
|
|
22
19
|
};
|
|
23
|
-
};
|
|
24
|
-
|
|
20
|
+
};
|
|
25
21
|
|
|
22
|
+
// ED-15806 Required as some examples currently use test modules and complain about not having `jest`.
|
|
26
23
|
export default (() => typeof jest === 'undefined' ? mockJest() : jest);
|
|
@@ -1,19 +1,16 @@
|
|
|
1
1
|
import { globalMediaEventEmitter } from '@atlaskit/media-client';
|
|
2
|
-
|
|
3
2
|
const fileAddedListener = fileState => {
|
|
4
3
|
// eslint-disable-next-line no-console
|
|
5
4
|
console.log('file-added -> globalMediaEventEmitter', {
|
|
6
5
|
fileState
|
|
7
6
|
});
|
|
8
7
|
};
|
|
9
|
-
|
|
10
8
|
const attachmentViewedListener = payload => {
|
|
11
9
|
// eslint-disable-next-line no-console
|
|
12
10
|
console.log('media-viewed -> globalMediaEventEmitter', {
|
|
13
11
|
payload
|
|
14
12
|
});
|
|
15
13
|
};
|
|
16
|
-
|
|
17
14
|
export const addGlobalEventEmitterListeners = () => {
|
|
18
15
|
globalMediaEventEmitter.off('file-added', fileAddedListener);
|
|
19
16
|
globalMediaEventEmitter.off('media-viewed', attachmentViewedListener);
|
package/dist/es2019/images.js
CHANGED
|
@@ -2,6 +2,7 @@ export { tallImage } from './dataURIs/tallImageURI';
|
|
|
2
2
|
export { smallImage } from './dataURIs/smallImageURI';
|
|
3
3
|
export { smallTransparentImage } from './dataURIs/smallTransparentImageURI';
|
|
4
4
|
export { wideImage } from './dataURIs/wideImageURI';
|
|
5
|
-
export { wideTransparentImage } from './dataURIs/wideTransparentImageURI';
|
|
5
|
+
export { wideTransparentImage } from './dataURIs/wideTransparentImageURI';
|
|
6
6
|
|
|
7
|
+
// image urls
|
|
7
8
|
export const remoteImage = 'https://mediaviewer-examples.s3-ap-southeast-2.amazonaws.com/image/image.jpg';
|
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
import * as exenv from 'exenv';
|
|
2
|
-
|
|
3
2
|
class FakeKeyboardEvent {
|
|
4
3
|
constructor(_, __) {}
|
|
5
|
-
|
|
6
4
|
}
|
|
7
|
-
|
|
8
5
|
class KeyboardEventWithKeyCode extends (exenv.canUseDOM ? KeyboardEvent : Object) {
|
|
9
6
|
constructor(type, options) {
|
|
10
7
|
super(type, options);
|
|
11
8
|
}
|
|
12
|
-
|
|
13
9
|
}
|
|
14
|
-
|
|
15
10
|
const Class = exenv.canUseDOM ? KeyboardEventWithKeyCode : FakeKeyboardEvent;
|
|
16
11
|
export default Class;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { RequestError, PollingError, MediaStoreError } from '@atlaskit/media-client';
|
|
2
|
-
export const createRateLimitedError = (metadata = {}) => new RequestError('serverRateLimited', {
|
|
2
|
+
export const createRateLimitedError = (metadata = {}) => new RequestError('serverRateLimited', {
|
|
3
|
+
...metadata,
|
|
3
4
|
statusCode: 429
|
|
4
5
|
});
|
|
5
6
|
export const createPollingMaxAttemptsError = (attempts = 1) => new PollingError('pollingMaxAttemptsExceeded', attempts);
|
|
@@ -11,13 +11,13 @@ export const defaultParams = {
|
|
|
11
11
|
const defaultAuthParameter = {
|
|
12
12
|
authType: 'client'
|
|
13
13
|
};
|
|
14
|
+
|
|
14
15
|
/**
|
|
15
16
|
* Creates and returns `MediaClient` (from `media-client`) based on the data provided in parameter object.
|
|
16
17
|
*
|
|
17
18
|
* @param {AuthParameter} authParameter specifies serviceName and whatever auth should be done with clientId or asapIssuer
|
|
18
19
|
* @returns {Context}
|
|
19
20
|
*/
|
|
20
|
-
|
|
21
21
|
export const createStorybookMediaClient = (authParameter = defaultAuthParameter) => {
|
|
22
22
|
return new MediaClient(createStorybookMediaClientConfig(authParameter));
|
|
23
23
|
};
|
|
@@ -20,7 +20,6 @@ const accessUrns = {
|
|
|
20
20
|
'urn:filestore:file:*': ['read', 'update']
|
|
21
21
|
}
|
|
22
22
|
};
|
|
23
|
-
|
|
24
23
|
const requestAuthProvider = async (authEnvironment, collectionName, env = 'dev') => {
|
|
25
24
|
const url = `https://media-playground.${env}.atl-paas.net/token/tenant?environment=${authEnvironment}`;
|
|
26
25
|
const body = JSON.stringify({
|
|
@@ -33,20 +32,18 @@ const requestAuthProvider = async (authEnvironment, collectionName, env = 'dev')
|
|
|
33
32
|
method: 'POST',
|
|
34
33
|
body,
|
|
35
34
|
headers
|
|
36
|
-
});
|
|
35
|
+
});
|
|
37
36
|
|
|
37
|
+
// We leverage the fact, that our internal /toke/tenant API returns data in the same format as Auth
|
|
38
38
|
return response.json();
|
|
39
39
|
};
|
|
40
|
-
|
|
41
40
|
export const mediaPickerAuthProvider = (authEnvironment = 'asap', env) => context => {
|
|
42
41
|
const collectionName = context && context.collectionName || defaultCollectionName;
|
|
43
42
|
authEnvironment = authEnvironment === 'asap' ? 'asap' : '';
|
|
44
43
|
const cacheKey = `${collectionName}:${authEnvironment}`;
|
|
45
|
-
|
|
46
44
|
if (!cachedAuths[cacheKey]) {
|
|
47
45
|
cachedAuths[cacheKey] = requestAuthProvider(authEnvironment, collectionName, env);
|
|
48
46
|
}
|
|
49
|
-
|
|
50
47
|
return cachedAuths[cacheKey];
|
|
51
48
|
};
|
|
52
49
|
export const defaultMediaPickerAuthProvider = () => () => {
|
|
@@ -29,7 +29,6 @@ export const copyWithToken = context => (req, res) => {
|
|
|
29
29
|
}));
|
|
30
30
|
const availableFiles = [...context().userContext.collection];
|
|
31
31
|
const matchingDataItem = data.reduce((ret, dataItem) => exactMatch(req, dataItem) ? dataItem : ret, undefined);
|
|
32
|
-
|
|
33
32
|
if (matchingDataItem) {
|
|
34
33
|
const intFile = {
|
|
35
34
|
id: uuid.v4(),
|
|
@@ -117,6 +116,5 @@ export const copyWithToken = context => (req, res) => {
|
|
|
117
116
|
fillInResponse(res, resdata);
|
|
118
117
|
return res;
|
|
119
118
|
}
|
|
120
|
-
|
|
121
119
|
return undefined;
|
|
122
120
|
};
|
|
@@ -13,13 +13,11 @@ export const getFile = context => (req, res) => {
|
|
|
13
13
|
},
|
|
14
14
|
body: null
|
|
15
15
|
});
|
|
16
|
-
|
|
17
16
|
const availableFiles = [...context().userContext.collection, ...context().tenantContext.collection];
|
|
18
17
|
const userData = context().userContext.collection.map(requestDataTemplate(context().userContext.collectionName));
|
|
19
18
|
const tenantData = context().tenantContext.collection.map(requestDataTemplate(context().tenantContext.collectionName));
|
|
20
19
|
const data = [...tenantData, ...userData];
|
|
21
20
|
const matchingDataItem = data.reduce((ret, dataItem) => exactMatch(req, dataItem) ? dataItem : ret, undefined);
|
|
22
|
-
|
|
23
21
|
if (matchingDataItem) {
|
|
24
22
|
const fileId = (/\/file\/(.*)/.exec(req.url().path || '') || [])[1];
|
|
25
23
|
const resdata = {
|
|
@@ -90,6 +88,5 @@ export const getFile = context => (req, res) => {
|
|
|
90
88
|
fillInResponse(res, resdata);
|
|
91
89
|
return res;
|
|
92
90
|
}
|
|
93
|
-
|
|
94
91
|
return undefined;
|
|
95
92
|
};
|
|
@@ -14,12 +14,10 @@ export const getFileImage = context => (req, res) => {
|
|
|
14
14
|
},
|
|
15
15
|
body: null
|
|
16
16
|
});
|
|
17
|
-
|
|
18
17
|
const userData = context().userContext.collection.map(requestDataTemplate(context().userContext.collectionName));
|
|
19
18
|
const tenantData = context().tenantContext.collection.map(requestDataTemplate(context().tenantContext.collectionName));
|
|
20
19
|
const data = [...userData, ...tenantData];
|
|
21
20
|
const matchingDataItem = data.reduce((ret, dataItem) => exactMatch(req, dataItem) ? dataItem : ret, undefined);
|
|
22
|
-
|
|
23
21
|
if (matchingDataItem) {
|
|
24
22
|
const resdata = {
|
|
25
23
|
status: 200,
|
|
@@ -50,6 +48,5 @@ export const getFileImage = context => (req, res) => {
|
|
|
50
48
|
fillInResponse(res, resdata);
|
|
51
49
|
return res;
|
|
52
50
|
}
|
|
53
|
-
|
|
54
51
|
return undefined;
|
|
55
52
|
};
|
|
@@ -38,7 +38,6 @@ export const tenantAuth = context => (req, res) => {
|
|
|
38
38
|
},
|
|
39
39
|
body: null
|
|
40
40
|
};
|
|
41
|
-
|
|
42
41
|
if (exactMatch(req, data1) || exactMatch(req, data2)) {
|
|
43
42
|
const clientId = '5a9812fc-d029-4a39-8a46-d3cc36eed7ab';
|
|
44
43
|
const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI2NTUzNjI6YjllMGUwYjUtYzYzOS00ZmNiLTk2ZjItMDZmZTZhZTc5NGJlIiwiYWNjZXNzIjp7InVybjpmaWxlc3RvcmU6Y29sbGVjdGlvbjpNZWRpYVNlcnZpY2VzU2FtcGxlIjpbInJlYWQiLCJpbnNlcnQiXSwidXJuOmZpbGVzdG9yZTpjaHVuazoqIjpbImNyZWF0ZSIsInJlYWQiXSwidXJuOmZpbGVzdG9yZTp1cGxvYWQiOlsiY3JlYXRlIl0sInVybjpmaWxlc3RvcmU6dXBsb2FkOioiOlsicmVhZCIsInVwZGF0ZSJdfSwibmJmIjoxNTE5MDkwMDc2LCJleHAiOjE1MTkwOTM2NzYsImlhdCI6MTUxOTA5MDEzNiwiaXNzIjoiNWE5ODEyZmMtZDAyOS00YTM5LThhNDYtZDNjYzM2ZWVkN2FiIn0.7Qr_rZfVLFEBgi5u0xPhjDRCxml75MxDObAhHSnadL4';
|
|
@@ -68,6 +67,5 @@ export const tenantAuth = context => (req, res) => {
|
|
|
68
67
|
fillInResponse(res, resdata);
|
|
69
68
|
return res;
|
|
70
69
|
}
|
|
71
|
-
|
|
72
70
|
return undefined;
|
|
73
71
|
};
|
|
@@ -17,7 +17,6 @@ export const userCollectionFetch = context => (req, res) => {
|
|
|
17
17
|
},
|
|
18
18
|
body: null
|
|
19
19
|
};
|
|
20
|
-
|
|
21
20
|
if (exactMatch(req, data)) {
|
|
22
21
|
const resdata = {
|
|
23
22
|
status: 200,
|
|
@@ -49,6 +48,5 @@ export const userCollectionFetch = context => (req, res) => {
|
|
|
49
48
|
fillInResponse(res, resdata);
|
|
50
49
|
return res;
|
|
51
50
|
}
|
|
52
|
-
|
|
53
51
|
return undefined;
|
|
54
52
|
};
|
|
@@ -14,7 +14,6 @@ export class MockContext {
|
|
|
14
14
|
collection: [],
|
|
15
15
|
collectionName: RECENTS_COLLECTION
|
|
16
16
|
});
|
|
17
|
-
|
|
18
17
|
_defineProperty(this, "tenantContext", {
|
|
19
18
|
auth: {
|
|
20
19
|
clientId: '',
|
|
@@ -25,5 +24,4 @@ export class MockContext {
|
|
|
25
24
|
collectionName: 'MediaServicesSample'
|
|
26
25
|
});
|
|
27
26
|
}
|
|
28
|
-
|
|
29
27
|
}
|
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
export const dataURItoBlob = dataURI => {
|
|
2
2
|
// convert base64 to raw binary data held in a string
|
|
3
|
-
const byteString = atob(dataURI.split(',')[1]);
|
|
3
|
+
const byteString = atob(dataURI.split(',')[1]);
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
// separate out the mime component
|
|
6
|
+
const mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
// write the bytes of the string to an ArrayBuffer
|
|
9
|
+
const ab = new ArrayBuffer(byteString.length);
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
// create a view into the buffer
|
|
12
|
+
const ia = new Uint8Array(ab);
|
|
10
13
|
|
|
14
|
+
// set the bytes of the buffer to the correct values
|
|
11
15
|
for (let i = 0; i < byteString.length; i++) {
|
|
12
16
|
ia[i] = byteString.charCodeAt(i);
|
|
13
|
-
}
|
|
14
|
-
|
|
17
|
+
}
|
|
15
18
|
|
|
19
|
+
// write the ArrayBuffer to a blob, and you're done
|
|
16
20
|
const blob = new Blob([ab], {
|
|
17
21
|
type: mimeString
|
|
18
22
|
});
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import getJest from './getJest';
|
|
2
2
|
const jest = getJest();
|
|
3
3
|
let getOrientationMock;
|
|
4
|
-
let loadImageMock;
|
|
4
|
+
let loadImageMock;
|
|
5
5
|
|
|
6
|
+
// so that jest doesn't hoist mock of media-ui and replaces actual module on every import of media-test-helpers
|
|
6
7
|
export const loadImageMockSetup = () => {
|
|
7
|
-
jest.doMock('@atlaskit/media-ui', () => ({
|
|
8
|
+
jest.doMock('@atlaskit/media-ui', () => ({
|
|
9
|
+
...jest.requireActual('@atlaskit/media-ui'),
|
|
8
10
|
getOrientation: jest.fn(() => getOrientationMock),
|
|
9
11
|
loadImage: jest.fn(() => loadImageMock)
|
|
10
12
|
}));
|
|
@@ -27,7 +27,6 @@ export function createDatabase(collections = {}) {
|
|
|
27
27
|
database.register('collection', createCollection);
|
|
28
28
|
database.register('upload', createUpload);
|
|
29
29
|
database.register('chunk', createChunk);
|
|
30
|
-
|
|
31
30
|
if (Object.keys(collections).length > 0) {
|
|
32
31
|
Object.keys(collections).forEach(collectionName => {
|
|
33
32
|
database.push('collection', {
|
|
@@ -62,6 +61,5 @@ export function createDatabase(collections = {}) {
|
|
|
62
61
|
createdAt: Date.now()
|
|
63
62
|
});
|
|
64
63
|
}
|
|
65
|
-
|
|
66
64
|
return database;
|
|
67
65
|
}
|
|
@@ -2,33 +2,40 @@
|
|
|
2
2
|
* Some utilities and types around this API -
|
|
3
3
|
* https://developer.mozilla.org/en-US/docs/Web/API/File_and_Directory_Entries_API/Introduction
|
|
4
4
|
*/
|
|
5
|
+
|
|
5
6
|
// These APIs are experimental, so such not defined in TS core libraries.
|
|
7
|
+
|
|
6
8
|
// Based on https://developer.mozilla.org/en-US/docs/Web/API/FileSystemEntry
|
|
9
|
+
|
|
7
10
|
// Based on https://developer.mozilla.org/en-US/docs/Web/API/FileSystemEntry
|
|
11
|
+
|
|
8
12
|
// Based on https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryEntry
|
|
13
|
+
|
|
9
14
|
// Represents https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryReader
|
|
10
|
-
|
|
15
|
+
|
|
16
|
+
const createDataTransferItem = webkitGetAsEntryResult => (
|
|
17
|
+
// Using DataTransferItem constructor is illegal
|
|
11
18
|
{
|
|
12
19
|
getAsFile: () => null,
|
|
13
|
-
|
|
14
20
|
getAsString() {
|
|
15
21
|
return '';
|
|
16
22
|
},
|
|
17
|
-
|
|
18
23
|
kind: 'file',
|
|
19
24
|
type: '',
|
|
20
25
|
// @ts-expect-error
|
|
21
26
|
webkitGetAsEntry: () => webkitGetAsEntryResult
|
|
22
27
|
});
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
{
|
|
28
|
+
const createFileList = filesArray => (
|
|
29
|
+
// Using FileList constructor is illegal
|
|
30
|
+
{
|
|
31
|
+
...filesArray,
|
|
26
32
|
length: filesArray.length,
|
|
27
33
|
item: index => filesArray[index]
|
|
28
34
|
});
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
{
|
|
35
|
+
const createDataTransferItemList = itemsArray => (
|
|
36
|
+
// Using DataTransferItemList constructor is illegal
|
|
37
|
+
{
|
|
38
|
+
...itemsArray,
|
|
32
39
|
length: itemsArray.length,
|
|
33
40
|
add: () => null,
|
|
34
41
|
clear: () => null,
|
|
@@ -36,10 +43,10 @@ const createDataTransferItemList = itemsArray => ( // Using DataTransferItemList
|
|
|
36
43
|
item: index => itemsArray[index],
|
|
37
44
|
remove: () => null
|
|
38
45
|
});
|
|
39
|
-
|
|
40
46
|
const createDataTransfer = (files, items) => {
|
|
41
|
-
const dataTransfer = new DataTransfer();
|
|
47
|
+
const dataTransfer = new DataTransfer();
|
|
42
48
|
|
|
49
|
+
// Since `files` and `items` are readonly - this is the only way assigning these values
|
|
43
50
|
Object.defineProperty(dataTransfer, 'files', {
|
|
44
51
|
value: files
|
|
45
52
|
});
|
|
@@ -48,7 +55,6 @@ const createDataTransfer = (files, items) => {
|
|
|
48
55
|
});
|
|
49
56
|
return dataTransfer;
|
|
50
57
|
};
|
|
51
|
-
|
|
52
58
|
export const createFileSystemFileEntry = (name, fullPath, imageFile) => ({
|
|
53
59
|
isDirectory: false,
|
|
54
60
|
isFile: true,
|
|
@@ -73,8 +79,8 @@ export const createDropEventWithFiles = (fileSystemEntry, files) => {
|
|
|
73
79
|
const fileList = createFileList(files);
|
|
74
80
|
const dataTransferItemList = createDataTransferItemList([dataTransferItem]);
|
|
75
81
|
const dataTransfer = createDataTransfer(fileList, dataTransferItemList);
|
|
76
|
-
const event = new DragEvent('drop');
|
|
77
|
-
|
|
82
|
+
const event = new DragEvent('drop');
|
|
83
|
+
// Way around assigning readonly value
|
|
78
84
|
Object.defineProperty(event, 'dataTransfer', {
|
|
79
85
|
value: dataTransfer
|
|
80
86
|
});
|
|
@@ -17,32 +17,24 @@ const fileName = 'image.png';
|
|
|
17
17
|
export class MediaMock {
|
|
18
18
|
constructor(collections) {
|
|
19
19
|
_defineProperty(this, "server", new Server());
|
|
20
|
-
|
|
21
20
|
_defineProperty(this, "routers", []);
|
|
22
|
-
|
|
23
21
|
_defineProperty(this, "dbs", []);
|
|
24
|
-
|
|
25
22
|
_defineProperty(this, "websockets", []);
|
|
26
|
-
|
|
27
23
|
this.collections = collections;
|
|
28
24
|
}
|
|
29
|
-
|
|
30
25
|
enable(config = {}) {
|
|
31
26
|
const {
|
|
32
27
|
isSlowServer,
|
|
33
28
|
urlsReturnErrorsTo,
|
|
34
29
|
mockRemoteUploadActivity
|
|
35
30
|
} = config;
|
|
36
|
-
|
|
37
31
|
if (!exenv.canUseDOM) {
|
|
38
32
|
return;
|
|
39
33
|
}
|
|
40
|
-
|
|
41
34
|
this.routers = [createMediaPlaygroundRouter(), createApiRouter(isSlowServer, urlsReturnErrorsTo)];
|
|
42
35
|
const database = createDatabase(this.collections);
|
|
43
36
|
this.dbs = [database];
|
|
44
37
|
[...this.routers, ...this.dbs].forEach(this.server.use.bind(this.server));
|
|
45
|
-
|
|
46
38
|
if (mockRemoteUploadActivity) {
|
|
47
39
|
const wsServer = new RemoteUploadActivityServer({
|
|
48
40
|
database,
|
|
@@ -51,12 +43,10 @@ export class MediaMock {
|
|
|
51
43
|
wsServer.start();
|
|
52
44
|
this.websockets = [wsServer];
|
|
53
45
|
}
|
|
54
|
-
|
|
55
46
|
if (window) {
|
|
56
47
|
window.mediaMockControlsBackdoor = mediaMockControlsBackdoor;
|
|
57
48
|
}
|
|
58
49
|
}
|
|
59
|
-
|
|
60
50
|
disable() {
|
|
61
51
|
[...this.routers, ...this.dbs].forEach(this.server.remove.bind(this.server));
|
|
62
52
|
this.routers.forEach(router => router.reset());
|
|
@@ -66,7 +56,6 @@ export class MediaMock {
|
|
|
66
56
|
this.websockets.forEach(ws => ws.stop());
|
|
67
57
|
this.websockets = [];
|
|
68
58
|
}
|
|
69
|
-
|
|
70
59
|
}
|
|
71
60
|
export function generateFilesFromTestData(files) {
|
|
72
61
|
return files.map(file => {
|
|
@@ -100,33 +89,32 @@ const mediaMockControlsBackdoor = {
|
|
|
100
89
|
mediaMock.disable();
|
|
101
90
|
mediaMock.enable(config);
|
|
102
91
|
},
|
|
103
|
-
|
|
104
92
|
/**
|
|
105
93
|
* Used to simulate the dragging of a folder (which contains a singular image) into the editor
|
|
106
94
|
* Library used for folder uploads: https://github.com/zzarcon/flat-files
|
|
107
95
|
*/
|
|
108
96
|
uploadFolderFromDrag: () => {
|
|
109
|
-
const fileSystemFileEntry = createFileSystemFileEntry(fileName, `folder_one/folder_two/${fileName}`, imageFile);
|
|
97
|
+
const fileSystemFileEntry = createFileSystemFileEntry(fileName, `folder_one/folder_two/${fileName}`, imageFile);
|
|
110
98
|
|
|
99
|
+
// Represents a folder that contains a file
|
|
111
100
|
const directoryEntryContainingFile = createFileSystemDirectoryEntry(fileName, `folder_one/folder_two/`, [fileSystemFileEntry]);
|
|
112
101
|
const event = createDropEventWithFiles(directoryEntryContainingFile, [imageFile]);
|
|
113
102
|
document.body.dispatchEvent(event);
|
|
114
103
|
document.body.querySelector('.fabric-editor-popup-scroll-parent').dispatchEvent(event);
|
|
115
104
|
},
|
|
116
|
-
|
|
117
105
|
/**
|
|
118
106
|
* Used to simulate the dragging of a folder, which contains a folder (which contains multiple images)
|
|
119
107
|
**/
|
|
120
108
|
uploadFolderContainingFolderFromDrag: () => {
|
|
121
109
|
const fileSystemFileEntry = createFileSystemFileEntry(fileName, `folder_one/folder_two/${fileName}`, imageFile);
|
|
122
|
-
const directoryEntryContainingFiles = createFileSystemDirectoryEntry(fileName, `folder_one/folder_two/`, [fileSystemFileEntry, fileSystemFileEntry, fileSystemFileEntry, fileSystemFileEntry]);
|
|
110
|
+
const directoryEntryContainingFiles = createFileSystemDirectoryEntry(fileName, `folder_one/folder_two/`, [fileSystemFileEntry, fileSystemFileEntry, fileSystemFileEntry, fileSystemFileEntry]);
|
|
123
111
|
|
|
112
|
+
// Represents a folder that contains a folder
|
|
124
113
|
const directoryEntry = createFileSystemDirectoryEntry(fileName, `folder_one/`, [directoryEntryContainingFiles]);
|
|
125
114
|
const event = createDropEventWithFiles(directoryEntry, [imageFile, imageFile, imageFile, imageFile]);
|
|
126
115
|
document.body.dispatchEvent(event);
|
|
127
116
|
document.body.querySelector('.fabric-editor-popup-scroll-parent').dispatchEvent(event);
|
|
128
117
|
},
|
|
129
|
-
|
|
130
118
|
/**
|
|
131
119
|
* Used to simulate the dragging of an image into the editor
|
|
132
120
|
* In the future we should consider using a general approach to uploading files as mentioned here:
|