@devrev/airsync-sdk 2.0.0-beta.2 → 2.0.0-beta.4
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 +5 -11
- package/dist/attachments-streaming/attachments-streaming-pool.d.ts +1 -8
- package/dist/attachments-streaming/attachments-streaming-pool.d.ts.map +1 -1
- package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts +4 -3
- package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts.map +1 -1
- package/dist/attachments-streaming/attachments-streaming-pool.js +11 -39
- package/dist/common/constants.d.ts +1 -0
- package/dist/common/constants.d.ts.map +1 -1
- package/dist/common/constants.js +2 -1
- package/dist/common/helpers.d.ts +0 -14
- package/dist/common/helpers.d.ts.map +1 -1
- package/dist/common/helpers.js +0 -36
- package/dist/http/{axios-client-internal.d.ts → client.d.ts} +1 -1
- package/dist/http/client.d.ts.map +1 -0
- package/dist/index.d.ts +25 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +51 -30
- package/dist/logger/logger.d.ts +14 -0
- package/dist/logger/logger.d.ts.map +1 -1
- package/dist/logger/logger.js +55 -8
- package/dist/mappers/mappers.d.ts +9 -10
- package/dist/mappers/mappers.d.ts.map +1 -1
- package/dist/mappers/{mappers.interface.d.ts → mappers.interfaces.d.ts} +5 -5
- package/dist/mappers/mappers.interfaces.d.ts.map +1 -0
- package/dist/mappers/{mappers.interface.js → mappers.interfaces.js} +3 -3
- package/dist/mappers/mappers.js +13 -9
- package/dist/multithreading/adapters/base-adapter.d.ts +71 -0
- package/dist/multithreading/adapters/base-adapter.d.ts.map +1 -0
- package/dist/multithreading/adapters/base-adapter.js +138 -0
- package/dist/multithreading/adapters/extraction-adapter.d.ts +57 -0
- package/dist/multithreading/adapters/extraction-adapter.d.ts.map +1 -0
- package/dist/multithreading/adapters/extraction-adapter.js +323 -0
- package/dist/multithreading/adapters/loading-adapter.d.ts +44 -0
- package/dist/multithreading/adapters/loading-adapter.d.ts.map +1 -0
- package/dist/multithreading/{worker-adapter/worker-adapter.helpers.d.ts → adapters/loading-adapter.helpers.d.ts} +1 -1
- package/dist/multithreading/adapters/loading-adapter.helpers.d.ts.map +1 -0
- package/dist/multithreading/adapters/loading-adapter.js +431 -0
- package/dist/{common/control-protocol.d.ts → multithreading/emit.d.ts} +1 -1
- package/dist/multithreading/emit.d.ts.map +1 -0
- package/dist/{common/control-protocol.js → multithreading/emit.js} +3 -3
- package/dist/multithreading/process-task.d.ts +16 -1
- package/dist/multithreading/process-task.d.ts.map +1 -1
- package/dist/multithreading/process-task.js +115 -50
- package/dist/multithreading/spawn/spawn.helpers.d.ts +23 -3
- package/dist/multithreading/spawn/spawn.helpers.d.ts.map +1 -1
- package/dist/multithreading/spawn/spawn.helpers.js +152 -2
- package/dist/multithreading/spawn/spawn.js +7 -7
- package/dist/multithreading/worker.js +1 -2
- package/dist/repo/repo.js +2 -2
- package/dist/state/base-state.d.ts +75 -0
- package/dist/state/base-state.d.ts.map +1 -0
- package/dist/state/base-state.js +261 -0
- package/dist/state/extraction-state.d.ts +29 -0
- package/dist/state/extraction-state.d.ts.map +1 -0
- package/dist/state/extraction-state.js +122 -0
- package/dist/state/install-initial-domain-mapping.d.ts.map +1 -0
- package/dist/{common → state}/install-initial-domain-mapping.js +4 -4
- package/dist/state/loading-state.d.ts +18 -0
- package/dist/state/loading-state.d.ts.map +1 -0
- package/dist/state/loading-state.js +39 -0
- package/dist/state/state.d.ts +3 -35
- package/dist/state/state.d.ts.map +1 -1
- package/dist/state/state.interfaces.d.ts +20 -3
- package/dist/state/state.interfaces.d.ts.map +1 -1
- package/dist/state/state.interfaces.js +19 -1
- package/dist/state/state.js +9 -263
- package/dist/{common → state}/time-value-resolver.d.ts +4 -5
- package/dist/state/time-value-resolver.d.ts.map +1 -0
- package/dist/{common → state}/time-value-resolver.js +9 -8
- package/dist/{common/test-utils.d.ts → testing/mock-event.d.ts} +1 -2
- package/dist/testing/mock-event.d.ts.map +1 -0
- package/dist/{common/test-utils.js → testing/mock-event.js} +14 -3
- package/dist/{mock-server → testing}/mock-server.d.ts +5 -0
- package/dist/testing/mock-server.d.ts.map +1 -0
- package/dist/testing/mock-server.interfaces.d.ts.map +1 -0
- package/dist/{mock-server → testing}/mock-server.js +6 -1
- package/dist/types/errors.d.ts +9 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/extraction.d.ts +73 -18
- package/dist/types/extraction.d.ts.map +1 -1
- package/dist/types/extraction.js +4 -6
- package/dist/types/loading.d.ts +1 -2
- package/dist/types/loading.d.ts.map +1 -1
- package/dist/types/loading.js +0 -1
- package/dist/types/workers.d.ts +64 -20
- package/dist/types/workers.d.ts.map +1 -1
- package/dist/uploader/uploader.d.ts +5 -4
- package/dist/uploader/uploader.d.ts.map +1 -1
- package/dist/uploader/uploader.interfaces.d.ts +1 -1
- package/dist/uploader/uploader.js +10 -10
- package/package.json +3 -3
- package/dist/airsync-sdk.d.ts +0 -1802
- package/dist/attachments-streaming/attachments-streaming-pool.test.d.ts +0 -2
- package/dist/attachments-streaming/attachments-streaming-pool.test.d.ts.map +0 -1
- package/dist/attachments-streaming/attachments-streaming-pool.test.js +0 -516
- package/dist/common/control-protocol.d.ts.map +0 -1
- package/dist/common/errors.d.ts +0 -6
- package/dist/common/errors.d.ts.map +0 -1
- package/dist/common/install-initial-domain-mapping.d.ts.map +0 -1
- package/dist/common/install-initial-domain-mapping.test.d.ts +0 -2
- package/dist/common/install-initial-domain-mapping.test.d.ts.map +0 -1
- package/dist/common/install-initial-domain-mapping.test.js +0 -211
- package/dist/common/test-utils.d.ts.map +0 -1
- package/dist/common/time-value-resolver.d.ts.map +0 -1
- package/dist/common/time-value-resolver.test.d.ts +0 -2
- package/dist/common/time-value-resolver.test.d.ts.map +0 -1
- package/dist/common/time-value-resolver.test.js +0 -268
- package/dist/http/axios-client-internal.d.ts.map +0 -1
- package/dist/http/axios-client-internal.test.d.ts +0 -2
- package/dist/http/axios-client-internal.test.d.ts.map +0 -1
- package/dist/http/axios-client-internal.test.js +0 -175
- package/dist/http/axios-client.d.ts +0 -27
- package/dist/http/axios-client.d.ts.map +0 -1
- package/dist/http/axios-client.js +0 -60
- package/dist/http/constants.d.ts +0 -4
- package/dist/http/constants.d.ts.map +0 -1
- package/dist/http/constants.js +0 -6
- package/dist/http/index.d.ts +0 -2
- package/dist/http/index.d.ts.map +0 -1
- package/dist/http/index.js +0 -17
- package/dist/logger/logger.constants.d.ts +0 -6
- package/dist/logger/logger.constants.d.ts.map +0 -1
- package/dist/logger/logger.constants.js +0 -13
- package/dist/logger/logger.context.d.ts +0 -58
- package/dist/logger/logger.context.d.ts.map +0 -1
- package/dist/logger/logger.context.js +0 -86
- package/dist/logger/logger.test.d.ts +0 -2
- package/dist/logger/logger.test.d.ts.map +0 -1
- package/dist/logger/logger.test.js +0 -537
- package/dist/mappers/mappers.interface.d.ts.map +0 -1
- package/dist/mappers/mappers.test.d.ts +0 -2
- package/dist/mappers/mappers.test.d.ts.map +0 -1
- package/dist/mappers/mappers.test.js +0 -105
- package/dist/mock-server/mock-server.d.ts.map +0 -1
- package/dist/mock-server/mock-server.interfaces.d.ts.map +0 -1
- package/dist/multithreading/create-worker.test.d.ts +0 -2
- package/dist/multithreading/create-worker.test.d.ts.map +0 -1
- package/dist/multithreading/create-worker.test.js +0 -108
- package/dist/multithreading/process-task.test.d.ts +0 -2
- package/dist/multithreading/process-task.test.d.ts.map +0 -1
- package/dist/multithreading/process-task.test.js +0 -146
- package/dist/multithreading/spawn/spawn.helpers.test.d.ts +0 -2
- package/dist/multithreading/spawn/spawn.helpers.test.d.ts.map +0 -1
- package/dist/multithreading/spawn/spawn.helpers.test.js +0 -293
- package/dist/multithreading/spawn/spawn.test.d.ts +0 -2
- package/dist/multithreading/spawn/spawn.test.d.ts.map +0 -1
- package/dist/multithreading/spawn/spawn.test.js +0 -232
- package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts +0 -2
- package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts.map +0 -1
- package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.js +0 -175
- package/dist/multithreading/worker-adapter/worker-adapter.d.ts +0 -97
- package/dist/multithreading/worker-adapter/worker-adapter.d.ts.map +0 -1
- package/dist/multithreading/worker-adapter/worker-adapter.emit.test.d.ts +0 -2
- package/dist/multithreading/worker-adapter/worker-adapter.emit.test.d.ts.map +0 -1
- package/dist/multithreading/worker-adapter/worker-adapter.emit.test.js +0 -390
- package/dist/multithreading/worker-adapter/worker-adapter.extraction.test.d.ts +0 -2
- package/dist/multithreading/worker-adapter/worker-adapter.extraction.test.d.ts.map +0 -1
- package/dist/multithreading/worker-adapter/worker-adapter.extraction.test.js +0 -799
- package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts.map +0 -1
- package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts +0 -2
- package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts.map +0 -1
- package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.js +0 -514
- package/dist/multithreading/worker-adapter/worker-adapter.js +0 -846
- package/dist/multithreading/worker-adapter/worker-adapter.loading.test.d.ts +0 -2
- package/dist/multithreading/worker-adapter/worker-adapter.loading.test.d.ts.map +0 -1
- package/dist/multithreading/worker-adapter/worker-adapter.loading.test.js +0 -596
- package/dist/multithreading/worker-adapter/worker-adapter.serialization.test.d.ts +0 -2
- package/dist/multithreading/worker-adapter/worker-adapter.serialization.test.d.ts.map +0 -1
- package/dist/multithreading/worker-adapter/worker-adapter.serialization.test.js +0 -71
- package/dist/repo/repo.test.d.ts +0 -2
- package/dist/repo/repo.test.d.ts.map +0 -1
- package/dist/repo/repo.test.js +0 -184
- package/dist/state/state.extract-window.test.d.ts +0 -2
- package/dist/state/state.extract-window.test.d.ts.map +0 -1
- package/dist/state/state.extract-window.test.js +0 -163
- package/dist/state/state.pending-boundaries.test.d.ts +0 -2
- package/dist/state/state.pending-boundaries.test.d.ts.map +0 -1
- package/dist/state/state.pending-boundaries.test.js +0 -189
- package/dist/state/state.post-state.test.d.ts +0 -2
- package/dist/state/state.post-state.test.d.ts.map +0 -1
- package/dist/state/state.post-state.test.js +0 -77
- package/dist/state/state.test.d.ts +0 -2
- package/dist/state/state.test.d.ts.map +0 -1
- package/dist/state/state.test.js +0 -268
- package/dist/state/state.time-value-resolution.test.d.ts +0 -2
- package/dist/state/state.time-value-resolution.test.d.ts.map +0 -1
- package/dist/state/state.time-value-resolution.test.js +0 -175
- package/dist/tsdoc-metadata.json +0 -11
- package/dist/types/extraction.test.d.ts +0 -2
- package/dist/types/extraction.test.d.ts.map +0 -1
- package/dist/types/extraction.test.js +0 -96
- package/dist/types/index.d.ts +0 -11
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -21
- package/dist/uploader/uploader.helpers.test.d.ts +0 -2
- package/dist/uploader/uploader.helpers.test.d.ts.map +0 -1
- package/dist/uploader/uploader.helpers.test.js +0 -256
- package/dist/uploader/uploader.test.d.ts +0 -2
- package/dist/uploader/uploader.test.d.ts.map +0 -1
- package/dist/uploader/uploader.test.js +0 -601
- /package/dist/http/{axios-client-internal.js → client.js} +0 -0
- /package/dist/multithreading/{worker-adapter/worker-adapter.helpers.js → adapters/loading-adapter.helpers.js} +0 -0
- /package/dist/{common → state}/install-initial-domain-mapping.d.ts +0 -0
- /package/dist/{mock-server → testing}/mock-server.interfaces.d.ts +0 -0
- /package/dist/{mock-server → testing}/mock-server.interfaces.js +0 -0
- /package/dist/{common → types}/errors.js +0 -0
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const fs_1 = __importDefault(require("fs"));
|
|
7
|
-
const fs_2 = require("fs");
|
|
8
|
-
const js_jsonl_1 = require("js-jsonl");
|
|
9
|
-
const zlib_1 = __importDefault(require("zlib"));
|
|
10
|
-
const constants_1 = require("../common/constants");
|
|
11
|
-
const uploader_helpers_1 = require("./uploader.helpers");
|
|
12
|
-
describe('uploader.helpers', () => {
|
|
13
|
-
afterEach(() => {
|
|
14
|
-
jest.clearAllMocks();
|
|
15
|
-
});
|
|
16
|
-
describe(uploader_helpers_1.compressGzip.name, () => {
|
|
17
|
-
it('should compress a string to gzip buffer', () => {
|
|
18
|
-
// Arrange
|
|
19
|
-
const input = '{"id":1}\n{"id":2}';
|
|
20
|
-
// Act
|
|
21
|
-
const result = (0, uploader_helpers_1.compressGzip)(input);
|
|
22
|
-
// Assert
|
|
23
|
-
expect(result.response).toBeInstanceOf(Buffer);
|
|
24
|
-
const decompressed = zlib_1.default
|
|
25
|
-
.gunzipSync(result.response)
|
|
26
|
-
.toString();
|
|
27
|
-
expect(decompressed).toBe(input);
|
|
28
|
-
});
|
|
29
|
-
it('[edge] should return undefined and log error when compression fails', () => {
|
|
30
|
-
// Arrange
|
|
31
|
-
const gzipSyncSpy = jest
|
|
32
|
-
.spyOn(zlib_1.default, 'gzipSync')
|
|
33
|
-
.mockImplementationOnce(() => {
|
|
34
|
-
throw new Error('Compression failed');
|
|
35
|
-
});
|
|
36
|
-
// Act
|
|
37
|
-
const result = (0, uploader_helpers_1.compressGzip)('test data');
|
|
38
|
-
// Assert
|
|
39
|
-
expect(result.response).toBeUndefined();
|
|
40
|
-
gzipSyncSpy.mockRestore();
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
describe(uploader_helpers_1.decompressGzip.name, () => {
|
|
44
|
-
it('should decompress a gzip buffer to string', () => {
|
|
45
|
-
// Arrange
|
|
46
|
-
const originalString = '{"id":1}\n{"id":2}';
|
|
47
|
-
const compressed = zlib_1.default.gzipSync(originalString);
|
|
48
|
-
// Act
|
|
49
|
-
const result = (0, uploader_helpers_1.decompressGzip)(compressed);
|
|
50
|
-
// Assert
|
|
51
|
-
expect(result.response).toBe(originalString);
|
|
52
|
-
});
|
|
53
|
-
it('[edge] should return undefined and log error when decompression fails', () => {
|
|
54
|
-
// Arrange
|
|
55
|
-
const invalidGzip = Buffer.from('not valid gzip data');
|
|
56
|
-
// Act
|
|
57
|
-
const result = (0, uploader_helpers_1.decompressGzip)(invalidGzip);
|
|
58
|
-
// Assert
|
|
59
|
-
expect(result.response).toBeUndefined();
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
describe(uploader_helpers_1.parseJsonl.name, () => {
|
|
63
|
-
it('should parse valid JSONL string to array of objects', () => {
|
|
64
|
-
// Arrange
|
|
65
|
-
const data = [
|
|
66
|
-
{ id: 1, name: 'Item 1' },
|
|
67
|
-
{ id: 2, name: 'Item 2' },
|
|
68
|
-
];
|
|
69
|
-
const jsonlString = js_jsonl_1.jsonl.stringify(data);
|
|
70
|
-
// Act
|
|
71
|
-
const result = (0, uploader_helpers_1.parseJsonl)(jsonlString);
|
|
72
|
-
// Assert
|
|
73
|
-
expect(result.response).toEqual(data);
|
|
74
|
-
});
|
|
75
|
-
it('[edge] should return null and log error when parsing fails', () => {
|
|
76
|
-
// Arrange
|
|
77
|
-
const invalidJsonl = 'not valid jsonl {{{';
|
|
78
|
-
// Act
|
|
79
|
-
const result = (0, uploader_helpers_1.parseJsonl)(invalidJsonl);
|
|
80
|
-
// Assert
|
|
81
|
-
expect(result.response).toBeUndefined();
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
describe(uploader_helpers_1.downloadToLocal.name, () => {
|
|
85
|
-
const mockExistsSync = jest.spyOn(fs_1.default, 'existsSync');
|
|
86
|
-
const mockMkdirSync = jest.spyOn(fs_1.default, 'mkdirSync');
|
|
87
|
-
afterEach(() => {
|
|
88
|
-
mockExistsSync.mockReset();
|
|
89
|
-
mockMkdirSync.mockReset();
|
|
90
|
-
});
|
|
91
|
-
it('should create extracted_files directory if it does not exist', async () => {
|
|
92
|
-
// Arrange
|
|
93
|
-
const itemType = 'tasks';
|
|
94
|
-
const fetchedObjects = [{ id: 1 }];
|
|
95
|
-
mockExistsSync.mockReturnValueOnce(false);
|
|
96
|
-
mockMkdirSync.mockImplementationOnce(() => undefined);
|
|
97
|
-
const mockFileHandle = {
|
|
98
|
-
write: jest.fn().mockResolvedValue(undefined),
|
|
99
|
-
close: jest.fn().mockResolvedValue(undefined),
|
|
100
|
-
};
|
|
101
|
-
const fsPromisesOpenSpy = jest
|
|
102
|
-
.spyOn(fs_2.promises, 'open')
|
|
103
|
-
.mockResolvedValueOnce(mockFileHandle);
|
|
104
|
-
// Act
|
|
105
|
-
await (0, uploader_helpers_1.downloadToLocal)(itemType, fetchedObjects);
|
|
106
|
-
// Assert
|
|
107
|
-
expect(mockExistsSync).toHaveBeenCalledWith('extracted_files');
|
|
108
|
-
expect(mockMkdirSync).toHaveBeenCalledWith('extracted_files');
|
|
109
|
-
fsPromisesOpenSpy.mockRestore();
|
|
110
|
-
});
|
|
111
|
-
it('should write objects as JSONL lines to file', async () => {
|
|
112
|
-
// Arrange
|
|
113
|
-
const itemType = 'tasks';
|
|
114
|
-
const fetchedObjects = [{ id: 1 }, { id: 2 }];
|
|
115
|
-
mockExistsSync.mockReturnValueOnce(true);
|
|
116
|
-
const mockFileHandle = {
|
|
117
|
-
write: jest.fn().mockResolvedValue(undefined),
|
|
118
|
-
close: jest.fn().mockResolvedValue(undefined),
|
|
119
|
-
};
|
|
120
|
-
const fsPromisesOpenSpy = jest
|
|
121
|
-
.spyOn(fs_2.promises, 'open')
|
|
122
|
-
.mockResolvedValueOnce(mockFileHandle);
|
|
123
|
-
// Act
|
|
124
|
-
await (0, uploader_helpers_1.downloadToLocal)(itemType, fetchedObjects);
|
|
125
|
-
// Assert
|
|
126
|
-
expect(mockFileHandle.write).toHaveBeenCalledTimes(2);
|
|
127
|
-
expect(mockFileHandle.write).toHaveBeenCalledWith('{"id":1}\n');
|
|
128
|
-
expect(mockFileHandle.write).toHaveBeenCalledWith('{"id":2}\n');
|
|
129
|
-
expect(mockFileHandle.close).toHaveBeenCalled();
|
|
130
|
-
fsPromisesOpenSpy.mockRestore();
|
|
131
|
-
});
|
|
132
|
-
it('should handle single object (non-array) input', async () => {
|
|
133
|
-
// Arrange
|
|
134
|
-
const itemType = 'metadata';
|
|
135
|
-
const fetchedObject = { key: 'value' };
|
|
136
|
-
mockExistsSync.mockReturnValueOnce(true);
|
|
137
|
-
const mockFileHandle = {
|
|
138
|
-
write: jest.fn().mockResolvedValue(undefined),
|
|
139
|
-
close: jest.fn().mockResolvedValue(undefined),
|
|
140
|
-
};
|
|
141
|
-
const fsPromisesOpenSpy = jest
|
|
142
|
-
.spyOn(fs_2.promises, 'open')
|
|
143
|
-
.mockResolvedValueOnce(mockFileHandle);
|
|
144
|
-
// Act
|
|
145
|
-
await (0, uploader_helpers_1.downloadToLocal)(itemType, fetchedObject);
|
|
146
|
-
// Assert
|
|
147
|
-
expect(mockFileHandle.write).toHaveBeenCalledTimes(1);
|
|
148
|
-
expect(mockFileHandle.write).toHaveBeenCalledWith('{"key":"value"}\n');
|
|
149
|
-
fsPromisesOpenSpy.mockRestore();
|
|
150
|
-
});
|
|
151
|
-
it('should use .json extension when itemType is external_domain_metadata', async () => {
|
|
152
|
-
// Arrange
|
|
153
|
-
const itemType = 'external_domain_metadata';
|
|
154
|
-
const fetchedObject = { domain: 'example.com' };
|
|
155
|
-
mockExistsSync.mockReturnValueOnce(true);
|
|
156
|
-
const mockFileHandle = {
|
|
157
|
-
write: jest.fn().mockResolvedValue(undefined),
|
|
158
|
-
close: jest.fn().mockResolvedValue(undefined),
|
|
159
|
-
};
|
|
160
|
-
const fsPromisesOpenSpy = jest
|
|
161
|
-
.spyOn(fs_2.promises, 'open')
|
|
162
|
-
.mockResolvedValueOnce(mockFileHandle);
|
|
163
|
-
// Act
|
|
164
|
-
await (0, uploader_helpers_1.downloadToLocal)(itemType, fetchedObject);
|
|
165
|
-
// Assert
|
|
166
|
-
expect(fsPromisesOpenSpy).toHaveBeenCalledWith(expect.stringMatching(/extractor_external_domain_metadata_\d+\.json$/), 'w');
|
|
167
|
-
fsPromisesOpenSpy.mockRestore();
|
|
168
|
-
});
|
|
169
|
-
it('[edge] should reject and log error when file operations fail', async () => {
|
|
170
|
-
// Arrange
|
|
171
|
-
const itemType = 'tasks';
|
|
172
|
-
const fetchedObjects = [{ id: 1 }];
|
|
173
|
-
const fileError = new Error('File write failed');
|
|
174
|
-
mockExistsSync.mockReturnValueOnce(true);
|
|
175
|
-
const fsPromisesOpenSpy = jest
|
|
176
|
-
.spyOn(fs_2.promises, 'open')
|
|
177
|
-
.mockRejectedValueOnce(fileError);
|
|
178
|
-
// Act & Assert
|
|
179
|
-
await expect((0, uploader_helpers_1.downloadToLocal)(itemType, fetchedObjects)).rejects.toThrow(fileError);
|
|
180
|
-
fsPromisesOpenSpy.mockRestore();
|
|
181
|
-
});
|
|
182
|
-
});
|
|
183
|
-
describe(uploader_helpers_1.truncateFilename.name, () => {
|
|
184
|
-
it('should return filename unchanged when within the limit', () => {
|
|
185
|
-
// Arrange
|
|
186
|
-
const filename = 'short-filename.txt';
|
|
187
|
-
// Act
|
|
188
|
-
const result = (0, uploader_helpers_1.truncateFilename)(filename);
|
|
189
|
-
// Assert
|
|
190
|
-
expect(result).toBe(filename);
|
|
191
|
-
});
|
|
192
|
-
it('should return filename unchanged when exactly at the limit', () => {
|
|
193
|
-
// Arrange
|
|
194
|
-
const filename = 'a'.repeat(constants_1.MAX_DEVREV_FILENAME_LENGTH);
|
|
195
|
-
// Act
|
|
196
|
-
const result = (0, uploader_helpers_1.truncateFilename)(filename);
|
|
197
|
-
// Assert
|
|
198
|
-
expect(result).toBe(filename);
|
|
199
|
-
expect(result.length).toBe(constants_1.MAX_DEVREV_FILENAME_LENGTH);
|
|
200
|
-
});
|
|
201
|
-
it('should truncate filename and preserve extension when exceeding the limit', () => {
|
|
202
|
-
// Arrange
|
|
203
|
-
const longName = 'a'.repeat(300);
|
|
204
|
-
const extension = '.txt';
|
|
205
|
-
const filename = longName + extension;
|
|
206
|
-
// Act
|
|
207
|
-
const result = (0, uploader_helpers_1.truncateFilename)(filename);
|
|
208
|
-
// Assert
|
|
209
|
-
expect(result.length).toBe(constants_1.MAX_DEVREV_FILENAME_LENGTH);
|
|
210
|
-
expect(result).toContain('...');
|
|
211
|
-
expect(result.endsWith(extension)).toBe(true);
|
|
212
|
-
});
|
|
213
|
-
it('should preserve the last MAX_DEVREV_FILENAME_EXTENSION_LENGTH characters as extension', () => {
|
|
214
|
-
// Arrange
|
|
215
|
-
const longName = 'document-'.repeat(50);
|
|
216
|
-
const extension = '.verylongextension';
|
|
217
|
-
const filename = longName + extension;
|
|
218
|
-
// Act
|
|
219
|
-
const result = (0, uploader_helpers_1.truncateFilename)(filename);
|
|
220
|
-
// Assert
|
|
221
|
-
expect(result.length).toBe(constants_1.MAX_DEVREV_FILENAME_LENGTH);
|
|
222
|
-
const expectedExtension = filename.slice(-constants_1.MAX_DEVREV_FILENAME_EXTENSION_LENGTH);
|
|
223
|
-
expect(result.endsWith(expectedExtension)).toBe(true);
|
|
224
|
-
});
|
|
225
|
-
it('should correctly format the truncated filename with ellipsis', () => {
|
|
226
|
-
// Arrange
|
|
227
|
-
const filename = 'x'.repeat(300) + '.pdf';
|
|
228
|
-
// Act
|
|
229
|
-
const result = (0, uploader_helpers_1.truncateFilename)(filename);
|
|
230
|
-
// Assert
|
|
231
|
-
const availableNameLength = constants_1.MAX_DEVREV_FILENAME_LENGTH - constants_1.MAX_DEVREV_FILENAME_EXTENSION_LENGTH - 3;
|
|
232
|
-
const expectedPrefix = 'x'.repeat(availableNameLength);
|
|
233
|
-
const expectedExtension = filename.slice(-constants_1.MAX_DEVREV_FILENAME_EXTENSION_LENGTH);
|
|
234
|
-
expect(result).toBe(`${expectedPrefix}...${expectedExtension}`);
|
|
235
|
-
});
|
|
236
|
-
it('[edge] should handle filename with no extension', () => {
|
|
237
|
-
// Arrange
|
|
238
|
-
const filename = 'a'.repeat(300);
|
|
239
|
-
// Act
|
|
240
|
-
const result = (0, uploader_helpers_1.truncateFilename)(filename);
|
|
241
|
-
// Assert
|
|
242
|
-
expect(result.length).toBe(constants_1.MAX_DEVREV_FILENAME_LENGTH);
|
|
243
|
-
expect(result).toContain('...');
|
|
244
|
-
// Last 20 chars are preserved as "extension"
|
|
245
|
-
expect(result.endsWith('a'.repeat(constants_1.MAX_DEVREV_FILENAME_EXTENSION_LENGTH))).toBe(true);
|
|
246
|
-
});
|
|
247
|
-
it('[edge] should handle filename that is just one character over the limit', () => {
|
|
248
|
-
// Arrange
|
|
249
|
-
const filename = 'a'.repeat(constants_1.MAX_DEVREV_FILENAME_LENGTH + 1);
|
|
250
|
-
// Act
|
|
251
|
-
const result = (0, uploader_helpers_1.truncateFilename)(filename);
|
|
252
|
-
// Assert
|
|
253
|
-
expect(result.length).toBe(constants_1.MAX_DEVREV_FILENAME_LENGTH);
|
|
254
|
-
});
|
|
255
|
-
});
|
|
256
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"uploader.test.d.ts","sourceRoot":"","sources":["../../src/uploader/uploader.test.ts"],"names":[],"mappings":""}
|