@coveo/push-api-client 1.6.9 → 2.1.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/README.md +2 -2
- package/dist/definitions/environment.d.ts +3 -3
- package/dist/definitions/errors/privilegeError.d.ts +6 -0
- package/dist/definitions/fieldAnalyser/fieldAnalyser.d.ts +2 -10
- package/dist/definitions/fieldAnalyser/{utils.d.ts → fieldUtils.d.ts} +0 -0
- package/dist/definitions/fieldAnalyser/{utils.spec.d.ts → fieldsUtils.spec.d.ts} +0 -0
- package/dist/definitions/fieldAnalyser/inconsistencies.d.ts +1 -1
- package/dist/definitions/fieldAnalyser/typeUtils.d.ts +3 -0
- package/dist/definitions/{source.spec.d.ts → fieldAnalyser/typeUtils.spec.d.ts} +0 -0
- package/dist/definitions/help/axiosUtils.d.ts +2 -0
- package/dist/definitions/help/fileConsumer.d.ts +26 -0
- package/dist/definitions/help/fileConsumer.spec.d.ts +1 -0
- package/dist/definitions/help/fileContainer.d.ts +9 -0
- package/dist/definitions/help/fileContainer.spec.d.ts +1 -0
- package/dist/definitions/help/urlUtils.d.ts +27 -0
- package/dist/definitions/index.d.ts +6 -2
- package/dist/definitions/interfaces.d.ts +39 -0
- package/dist/definitions/source/batchUploadDocumentsFromFile.d.ts +11 -0
- package/dist/definitions/source/catalog.d.ts +69 -0
- package/dist/definitions/source/catalog.spec.d.ts +1 -0
- package/dist/definitions/source/catalog.stream.spec.d.ts +1 -0
- package/dist/definitions/source/documentUploader.d.ts +5 -0
- package/dist/definitions/{source.d.ts → source/push.d.ts} +35 -77
- package/dist/definitions/source/push.spec.d.ts +1 -0
- package/dist/definitions/source/securityIdenty.d.ts +42 -0
- package/dist/definitions/source/source.d.ts +5 -0
- package/dist/definitions/uploadStrategy/fileContainerStrategy.d.ts +23 -0
- package/dist/definitions/uploadStrategy/index.d.ts +3 -0
- package/dist/definitions/uploadStrategy/strategy.d.ts +16 -0
- package/dist/definitions/uploadStrategy/streamChunkStrategy.d.ts +27 -0
- package/dist/definitions/validation/preconditions/apiKeyPrivilege.d.ts +3 -0
- package/dist/definitions/validation/preconditions/apiKeyPrivilege.spec.d.ts +1 -0
- package/dist/definitions/validation/preconditions/platformPrivilege.d.ts +7 -0
- package/dist/docs/assets/search.js +1 -1
- package/dist/docs/classes/AnySecurityIdentityBuilder.html +3 -3
- package/dist/docs/classes/DocumentBuilder.html +17 -17
- package/dist/docs/classes/FieldAnalyser.html +3 -3
- package/dist/docs/classes/GroupSecurityIdentityBuilder.html +3 -3
- package/dist/docs/classes/PushSource.html +43 -0
- package/dist/docs/classes/UserSecurityIdentityBuilder.html +3 -3
- package/dist/docs/classes/VirtualGroupSecurityIdentityBuilder.html +3 -3
- package/dist/docs/enums/PlatformEnvironment.html +1 -1
- package/dist/docs/enums/Region.html +1 -1
- package/dist/docs/enums/SourceVisibility.html +1 -1
- package/dist/docs/index.html +2 -2
- package/dist/docs/interfaces/BatchUpdateDocuments.html +1 -1
- package/dist/docs/interfaces/Document.html +14 -14
- package/dist/docs/interfaces/SecurityIdentity.html +4 -4
- package/dist/docs/interfaces/SecurityIdentityBuilder.html +1 -1
- package/dist/docs/interfaces/UploadBatchCallbackData.html +1 -1
- package/dist/docs/modules.html +3 -2
- package/dist/environment.js.map +1 -1
- package/dist/errors/privilegeError.js +13 -0
- package/dist/errors/privilegeError.js.map +1 -0
- package/dist/fieldAnalyser/fieldAnalyser.js +24 -62
- package/dist/fieldAnalyser/fieldAnalyser.js.map +1 -1
- package/dist/fieldAnalyser/fieldAnalyser.spec.js +28 -22
- package/dist/fieldAnalyser/fieldAnalyser.spec.js.map +1 -1
- package/dist/fieldAnalyser/{utils.js → fieldUtils.js} +5 -1
- package/dist/fieldAnalyser/fieldUtils.js.map +1 -0
- package/dist/fieldAnalyser/{utils.spec.js → fieldsUtils.spec.js} +7 -4
- package/dist/fieldAnalyser/fieldsUtils.spec.js.map +1 -0
- package/dist/fieldAnalyser/inconsistencies.js.map +1 -1
- package/dist/fieldAnalyser/typeUtils.js +39 -0
- package/dist/fieldAnalyser/typeUtils.js.map +1 -0
- package/dist/fieldAnalyser/typeUtils.spec.js +48 -0
- package/dist/fieldAnalyser/typeUtils.spec.js.map +1 -0
- package/dist/help/axiosUtils.js +12 -0
- package/dist/help/axiosUtils.js.map +1 -0
- package/dist/help/fileConsumer.js +100 -0
- package/dist/help/fileConsumer.js.map +1 -0
- package/dist/help/fileConsumer.spec.js +75 -0
- package/dist/help/fileConsumer.spec.js.map +1 -0
- package/dist/help/fileContainer.js +20 -0
- package/dist/help/fileContainer.js.map +1 -0
- package/dist/help/fileContainer.spec.js +34 -0
- package/dist/help/fileContainer.spec.js.map +1 -0
- package/dist/help/urlUtils.js +43 -0
- package/dist/help/urlUtils.js.map +1 -0
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/interfaces.js +3 -0
- package/dist/interfaces.js.map +1 -0
- package/dist/localtest.js +2 -2
- package/dist/localtest.js.map +1 -1
- package/dist/source/batchUploadDocumentsFromFile.js +50 -0
- package/dist/source/batchUploadDocumentsFromFile.js.map +1 -0
- package/dist/source/catalog.js +115 -0
- package/dist/source/catalog.js.map +1 -0
- package/dist/source/catalog.spec.js +239 -0
- package/dist/source/catalog.spec.js.map +1 -0
- package/dist/source/catalog.stream.spec.js +189 -0
- package/dist/source/catalog.stream.spec.js.map +1 -0
- package/dist/source/documentUploader.js +23 -0
- package/dist/source/documentUploader.js.map +1 -0
- package/dist/source/push.js +199 -0
- package/dist/source/push.js.map +1 -0
- package/dist/{source.spec.js → source/push.spec.js} +44 -27
- package/dist/source/push.spec.js.map +1 -0
- package/dist/source/securityIdenty.js +59 -0
- package/dist/source/securityIdenty.js.map +1 -0
- package/dist/source/source.js +9 -0
- package/dist/source/source.js.map +1 -0
- package/dist/uploadStrategy/fileContainerStrategy.js +34 -0
- package/dist/uploadStrategy/fileContainerStrategy.js.map +1 -0
- package/dist/uploadStrategy/index.js +7 -0
- package/dist/uploadStrategy/index.js.map +1 -0
- package/dist/uploadStrategy/strategy.js +3 -0
- package/dist/uploadStrategy/strategy.js.map +1 -0
- package/dist/uploadStrategy/streamChunkStrategy.js +51 -0
- package/dist/uploadStrategy/streamChunkStrategy.js.map +1 -0
- package/dist/validation/preconditions/apiKeyPrivilege.js +21 -0
- package/dist/validation/preconditions/apiKeyPrivilege.js.map +1 -0
- package/dist/validation/preconditions/apiKeyPrivilege.spec.js +70 -0
- package/dist/validation/preconditions/apiKeyPrivilege.spec.js.map +1 -0
- package/dist/validation/preconditions/platformPrivilege.js +35 -0
- package/dist/validation/preconditions/platformPrivilege.js.map +1 -0
- package/package.json +1 -1
- package/dist/docs/classes/Source.html +0 -45
- package/dist/docs/interfaces/BatchUpdateDocumentsFromFiles.html +0 -7
- package/dist/fieldAnalyser/utils.js.map +0 -1
- package/dist/fieldAnalyser/utils.spec.js.map +0 -1
- package/dist/source.js +0 -322
- package/dist/source.js.map +0 -1
- package/dist/source.spec.js.map +0 -1
@@ -0,0 +1,239 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
/* eslint-disable node/no-unpublished-import */
|
4
|
+
jest.mock('@coveord/platform-client');
|
5
|
+
jest.mock('axios');
|
6
|
+
jest.mock('../fieldAnalyser/fieldAnalyser');
|
7
|
+
const platform_client_1 = require("@coveord/platform-client");
|
8
|
+
const documentBuilder_1 = require("../documentBuilder");
|
9
|
+
const axios_1 = require("axios");
|
10
|
+
const path_1 = require("path");
|
11
|
+
const process_1 = require("process");
|
12
|
+
const inconsistencies_1 = require("../fieldAnalyser/inconsistencies");
|
13
|
+
const fieldErrors_1 = require("../errors/fieldErrors");
|
14
|
+
const catalog_1 = require("./catalog");
|
15
|
+
const __1 = require("..");
|
16
|
+
const mockAxios = axios_1.default;
|
17
|
+
const mockedFieldAnalyser = jest.mocked(__1.FieldAnalyser);
|
18
|
+
const mockedPlatformClient = jest.mocked(platform_client_1.default);
|
19
|
+
const mockCreateSource = jest.fn();
|
20
|
+
const mockEvaluate = jest.fn();
|
21
|
+
const mockCreateField = jest.fn();
|
22
|
+
const mockAnalyserAdd = jest.fn();
|
23
|
+
const mockAnalyserReport = jest.fn();
|
24
|
+
const mockedSuccessCallback = jest.fn();
|
25
|
+
const mockedErrorCallback = jest.fn();
|
26
|
+
const pathToStub = (0, path_1.join)((0, process_1.cwd)(), 'src', '__stub__');
|
27
|
+
const expectedDocumentsHeaders = {
|
28
|
+
headers: {
|
29
|
+
Accept: 'application/json',
|
30
|
+
Authorization: 'Bearer the_key',
|
31
|
+
'Content-Type': 'application/json',
|
32
|
+
},
|
33
|
+
};
|
34
|
+
const doAxiosMockFileContainerResponse = () => ({
|
35
|
+
data: {
|
36
|
+
uploadUri: 'https://fake.upload.url',
|
37
|
+
fileId: 'file_id',
|
38
|
+
requiredHeaders: { foo: 'bar' },
|
39
|
+
},
|
40
|
+
});
|
41
|
+
const doAxiosMockPost = () => {
|
42
|
+
mockAxios.post.mockImplementationOnce((url) => {
|
43
|
+
if (url.match(/files/)) {
|
44
|
+
return Promise.resolve(doAxiosMockFileContainerResponse());
|
45
|
+
}
|
46
|
+
return Promise.resolve();
|
47
|
+
});
|
48
|
+
};
|
49
|
+
const doMockPlatformClient = () => {
|
50
|
+
mockedPlatformClient.mockImplementation(() => ({
|
51
|
+
privilegeEvaluator: { evaluate: mockEvaluate },
|
52
|
+
source: {
|
53
|
+
create: mockCreateSource,
|
54
|
+
},
|
55
|
+
field: {
|
56
|
+
createFields: mockCreateField,
|
57
|
+
},
|
58
|
+
}));
|
59
|
+
};
|
60
|
+
const doMockFieldAnalyser = () => {
|
61
|
+
mockedFieldAnalyser.mockImplementation(() => ({
|
62
|
+
add: mockAnalyserAdd,
|
63
|
+
report: mockAnalyserReport,
|
64
|
+
}));
|
65
|
+
};
|
66
|
+
describe('CatalogSource - Push', () => {
|
67
|
+
let source;
|
68
|
+
let batch;
|
69
|
+
beforeAll(() => {
|
70
|
+
doMockPlatformClient();
|
71
|
+
doMockFieldAnalyser();
|
72
|
+
});
|
73
|
+
beforeEach(() => {
|
74
|
+
mockEvaluate.mockResolvedValue({ approved: true });
|
75
|
+
source = new catalog_1.CatalogSource('the_key', 'the_org');
|
76
|
+
batch = {
|
77
|
+
addOrUpdate: [
|
78
|
+
new documentBuilder_1.DocumentBuilder('the_uri_1', 'the_title_1'),
|
79
|
+
new documentBuilder_1.DocumentBuilder('the_uri_2', 'the_title_2'),
|
80
|
+
],
|
81
|
+
delete: [{ documentId: 'the_uri_3', deleteChildren: true }],
|
82
|
+
};
|
83
|
+
});
|
84
|
+
it('should call platform client on creation', () => {
|
85
|
+
source.create('the_name', platform_client_1.SourceVisibility.SHARED);
|
86
|
+
expect(mockCreateSource).toHaveBeenCalledWith({
|
87
|
+
name: 'the_name',
|
88
|
+
streamEnabled: true,
|
89
|
+
sourceType: 'CATALOG',
|
90
|
+
sourceVisibility: 'SHARED',
|
91
|
+
});
|
92
|
+
});
|
93
|
+
describe('when doing batch update', () => {
|
94
|
+
beforeEach(() => {
|
95
|
+
doAxiosMockPost();
|
96
|
+
});
|
97
|
+
it('should create a file container', async () => {
|
98
|
+
await source.batchUpdateDocuments('the_id', batch, {
|
99
|
+
createFields: false,
|
100
|
+
});
|
101
|
+
expect(mockAxios.post).toHaveBeenCalledWith('https://api.cloud.coveo.com/push/v1/organizations/the_org/files', expect.objectContaining({}), expectedDocumentsHeaders);
|
102
|
+
});
|
103
|
+
it('should upload files to container with returned upload uri and required headers ', async () => {
|
104
|
+
await source.batchUpdateDocuments('the_id', batch, {
|
105
|
+
createFields: false,
|
106
|
+
});
|
107
|
+
expect(mockAxios.put).toHaveBeenCalledWith('https://fake.upload.url/', expect.objectContaining({
|
108
|
+
addOrUpdate: expect.arrayContaining([
|
109
|
+
expect.objectContaining({ documentId: 'the_uri_1' }),
|
110
|
+
expect.objectContaining({ documentId: 'the_uri_2' }),
|
111
|
+
]),
|
112
|
+
delete: expect.arrayContaining([
|
113
|
+
expect.objectContaining({ documentId: 'the_uri_3' }),
|
114
|
+
]),
|
115
|
+
}), { headers: { foo: 'bar' } });
|
116
|
+
});
|
117
|
+
it('should push content to source with returned fileId', async () => {
|
118
|
+
await source.batchUpdateDocuments('the_id', batch, {
|
119
|
+
createFields: false,
|
120
|
+
});
|
121
|
+
expect(mockAxios.put).toHaveBeenCalledWith('https://api.cloud.coveo.com/push/v1/organizations/the_org/sources/the_id/stream/update?fileId=file_id', {}, expectedDocumentsHeaders);
|
122
|
+
});
|
123
|
+
});
|
124
|
+
describe('when doing batch update from local files', () => {
|
125
|
+
afterAll(() => {
|
126
|
+
mockAxios.post.mockReset();
|
127
|
+
});
|
128
|
+
beforeEach(() => {
|
129
|
+
doAxiosMockPost();
|
130
|
+
});
|
131
|
+
it('should upload documents from local file', async () => {
|
132
|
+
await source
|
133
|
+
.batchUpdateDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'mixdocuments')], { createFields: false })
|
134
|
+
.batch();
|
135
|
+
expect(mockAxios.put).toHaveBeenCalledWith('https://fake.upload.url/', expect.objectContaining({
|
136
|
+
addOrUpdate: expect.arrayContaining([
|
137
|
+
expect.objectContaining({
|
138
|
+
documentId: 'https://www.themoviedb.org/movie/268',
|
139
|
+
}),
|
140
|
+
expect.objectContaining({
|
141
|
+
documentId: 'https://www.themoviedb.org/movie/999',
|
142
|
+
}),
|
143
|
+
]),
|
144
|
+
delete: expect.arrayContaining([]),
|
145
|
+
}), {
|
146
|
+
headers: {
|
147
|
+
foo: 'bar',
|
148
|
+
},
|
149
|
+
});
|
150
|
+
});
|
151
|
+
it('should throw an error if the path is invalid', () => {
|
152
|
+
expect(() => source
|
153
|
+
.batchUpdateDocumentsFromFiles('the_id', ['path/to/invalid/document'], { createFields: false })
|
154
|
+
.batch()).rejects.toThrow("no such file or directory, lstat 'path/to/invalid/document'");
|
155
|
+
});
|
156
|
+
it('should call the callback without error when uploading documents', async () => {
|
157
|
+
await source
|
158
|
+
.batchUpdateDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'mixdocuments')], { createFields: false })
|
159
|
+
.onBatchError(mockedErrorCallback)
|
160
|
+
.batch();
|
161
|
+
expect(mockedErrorCallback).not.toHaveBeenCalled();
|
162
|
+
});
|
163
|
+
it('should only push JSON files', async () => {
|
164
|
+
await source
|
165
|
+
.batchUpdateDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'mixdocuments')], { createFields: false })
|
166
|
+
.onBatchUpload(mockedSuccessCallback)
|
167
|
+
.batch();
|
168
|
+
expect(mockedSuccessCallback).toHaveBeenCalledWith(expect.objectContaining({ files: ['valid.json'] }));
|
169
|
+
});
|
170
|
+
it('should call the errorCallback on a failure from the API', async () => {
|
171
|
+
mockAxios.post.mockReset();
|
172
|
+
mockAxios.post.mockRejectedValue({ message: 'Error Message' });
|
173
|
+
await source
|
174
|
+
.batchUpdateDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'mixdocuments')], { createFields: false })
|
175
|
+
.onBatchError(mockedErrorCallback)
|
176
|
+
.batch();
|
177
|
+
expect(mockedErrorCallback).toHaveBeenCalledWith({
|
178
|
+
message: 'Error Message',
|
179
|
+
}, expect.anything());
|
180
|
+
});
|
181
|
+
});
|
182
|
+
describe('when enabling auto field creation', () => {
|
183
|
+
beforeEach(() => {
|
184
|
+
doAxiosMockPost();
|
185
|
+
});
|
186
|
+
describe('when there are no inconsistencies', () => {
|
187
|
+
beforeEach(() => {
|
188
|
+
const inconsistencies = new inconsistencies_1.Inconsistencies();
|
189
|
+
mockAnalyserReport.mockReturnValueOnce({ fields: [], inconsistencies });
|
190
|
+
});
|
191
|
+
it('should analyse document builder batch', async () => {
|
192
|
+
await source.batchUpdateDocuments('the_id', batch);
|
193
|
+
expect(mockAnalyserAdd).toHaveBeenCalledWith(batch.addOrUpdate);
|
194
|
+
});
|
195
|
+
});
|
196
|
+
describe('when document batches contain type inconsistencies', () => {
|
197
|
+
beforeEach(() => {
|
198
|
+
const inconsistencies = new inconsistencies_1.Inconsistencies().add('foo', [
|
199
|
+
platform_client_1.FieldTypes.STRING,
|
200
|
+
platform_client_1.FieldTypes.DOUBLE,
|
201
|
+
]);
|
202
|
+
mockAnalyserReport.mockReturnValueOnce({ fields: [], inconsistencies });
|
203
|
+
});
|
204
|
+
it('should throw', () => {
|
205
|
+
expect(() => source.batchUpdateDocuments('the_id', batch)).rejects.toThrow(fieldErrors_1.FieldTypeInconsistencyError);
|
206
|
+
});
|
207
|
+
});
|
208
|
+
describe('when document batches contain missing fields', () => {
|
209
|
+
beforeEach(() => {
|
210
|
+
const inconsistencies = new inconsistencies_1.Inconsistencies();
|
211
|
+
mockAnalyserReport.mockReturnValueOnce({
|
212
|
+
fields: [
|
213
|
+
{ name: 'stringfield', type: platform_client_1.FieldTypes.STRING },
|
214
|
+
{ name: 'numericalfield', type: platform_client_1.FieldTypes.DOUBLE },
|
215
|
+
],
|
216
|
+
inconsistencies,
|
217
|
+
});
|
218
|
+
});
|
219
|
+
it('should create fields', async () => {
|
220
|
+
await source.batchUpdateDocuments('the_id', batch);
|
221
|
+
expect(mockCreateField).toHaveBeenCalledWith([
|
222
|
+
{ name: 'stringfield', type: platform_client_1.FieldTypes.STRING },
|
223
|
+
{ name: 'numericalfield', type: platform_client_1.FieldTypes.DOUBLE },
|
224
|
+
]);
|
225
|
+
});
|
226
|
+
});
|
227
|
+
describe('when document batches do not contain missing fields', () => {
|
228
|
+
beforeEach(() => {
|
229
|
+
const inconsistencies = new inconsistencies_1.Inconsistencies();
|
230
|
+
mockAnalyserReport.mockReturnValueOnce({ fields: [], inconsistencies });
|
231
|
+
});
|
232
|
+
it('should not create fields', async () => {
|
233
|
+
source.batchUpdateDocuments('the_id', batch);
|
234
|
+
expect(mockCreateField).not.toHaveBeenCalled();
|
235
|
+
});
|
236
|
+
});
|
237
|
+
});
|
238
|
+
});
|
239
|
+
//# sourceMappingURL=catalog.spec.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"catalog.spec.js","sourceRoot":"","sources":["../../src/source/catalog.spec.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,189 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
/* eslint-disable node/no-unpublished-import */
|
4
|
+
jest.mock('@coveord/platform-client');
|
5
|
+
jest.mock('axios');
|
6
|
+
jest.mock('../fieldAnalyser/fieldAnalyser');
|
7
|
+
const platform_client_1 = require("@coveord/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 mockAxios = axios_1.default;
|
14
|
+
const mockedFieldAnalyser = jest.mocked(__1.FieldAnalyser);
|
15
|
+
const mockedPlatformClient = jest.mocked(platform_client_1.default);
|
16
|
+
const mockCreateSource = jest.fn();
|
17
|
+
const mockCreateField = jest.fn();
|
18
|
+
const mockEvaluate = jest.fn();
|
19
|
+
const mockAnalyserAdd = jest.fn();
|
20
|
+
const mockAnalyserReport = jest.fn();
|
21
|
+
const mockedSuccessCallback = jest.fn();
|
22
|
+
const mockedErrorCallback = jest.fn();
|
23
|
+
const pathToStub = (0, path_1.join)((0, process_1.cwd)(), 'src', '__stub__');
|
24
|
+
const expectedDocumentsHeaders = {
|
25
|
+
headers: {
|
26
|
+
Accept: 'application/json',
|
27
|
+
Authorization: 'Bearer the_key',
|
28
|
+
'Content-Type': 'application/json',
|
29
|
+
},
|
30
|
+
};
|
31
|
+
const doAxiosMockFileContainerResponse = () => ({
|
32
|
+
data: {
|
33
|
+
uploadUri: 'https://fake.upload.url',
|
34
|
+
fileId: 'file_id',
|
35
|
+
requiredHeaders: { foo: 'bar' },
|
36
|
+
},
|
37
|
+
});
|
38
|
+
const doAxiosMockOpenStream = () => ({
|
39
|
+
data: {
|
40
|
+
streamId: 'the_stream_id',
|
41
|
+
},
|
42
|
+
});
|
43
|
+
const doMockPlatformClient = () => {
|
44
|
+
mockedPlatformClient.mockImplementation(() => ({
|
45
|
+
privilegeEvaluator: { evaluate: mockEvaluate },
|
46
|
+
source: {
|
47
|
+
create: mockCreateSource,
|
48
|
+
},
|
49
|
+
field: {
|
50
|
+
createFields: mockCreateField,
|
51
|
+
},
|
52
|
+
}));
|
53
|
+
};
|
54
|
+
const doMockFieldAnalyser = () => {
|
55
|
+
mockedFieldAnalyser.mockImplementation(() => ({
|
56
|
+
add: mockAnalyserAdd,
|
57
|
+
report: mockAnalyserReport,
|
58
|
+
}));
|
59
|
+
};
|
60
|
+
const mockAxiosForStreamCalls = () => {
|
61
|
+
mockAxios.post.mockImplementation((url) => {
|
62
|
+
if (url.match(/chunk/)) {
|
63
|
+
return Promise.resolve(doAxiosMockFileContainerResponse());
|
64
|
+
}
|
65
|
+
if (url.match(/stream\/open/)) {
|
66
|
+
return Promise.resolve(doAxiosMockOpenStream());
|
67
|
+
}
|
68
|
+
return Promise.resolve({ data: {} });
|
69
|
+
});
|
70
|
+
};
|
71
|
+
const basicStreamExpectations = () => {
|
72
|
+
it('should open a stream', async () => {
|
73
|
+
expect(mockAxios.post).toHaveReturnedTimes(3);
|
74
|
+
});
|
75
|
+
it('should open a stream', async () => {
|
76
|
+
expect(mockAxios.post).toHaveBeenNthCalledWith(1, 'https://api.cloud.coveo.com/push/v1/organizations/the_org/sources/the_id/stream/open', {}, expectedDocumentsHeaders);
|
77
|
+
});
|
78
|
+
it('should request a stream chunk', async () => {
|
79
|
+
expect(mockAxios.post).toHaveBeenNthCalledWith(2, 'https://api.cloud.coveo.com/push/v1/organizations/the_org/sources/the_id/stream/the_stream_id/chunk', {}, expectedDocumentsHeaders);
|
80
|
+
});
|
81
|
+
it('should close a stream', async () => {
|
82
|
+
expect(mockAxios.post).toHaveBeenNthCalledWith(3, 'https://api.cloud.coveo.com/push/v1/organizations/the_org/sources/the_id/stream/the_stream_id/close', {}, expectedDocumentsHeaders);
|
83
|
+
});
|
84
|
+
};
|
85
|
+
describe('CatalogSource - Stream', () => {
|
86
|
+
let source;
|
87
|
+
beforeAll(() => {
|
88
|
+
doMockPlatformClient();
|
89
|
+
doMockFieldAnalyser();
|
90
|
+
});
|
91
|
+
beforeEach(() => {
|
92
|
+
mockEvaluate.mockResolvedValue({ approved: true });
|
93
|
+
source = new catalog_1.CatalogSource('the_key', 'the_org');
|
94
|
+
});
|
95
|
+
describe('when streaming data from a batch', () => {
|
96
|
+
beforeEach(async () => {
|
97
|
+
mockAxiosForStreamCalls();
|
98
|
+
await source
|
99
|
+
.batchStreamDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'mixdocuments')], { createFields: false })
|
100
|
+
.batch();
|
101
|
+
});
|
102
|
+
afterAll(() => {
|
103
|
+
mockAxios.post.mockReset();
|
104
|
+
});
|
105
|
+
basicStreamExpectations();
|
106
|
+
it('should upload content to stream chunk', async () => {
|
107
|
+
expect(mockAxios.put).toHaveBeenCalledWith('https://fake.upload.url/', expect.objectContaining({
|
108
|
+
addOrUpdate: expect.arrayContaining([
|
109
|
+
expect.objectContaining({
|
110
|
+
documentId: 'https://www.themoviedb.org/movie/268',
|
111
|
+
}),
|
112
|
+
expect.objectContaining({
|
113
|
+
documentId: 'https://www.themoviedb.org/movie/999',
|
114
|
+
}),
|
115
|
+
]),
|
116
|
+
delete: expect.arrayContaining([]),
|
117
|
+
}), {
|
118
|
+
headers: {
|
119
|
+
foo: 'bar',
|
120
|
+
},
|
121
|
+
});
|
122
|
+
});
|
123
|
+
});
|
124
|
+
describe('when streaming data from local files', () => {
|
125
|
+
beforeEach(async () => {
|
126
|
+
mockAxiosForStreamCalls();
|
127
|
+
});
|
128
|
+
afterAll(() => {
|
129
|
+
mockAxios.post.mockReset();
|
130
|
+
});
|
131
|
+
describe('API call expectations', () => {
|
132
|
+
beforeEach(async () => {
|
133
|
+
mockAxiosForStreamCalls();
|
134
|
+
await source
|
135
|
+
.batchStreamDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'mixdocuments')], { createFields: false })
|
136
|
+
.batch();
|
137
|
+
});
|
138
|
+
basicStreamExpectations();
|
139
|
+
it('should upload documents from local file', async () => {
|
140
|
+
expect(mockAxios.put).toHaveBeenCalledWith('https://fake.upload.url/', expect.objectContaining({
|
141
|
+
addOrUpdate: expect.arrayContaining([
|
142
|
+
expect.objectContaining({
|
143
|
+
documentId: 'https://www.themoviedb.org/movie/268',
|
144
|
+
}),
|
145
|
+
expect.objectContaining({
|
146
|
+
documentId: 'https://www.themoviedb.org/movie/999',
|
147
|
+
}),
|
148
|
+
]),
|
149
|
+
delete: expect.arrayContaining([]),
|
150
|
+
}), {
|
151
|
+
headers: {
|
152
|
+
foo: 'bar',
|
153
|
+
},
|
154
|
+
});
|
155
|
+
});
|
156
|
+
});
|
157
|
+
it('should call the callback without error when uploading documents', async () => {
|
158
|
+
await source
|
159
|
+
.batchStreamDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'mixdocuments')], { createFields: false })
|
160
|
+
.onBatchError(mockedErrorCallback)
|
161
|
+
.batch();
|
162
|
+
expect(mockedErrorCallback).not.toHaveBeenCalled();
|
163
|
+
});
|
164
|
+
it('should only push JSON files', async () => {
|
165
|
+
await source
|
166
|
+
.batchStreamDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'mixdocuments')], { createFields: false })
|
167
|
+
.onBatchUpload(mockedSuccessCallback)
|
168
|
+
.batch();
|
169
|
+
expect(mockedSuccessCallback).toHaveBeenCalledWith(expect.objectContaining({ files: ['valid.json'] }));
|
170
|
+
});
|
171
|
+
it('should call the errorCallback on a failure from the API', async () => {
|
172
|
+
mockAxios.post.mockReset();
|
173
|
+
mockAxios.post.mockRejectedValue({ message: 'Error Message' });
|
174
|
+
await source
|
175
|
+
.batchStreamDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'mixdocuments')], { createFields: false })
|
176
|
+
.onBatchError(mockedErrorCallback)
|
177
|
+
.batch();
|
178
|
+
expect(mockedErrorCallback).toHaveBeenCalledWith({
|
179
|
+
message: 'Error Message',
|
180
|
+
}, expect.anything());
|
181
|
+
});
|
182
|
+
it('should throw an error if the path is invalid', () => {
|
183
|
+
expect(() => source
|
184
|
+
.batchStreamDocumentsFromFiles('the_id', ['path/to/invalid/document'], { createFields: false })
|
185
|
+
.batch()).rejects.toThrow("no such file or directory, lstat 'path/to/invalid/document'");
|
186
|
+
});
|
187
|
+
});
|
188
|
+
});
|
189
|
+
//# sourceMappingURL=catalog.stream.spec.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"catalog.stream.spec.js","sourceRoot":"","sources":["../../src/source/catalog.stream.spec.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.uploadBatch = void 0;
|
4
|
+
const __1 = require("..");
|
5
|
+
const fieldErrors_1 = require("../errors/fieldErrors");
|
6
|
+
const fieldUtils_1 = require("../fieldAnalyser/fieldUtils");
|
7
|
+
async function uploadBatch(platformClient, strategy, batch, createFields = true) {
|
8
|
+
var _a;
|
9
|
+
if (createFields) {
|
10
|
+
const analyser = new __1.FieldAnalyser(platformClient);
|
11
|
+
await analyser.add(batch.addOrUpdate);
|
12
|
+
const { fields, inconsistencies } = analyser.report();
|
13
|
+
if (inconsistencies.size > 0) {
|
14
|
+
throw new fieldErrors_1.FieldTypeInconsistencyError(inconsistencies);
|
15
|
+
}
|
16
|
+
await (0, fieldUtils_1.createFields)(platformClient, fields);
|
17
|
+
}
|
18
|
+
const res = await strategy.upload(batch);
|
19
|
+
await ((_a = strategy.postUpload) === null || _a === void 0 ? void 0 : _a.call(strategy));
|
20
|
+
return res;
|
21
|
+
}
|
22
|
+
exports.uploadBatch = uploadBatch;
|
23
|
+
//# sourceMappingURL=documentUploader.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"documentUploader.js","sourceRoot":"","sources":["../../src/source/documentUploader.ts"],"names":[],"mappings":";;;AAEA,0BAAiC;AACjC,uDAAkE;AAClE,4DAAmE;AAI5D,KAAK,UAAU,WAAW,CAC/B,cAA8B,EAC9B,QAAwB,EACxB,KAA2B,EAC3B,YAAY,GAAG,IAAI;;IAEnB,IAAI,YAAY,EAAE;QAChB,MAAM,QAAQ,GAAG,IAAI,iBAAa,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,EAAC,MAAM,EAAE,eAAe,EAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QAEpD,IAAI,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE;YAC5B,MAAM,IAAI,yCAA2B,CAAC,eAAe,CAAC,CAAC;SACxD;QAED,MAAM,IAAA,yBAAM,EAAC,cAAc,EAAE,MAAM,CAAC,CAAC;KACtC;IACD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,CAAA,MAAA,QAAQ,CAAC,UAAU,wDAAI,CAAA,CAAC;IAE9B,OAAO,GAAG,CAAC;AACb,CAAC;AArBD,kCAqBC"}
|