@coveo/push-api-client 2.6.5 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/APICore.js +43 -0
- package/dist/APICore.js.map +1 -0
- package/dist/definitions/APICore.d.ts +11 -0
- package/dist/definitions/{source/catalog.stream.spec.d.ts → help/urlUtils.spec.d.ts} +0 -0
- package/dist/definitions/source/batchUploadDocumentsFromFile.spec.d.ts +1 -0
- package/dist/definitions/source/catalog.d.ts +1 -0
- package/dist/definitions/source/documentUploader.d.ts +3 -2
- package/dist/definitions/source/documentUploader.spec.d.ts +1 -0
- package/dist/definitions/source/push.d.ts +5 -5
- package/dist/definitions/uploadStrategy/fileContainerStrategy.d.ts +4 -4
- package/dist/definitions/uploadStrategy/fileContainerStrategy.spec.d.ts +1 -0
- package/dist/definitions/uploadStrategy/streamChunkStrategy.d.ts +4 -4
- package/dist/definitions/uploadStrategy/streamChunkStrategy.spec.d.ts +1 -0
- package/dist/docs/assets/search.js +1 -1
- package/dist/docs/classes/AnySecurityIdentityBuilder.html +4 -4
- package/dist/docs/classes/CatalogSource.html +24 -17
- package/dist/docs/classes/DocumentBuilder.html +28 -28
- package/dist/docs/classes/FieldAnalyser.html +12 -12
- package/dist/docs/classes/GroupSecurityIdentityBuilder.html +5 -5
- package/dist/docs/classes/PushSource.html +40 -43
- package/dist/docs/classes/UserSecurityIdentityBuilder.html +5 -5
- package/dist/docs/classes/VirtualGroupSecurityIdentityBuilder.html +5 -5
- package/dist/docs/classes/errors.FieldTypeInconsistencyError.html +3 -3
- package/dist/docs/classes/errors.InvalidDocument.html +3 -3
- package/dist/docs/classes/errors.InvalidPermanentId.html +3 -3
- package/dist/docs/classes/errors.NotAFileError.html +3 -3
- package/dist/docs/classes/errors.NotAJsonFileError.html +3 -3
- package/dist/docs/classes/errors.PrivilegeError.html +4 -4
- package/dist/docs/classes/errors.UnsupportedAttribute.html +3 -3
- package/dist/docs/classes/errors.UnsupportedFieldError.html +6 -6
- package/dist/docs/enums/PlatformEnvironment.html +5 -5
- package/dist/docs/functions/parseAndGetDocumentBuilderFromJSONDocument.html +1 -1
- package/dist/docs/interfaces/BatchUpdateDocuments.html +3 -3
- package/dist/docs/interfaces/Document.html +14 -14
- package/dist/docs/interfaces/SecurityIdentity.html +4 -4
- package/dist/docs/interfaces/SecurityIdentityBuilder.html +2 -2
- package/dist/docs/interfaces/UploadBatchCallbackData.html +5 -5
- package/dist/docs/modules/errors.html +1 -1
- package/dist/docs/types/BatchUpdateDocumentsFromFiles.html +1 -1
- package/dist/docs/types/CompressionType.html +1 -1
- package/dist/docs/types/FailedUploadCallback.html +1 -1
- package/dist/docs/types/Metadata.html +1 -1
- package/dist/docs/types/MetadataValue.html +1 -1
- package/dist/docs/types/PlatformUrlOptions.html +1 -1
- package/dist/docs/types/SecurityIdentityType.html +1 -1
- package/dist/docs/types/SuccessfulUploadCallback.html +1 -1
- package/dist/docs/types/Transformer.html +1 -1
- package/dist/docs/variables/BuiltInTransformers.html +1 -1
- package/dist/docs/variables/Source.html +1 -1
- package/dist/fieldAnalyser/fieldAnalyser.spec.js +0 -1
- package/dist/fieldAnalyser/fieldAnalyser.spec.js.map +1 -1
- package/dist/fieldAnalyser/fieldsUtils.spec.js +35 -3
- package/dist/fieldAnalyser/fieldsUtils.spec.js.map +1 -1
- package/dist/help/urlUtils.spec.js +42 -0
- package/dist/help/urlUtils.spec.js.map +1 -0
- package/dist/source/batchUploadDocumentsFromFile.spec.js +146 -0
- package/dist/source/batchUploadDocumentsFromFile.spec.js.map +1 -0
- package/dist/source/catalog.js +4 -5
- package/dist/source/catalog.js.map +1 -1
- package/dist/source/catalog.spec.js +20 -199
- package/dist/source/catalog.spec.js.map +1 -1
- package/dist/source/documentUploader.js +2 -3
- package/dist/source/documentUploader.js.map +1 -1
- package/dist/source/documentUploader.spec.js +119 -0
- package/dist/source/documentUploader.spec.js.map +1 -0
- package/dist/source/push.js +7 -11
- package/dist/source/push.js.map +1 -1
- package/dist/source/push.spec.js +91 -270
- package/dist/source/push.spec.js.map +1 -1
- package/dist/uploadStrategy/fileContainerStrategy.js +4 -5
- package/dist/uploadStrategy/fileContainerStrategy.js.map +1 -1
- package/dist/uploadStrategy/fileContainerStrategy.spec.js +87 -0
- package/dist/uploadStrategy/fileContainerStrategy.spec.js.map +1 -0
- package/dist/uploadStrategy/streamChunkStrategy.js +5 -6
- package/dist/uploadStrategy/streamChunkStrategy.js.map +1 -1
- package/dist/uploadStrategy/streamChunkStrategy.spec.js +82 -0
- package/dist/uploadStrategy/streamChunkStrategy.spec.js.map +1 -0
- package/package.json +2 -1
- package/dist/__stub__/largeDocuments/documentGenerator.js +0 -22
- package/dist/__stub__/largeDocuments/documentGenerator.js.map +0 -1
- package/dist/definitions/__stub__/largeDocuments/documentGenerator.d.ts +0 -12
- package/dist/definitions/help/axiosUtils.d.ts +0 -2
- package/dist/help/axiosUtils.js +0 -12
- package/dist/help/axiosUtils.js.map +0 -1
- package/dist/source/catalog.stream.spec.js +0 -238
- package/dist/source/catalog.stream.spec.js.map +0 -1
@@ -1,7 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.StreamChunkStrategy = void 0;
|
4
|
-
const axios_1 = require("axios");
|
5
4
|
const url_1 = require("url");
|
6
5
|
const fileContainer_1 = require("../help/fileContainer");
|
7
6
|
/**
|
@@ -11,9 +10,9 @@ const fileContainer_1 = require("../help/fileContainer");
|
|
11
10
|
* @implements {UploadStrategy}
|
12
11
|
*/
|
13
12
|
class StreamChunkStrategy {
|
14
|
-
constructor(urlBuilder,
|
13
|
+
constructor(urlBuilder, api) {
|
15
14
|
this.urlBuilder = urlBuilder;
|
16
|
-
this.
|
15
|
+
this.api = api;
|
17
16
|
this._openedStream = null;
|
18
17
|
}
|
19
18
|
async upload(batch) {
|
@@ -28,7 +27,7 @@ class StreamChunkStrategy {
|
|
28
27
|
}
|
29
28
|
async openStream() {
|
30
29
|
const openStreamUrl = new url_1.URL(`${this.urlBuilder.baseStreamURL}/open`);
|
31
|
-
const res = await
|
30
|
+
const res = await this.api.post(openStreamUrl.toString());
|
32
31
|
this._openedStream = res.data;
|
33
32
|
}
|
34
33
|
async closeOpenedStream() {
|
@@ -36,7 +35,7 @@ class StreamChunkStrategy {
|
|
36
35
|
return;
|
37
36
|
}
|
38
37
|
const openStreamUrl = new url_1.URL(`${this.urlBuilder.baseStreamURL}/${this._openedStream.streamId}/close`);
|
39
|
-
const res = await
|
38
|
+
const res = await this.api.post(openStreamUrl.toString());
|
40
39
|
this._openedStream = null;
|
41
40
|
return res.data;
|
42
41
|
}
|
@@ -46,7 +45,7 @@ class StreamChunkStrategy {
|
|
46
45
|
}
|
47
46
|
const { streamId } = this._openedStream;
|
48
47
|
const openStreamUrl = new url_1.URL(`${this.urlBuilder.baseStreamURL}/${streamId}/chunk`);
|
49
|
-
const res = await
|
48
|
+
const res = await this.api.post(openStreamUrl.toString());
|
50
49
|
return res.data;
|
51
50
|
}
|
52
51
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"streamChunkStrategy.js","sourceRoot":"","sources":["../../src/uploadStrategy/streamChunkStrategy.ts"],"names":[],"mappings":";;;AAAA,
|
1
|
+
{"version":3,"file":"streamChunkStrategy.js","sourceRoot":"","sources":["../../src/uploadStrategy/streamChunkStrategy.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAGxB,yDAAmE;AAWnE;;;;;GAKG;AACH,MAAa,mBAAmB;IAE9B,YACU,UAA4B,EAC5B,GAAY;QADZ,eAAU,GAAV,UAAU,CAAkB;QAC5B,QAAG,GAAH,GAAG,CAAS;QAHd,kBAAa,GAA0B,IAAI,CAAC;IAIjD,CAAC;IAEG,KAAK,CAAC,MAAM,CAAC,KAA2B;QAC7C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9C,OAAO,IAAA,4CAA4B,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAEM,KAAK,CAAC,SAAS;QACpB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,MAAM,aAAa,GAAG,IAAI,SAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,OAAO,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAiB,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE1E,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,iBAAiB;QAC5B,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE;YAC/B,OAAO;SACR;QACD,MAAM,aAAa,GAAG,IAAI,SAAG,CAC3B,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,QAAQ,CACxE,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC9B,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE;YAC/B,MAAM,sBAAsB,CAAC;SAC9B;QAED,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,CAAC,aAAa,CAAC;QACtC,MAAM,aAAa,GAAG,IAAI,SAAG,CAC3B,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,QAAQ,QAAQ,CACrD,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAiB,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1E,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;CACF;AArDD,kDAqDC"}
|
@@ -0,0 +1,82 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
jest.mock('../APICore');
|
4
|
+
jest.mock('../help/fileContainer');
|
5
|
+
const platform_client_1 = require("@coveo/platform-client");
|
6
|
+
const __1 = require("..");
|
7
|
+
const APICore_1 = require("../APICore");
|
8
|
+
const environment_1 = require("../environment");
|
9
|
+
const fileContainer_1 = require("../help/fileContainer");
|
10
|
+
const urlUtils_1 = require("../help/urlUtils");
|
11
|
+
const streamChunkStrategy_1 = require("./streamChunkStrategy");
|
12
|
+
const mockedAPICore = jest.mocked(APICore_1.APICore);
|
13
|
+
const mockedPost = jest.fn();
|
14
|
+
const platformOptions = {
|
15
|
+
region: platform_client_1.Region.US,
|
16
|
+
environment: environment_1.PlatformEnvironment.Prod,
|
17
|
+
};
|
18
|
+
const documentBatch = {
|
19
|
+
addOrUpdate: [
|
20
|
+
new __1.DocumentBuilder('https://foo.com', 'Foo'),
|
21
|
+
new __1.DocumentBuilder('https://bar.com', 'Bar'),
|
22
|
+
],
|
23
|
+
delete: [{ documentId: 'some_id', deleteChildren: false }],
|
24
|
+
};
|
25
|
+
const fileContainerResponse = {
|
26
|
+
uploadUri: 'https://fake.upload.url',
|
27
|
+
fileId: 'file_id',
|
28
|
+
requiredHeaders: { foo: 'bar' },
|
29
|
+
};
|
30
|
+
const doMockAPICore = () => {
|
31
|
+
mockedAPICore.prototype.post.mockImplementation(mockedPost);
|
32
|
+
};
|
33
|
+
const doAxiosMockFileContainerResponse = () => ({
|
34
|
+
data: fileContainerResponse,
|
35
|
+
});
|
36
|
+
const doAxiosMockOpenStream = () => ({
|
37
|
+
data: {
|
38
|
+
streamId: 'the_stream_id',
|
39
|
+
},
|
40
|
+
});
|
41
|
+
const mockSuccessAxiosCalls = () => {
|
42
|
+
mockedPost.mockImplementation((url) => {
|
43
|
+
if (url.match(/chunk/)) {
|
44
|
+
return doAxiosMockFileContainerResponse();
|
45
|
+
}
|
46
|
+
if (url.match(/stream\/open/)) {
|
47
|
+
return doAxiosMockOpenStream();
|
48
|
+
}
|
49
|
+
return { data: {} };
|
50
|
+
});
|
51
|
+
};
|
52
|
+
describe('StreamChunkStrategy', () => {
|
53
|
+
let strategy;
|
54
|
+
beforeAll(() => {
|
55
|
+
doMockAPICore();
|
56
|
+
mockSuccessAxiosCalls();
|
57
|
+
});
|
58
|
+
beforeEach(async () => {
|
59
|
+
const builder = new urlUtils_1.StreamUrlBuilder('source-id', 'org-id', platformOptions);
|
60
|
+
strategy = new streamChunkStrategy_1.StreamChunkStrategy(builder, new APICore_1.APICore('access_token'));
|
61
|
+
await strategy.preUpload();
|
62
|
+
await strategy.upload(documentBatch);
|
63
|
+
await strategy.postUpload();
|
64
|
+
});
|
65
|
+
it('should make 3 post calls', () => {
|
66
|
+
expect(mockedPost).toBeCalledTimes(3);
|
67
|
+
});
|
68
|
+
it('should open a stream', () => {
|
69
|
+
expect(mockedPost).toHaveBeenNthCalledWith(1, 'https://api.cloud.coveo.com/push/v1/organizations/org-id/sources/source-id/stream/open');
|
70
|
+
});
|
71
|
+
it('should request a stream chunk', () => {
|
72
|
+
expect(mockedPost).toHaveBeenNthCalledWith(2, 'https://api.cloud.coveo.com/push/v1/organizations/org-id/sources/source-id/stream/the_stream_id/chunk');
|
73
|
+
});
|
74
|
+
it('should close the opened stream', () => {
|
75
|
+
expect(mockedPost).toHaveBeenNthCalledWith(3, 'https://api.cloud.coveo.com/push/v1/organizations/org-id/sources/source-id/stream/the_stream_id/close');
|
76
|
+
});
|
77
|
+
it('should call #uploadContentToFileContainer with file container and batch', () => {
|
78
|
+
expect(fileContainer_1.uploadContentToFileContainer).toHaveBeenCalledTimes(1);
|
79
|
+
expect(fileContainer_1.uploadContentToFileContainer).toHaveBeenCalledWith(fileContainerResponse, documentBatch);
|
80
|
+
});
|
81
|
+
});
|
82
|
+
//# sourceMappingURL=streamChunkStrategy.spec.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"streamChunkStrategy.spec.js","sourceRoot":"","sources":["../../src/uploadStrategy/streamChunkStrategy.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@coveo/push-api-client",
|
3
|
-
"version": "2.
|
3
|
+
"version": "2.7.0",
|
4
4
|
"description": "Push API client",
|
5
5
|
"main": "./dist/index.js",
|
6
6
|
"files": [
|
@@ -14,6 +14,7 @@
|
|
14
14
|
"abortcontroller-polyfill": "^1.7.1",
|
15
15
|
"axios": "^0.27.0",
|
16
16
|
"dayjs": "^1.10.4",
|
17
|
+
"exponential-backoff": "^3.1.0",
|
17
18
|
"isomorphic-fetch": "^3.0.0"
|
18
19
|
},
|
19
20
|
"devDependencies": {
|
@@ -1,22 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.generateBatmans = void 0;
|
4
|
-
const batmanCloner = (id) => ({
|
5
|
-
DocumentId: `https://www.themoviedb.org/movie/${id}`,
|
6
|
-
data: 'Batman (1989) \n Based on the Character created by Bob Kane. \n EXT. CITYSCAPE - NIGHT \n Gotham City. The City of Tomorrow: stark angles, creeping shadows, dense, crowded, as if hell had erupted through the sidewalks. A dangling fat moon shines overhead. \n At the opposite corner of the roof, some fifteen yards away... at the end of a line, a STRANGE BLACK SILHOUETTE is dropping slowly, implacably, into frame...',
|
7
|
-
fileExtension: '.txt',
|
8
|
-
title: 'Batman',
|
9
|
-
year: 1989,
|
10
|
-
date: '1989-06-13T12:00:00.000Z',
|
11
|
-
summary: "The Dark Knight of Gotham City begins his war on crime with his first major enemy being the clownishly homicidal Joker, who has seized control of Gotham's underworld.",
|
12
|
-
tagline: 'Have you ever danced with the devil in the pale moonlight?',
|
13
|
-
actors: ['Jack Nicholson', 'Michael Keaton', 'Kim Basinger'],
|
14
|
-
poster: '//image.tmdb.org/t/p/w185_and_h278_bestv2/kBf3g9crrADGMc2AMAMlLBgSm2h.jpg',
|
15
|
-
});
|
16
|
-
const generateBatmans = (batmanCount) => {
|
17
|
-
return Array(batmanCount)
|
18
|
-
.fill(null)
|
19
|
-
.map((_, idx) => batmanCloner(idx));
|
20
|
-
};
|
21
|
-
exports.generateBatmans = generateBatmans;
|
22
|
-
//# sourceMappingURL=documentGenerator.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"documentGenerator.js","sourceRoot":"","sources":["../../../src/__stub__/largeDocuments/documentGenerator.ts"],"names":[],"mappings":";;;AAAA,MAAM,YAAY,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC;IACpC,UAAU,EAAE,oCAAoC,EAAE,EAAE;IACpD,IAAI,EAAE,qaAAqa;IAC3a,aAAa,EAAE,MAAM;IACrB,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,0BAA0B;IAChC,OAAO,EACL,wKAAwK;IAC1K,OAAO,EAAE,4DAA4D;IACrE,MAAM,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,CAAC;IAC5D,MAAM,EACJ,2EAA2E;CAC9E,CAAC,CAAC;AAEI,MAAM,eAAe,GAAG,CAAC,WAAmB,EAAE,EAAE;IACrD,OAAO,KAAK,CAAC,WAAW,CAAC;SACtB,IAAI,CAAC,IAAI,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC;AAJW,QAAA,eAAe,mBAI1B"}
|
@@ -1,12 +0,0 @@
|
|
1
|
-
export declare const generateBatmans: (batmanCount: number) => {
|
2
|
-
DocumentId: string;
|
3
|
-
data: string;
|
4
|
-
fileExtension: string;
|
5
|
-
title: string;
|
6
|
-
year: number;
|
7
|
-
date: string;
|
8
|
-
summary: string;
|
9
|
-
tagline: string;
|
10
|
-
actors: string[];
|
11
|
-
poster: string;
|
12
|
-
}[];
|
package/dist/help/axiosUtils.js
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.axiosRequestHeaders = void 0;
|
4
|
-
const axiosRequestHeaders = (apikey) => {
|
5
|
-
const authorizationHeader = {
|
6
|
-
Authorization: `Bearer ${apikey}`,
|
7
|
-
};
|
8
|
-
const documentsRequestHeaders = Object.assign(Object.assign({}, authorizationHeader), { 'Content-Type': 'application/json', Accept: 'application/json' });
|
9
|
-
return { headers: documentsRequestHeaders };
|
10
|
-
};
|
11
|
-
exports.axiosRequestHeaders = axiosRequestHeaders;
|
12
|
-
//# sourceMappingURL=axiosUtils.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"axiosUtils.js","sourceRoot":"","sources":["../../src/help/axiosUtils.ts"],"names":[],"mappings":";;;AAEO,MAAM,mBAAmB,GAAG,CAAC,MAAc,EAAsB,EAAE;IACxE,MAAM,mBAAmB,GAAG;QAC1B,aAAa,EAAE,UAAU,MAAM,EAAE;KAClC,CAAC;IAEF,MAAM,uBAAuB,mCACxB,mBAAmB,KACtB,cAAc,EAAE,kBAAkB,EAClC,MAAM,EAAE,kBAAkB,GAC3B,CAAC;IAEF,OAAO,EAAC,OAAO,EAAE,uBAAuB,EAAC,CAAC;AAC5C,CAAC,CAAC;AAZW,QAAA,mBAAmB,uBAY9B"}
|
@@ -1,238 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
/* eslint-disable node/no-unpublished-import */
|
4
|
-
jest.mock('@coveo/platform-client');
|
5
|
-
jest.mock('axios');
|
6
|
-
jest.mock('../fieldAnalyser/fieldAnalyser');
|
7
|
-
const platform_client_1 = require("@coveo/platform-client");
|
8
|
-
const axios_1 = require("axios");
|
9
|
-
const path_1 = require("path");
|
10
|
-
const process_1 = require("process");
|
11
|
-
const catalog_1 = require("./catalog");
|
12
|
-
const __1 = require("..");
|
13
|
-
const documentGenerator_1 = require("../__stub__/largeDocuments/documentGenerator");
|
14
|
-
const fs_1 = require("fs");
|
15
|
-
const mockAxios = axios_1.default;
|
16
|
-
const mockedFieldAnalyser = jest.mocked(__1.FieldAnalyser);
|
17
|
-
const mockedPlatformClient = jest.mocked(platform_client_1.default);
|
18
|
-
const mockCreateSource = jest.fn();
|
19
|
-
const mockCreateField = jest.fn();
|
20
|
-
const mockEvaluate = jest.fn();
|
21
|
-
const mockAnalyserAdd = jest.fn();
|
22
|
-
const mockAnalyserReport = jest.fn();
|
23
|
-
const mockedSuccessCallback = jest.fn();
|
24
|
-
const mockedErrorCallback = jest.fn();
|
25
|
-
const pathToStub = (0, path_1.join)((0, process_1.cwd)(), 'src', '__stub__');
|
26
|
-
const expectedDocumentsHeaders = {
|
27
|
-
headers: {
|
28
|
-
Accept: 'application/json',
|
29
|
-
Authorization: 'Bearer the_key',
|
30
|
-
'Content-Type': 'application/json',
|
31
|
-
},
|
32
|
-
};
|
33
|
-
const doAxiosMockFileContainerResponse = () => ({
|
34
|
-
data: {
|
35
|
-
uploadUri: 'https://fake.upload.url',
|
36
|
-
fileId: 'file_id',
|
37
|
-
requiredHeaders: { foo: 'bar' },
|
38
|
-
},
|
39
|
-
});
|
40
|
-
const doAxiosMockOpenStream = () => ({
|
41
|
-
data: {
|
42
|
-
streamId: 'the_stream_id',
|
43
|
-
},
|
44
|
-
});
|
45
|
-
const doMockAxiosPut = () => {
|
46
|
-
mockAxios.put.mockImplementation(() => Promise.resolve());
|
47
|
-
};
|
48
|
-
const doMockPlatformClient = () => {
|
49
|
-
mockedPlatformClient.mockImplementation(() => ({
|
50
|
-
privilegeEvaluator: { evaluate: mockEvaluate },
|
51
|
-
source: {
|
52
|
-
create: mockCreateSource,
|
53
|
-
},
|
54
|
-
field: {
|
55
|
-
createFields: mockCreateField,
|
56
|
-
},
|
57
|
-
}));
|
58
|
-
};
|
59
|
-
const doMockFieldAnalyser = () => {
|
60
|
-
mockedFieldAnalyser.mockImplementation(() => ({
|
61
|
-
add: mockAnalyserAdd,
|
62
|
-
report: mockAnalyserReport,
|
63
|
-
}));
|
64
|
-
};
|
65
|
-
const mockSuccessAxiosCalls = () => {
|
66
|
-
mockAxios.post.mockImplementation((url) => {
|
67
|
-
if (url.match(/chunk/)) {
|
68
|
-
return Promise.resolve(doAxiosMockFileContainerResponse());
|
69
|
-
}
|
70
|
-
if (url.match(/stream\/open/)) {
|
71
|
-
return Promise.resolve(doAxiosMockOpenStream());
|
72
|
-
}
|
73
|
-
return Promise.resolve({ data: {} });
|
74
|
-
});
|
75
|
-
};
|
76
|
-
const mockFailedChunkAxiosCalls = (err) => {
|
77
|
-
mockAxios.post.mockImplementation((url) => {
|
78
|
-
if (url.match(/chunk/)) {
|
79
|
-
return Promise.reject({ message: err });
|
80
|
-
}
|
81
|
-
if (url.match(/stream\/open/)) {
|
82
|
-
return Promise.resolve(doAxiosMockOpenStream());
|
83
|
-
}
|
84
|
-
return Promise.resolve({ data: {} });
|
85
|
-
});
|
86
|
-
};
|
87
|
-
const basicStreamExpectations = () => {
|
88
|
-
it('should open a stream', async () => {
|
89
|
-
expect(mockAxios.post).toHaveBeenNthCalledWith(1, 'https://api.cloud.coveo.com/push/v1/organizations/the_org/sources/the_id/stream/open', {}, expectedDocumentsHeaders);
|
90
|
-
});
|
91
|
-
it('should request a stream chunk', async () => {
|
92
|
-
expect(mockAxios.post).toHaveBeenNthCalledWith(2, 'https://api.cloud.coveo.com/push/v1/organizations/the_org/sources/the_id/stream/the_stream_id/chunk', {}, expectedDocumentsHeaders);
|
93
|
-
});
|
94
|
-
it('should close a stream', async () => {
|
95
|
-
expect(mockAxios.post).toHaveBeenLastCalledWith('https://api.cloud.coveo.com/push/v1/organizations/the_org/sources/the_id/stream/the_stream_id/close', {}, expectedDocumentsHeaders);
|
96
|
-
});
|
97
|
-
};
|
98
|
-
describe('CatalogSource - Stream', () => {
|
99
|
-
let source;
|
100
|
-
beforeAll(() => {
|
101
|
-
doMockPlatformClient();
|
102
|
-
doMockFieldAnalyser();
|
103
|
-
doMockAxiosPut();
|
104
|
-
});
|
105
|
-
beforeEach(() => {
|
106
|
-
mockEvaluate.mockResolvedValue({ approved: true });
|
107
|
-
source = new catalog_1.CatalogSource('the_key', 'the_org');
|
108
|
-
});
|
109
|
-
describe('when streaming data from a batch', () => {
|
110
|
-
beforeEach(async () => {
|
111
|
-
mockSuccessAxiosCalls();
|
112
|
-
await source.batchStreamDocuments('the_id', {
|
113
|
-
addOrUpdate: [new __1.DocumentBuilder('uri', 'title')],
|
114
|
-
delete: [],
|
115
|
-
}, { createFields: false });
|
116
|
-
});
|
117
|
-
afterAll(() => {
|
118
|
-
mockAxios.post.mockReset();
|
119
|
-
});
|
120
|
-
basicStreamExpectations();
|
121
|
-
});
|
122
|
-
describe('when streaming data from a file', () => {
|
123
|
-
beforeEach(async () => {
|
124
|
-
mockSuccessAxiosCalls();
|
125
|
-
await source
|
126
|
-
.batchStreamDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'mixdocuments')], { createFields: false })
|
127
|
-
.batch();
|
128
|
-
});
|
129
|
-
afterAll(() => {
|
130
|
-
mockAxios.post.mockReset();
|
131
|
-
});
|
132
|
-
basicStreamExpectations();
|
133
|
-
it('should upload content to stream chunk', async () => {
|
134
|
-
expect(mockAxios.put).toHaveBeenCalledWith('https://fake.upload.url/', expect.objectContaining({
|
135
|
-
addOrUpdate: expect.arrayContaining([
|
136
|
-
expect.objectContaining({
|
137
|
-
documentId: 'https://www.themoviedb.org/movie/268',
|
138
|
-
}),
|
139
|
-
expect.objectContaining({
|
140
|
-
documentId: 'https://www.themoviedb.org/movie/999',
|
141
|
-
}),
|
142
|
-
]),
|
143
|
-
delete: expect.arrayContaining([]),
|
144
|
-
}), {
|
145
|
-
headers: {
|
146
|
-
foo: 'bar',
|
147
|
-
},
|
148
|
-
maxBodyLength: 256e6,
|
149
|
-
});
|
150
|
-
});
|
151
|
-
});
|
152
|
-
describe('when streaming large amount of data', () => {
|
153
|
-
beforeAll(() => {
|
154
|
-
(0, fs_1.mkdirSync)((0, path_1.join)(pathToStub, 'batman_temp_dir'));
|
155
|
-
(0, fs_1.writeFileSync)((0, path_1.join)(pathToStub, 'batman_temp_dir', 'mucho_batmans.json'), JSON.stringify((0, documentGenerator_1.generateBatmans)(10e3), null, 2) // Enough batmans so they can be sent in multiple chunks
|
156
|
-
);
|
157
|
-
});
|
158
|
-
beforeEach(async () => {
|
159
|
-
mockSuccessAxiosCalls();
|
160
|
-
await source
|
161
|
-
.batchStreamDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'batman_temp_dir', 'mucho_batmans.json')], { createFields: false })
|
162
|
-
.batch();
|
163
|
-
});
|
164
|
-
afterAll(() => {
|
165
|
-
(0, fs_1.rmSync)((0, path_1.join)(pathToStub, 'batman_temp_dir'), {
|
166
|
-
recursive: true,
|
167
|
-
});
|
168
|
-
mockAxios.post.mockReset();
|
169
|
-
});
|
170
|
-
basicStreamExpectations();
|
171
|
-
});
|
172
|
-
describe('when streaming data from local files', () => {
|
173
|
-
beforeEach(async () => {
|
174
|
-
mockSuccessAxiosCalls();
|
175
|
-
});
|
176
|
-
afterAll(() => {
|
177
|
-
mockAxios.post.mockReset();
|
178
|
-
});
|
179
|
-
describe('API call expectations', () => {
|
180
|
-
beforeEach(async () => {
|
181
|
-
mockSuccessAxiosCalls();
|
182
|
-
await source
|
183
|
-
.batchStreamDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'mixdocuments')], { createFields: false })
|
184
|
-
.batch();
|
185
|
-
});
|
186
|
-
basicStreamExpectations();
|
187
|
-
it('should upload documents from local file', async () => {
|
188
|
-
expect(mockAxios.put).toHaveBeenCalledWith('https://fake.upload.url/', expect.objectContaining({
|
189
|
-
addOrUpdate: expect.arrayContaining([
|
190
|
-
expect.objectContaining({
|
191
|
-
documentId: 'https://www.themoviedb.org/movie/268',
|
192
|
-
}),
|
193
|
-
expect.objectContaining({
|
194
|
-
documentId: 'https://www.themoviedb.org/movie/999',
|
195
|
-
}),
|
196
|
-
]),
|
197
|
-
delete: expect.arrayContaining([]),
|
198
|
-
}), {
|
199
|
-
headers: {
|
200
|
-
foo: 'bar',
|
201
|
-
},
|
202
|
-
maxBodyLength: 256e6,
|
203
|
-
});
|
204
|
-
});
|
205
|
-
});
|
206
|
-
it('should call the callback without error when uploading documents', async () => {
|
207
|
-
await source
|
208
|
-
.batchStreamDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'mixdocuments')], { createFields: false })
|
209
|
-
.onBatchError(mockedErrorCallback)
|
210
|
-
.batch();
|
211
|
-
expect(mockedErrorCallback).not.toHaveBeenCalled();
|
212
|
-
});
|
213
|
-
it('should only push JSON files', async () => {
|
214
|
-
await source
|
215
|
-
.batchStreamDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'mixdocuments')], { createFields: false })
|
216
|
-
.onBatchUpload(mockedSuccessCallback)
|
217
|
-
.batch();
|
218
|
-
expect(mockedSuccessCallback).toHaveBeenCalledWith(expect.objectContaining({ files: ['valid.json'] }));
|
219
|
-
});
|
220
|
-
it('should call the errorCallback on a failure from the API', async () => {
|
221
|
-
mockAxios.post.mockReset();
|
222
|
-
mockFailedChunkAxiosCalls('Error Message');
|
223
|
-
await source
|
224
|
-
.batchStreamDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'mixdocuments')], { createFields: false })
|
225
|
-
.onBatchError(mockedErrorCallback)
|
226
|
-
.batch();
|
227
|
-
expect(mockedErrorCallback).toHaveBeenCalledWith({
|
228
|
-
message: 'Error Message',
|
229
|
-
}, expect.anything());
|
230
|
-
});
|
231
|
-
it('should throw an error if the path is invalid', () => {
|
232
|
-
expect(() => source
|
233
|
-
.batchStreamDocumentsFromFiles('the_id', ['path/to/invalid/document'], { createFields: false })
|
234
|
-
.batch()).rejects.toThrow("no such file or directory, lstat 'path/to/invalid/document'");
|
235
|
-
});
|
236
|
-
});
|
237
|
-
});
|
238
|
-
//# sourceMappingURL=catalog.stream.spec.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"catalog.stream.spec.js","sourceRoot":"","sources":["../../src/source/catalog.stream.spec.ts"],"names":[],"mappings":"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"}
|