@devrev/airsync-sdk 2.0.0-beta.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.
Files changed (180) hide show
  1. package/README.md +31 -0
  2. package/dist/attachments-streaming/attachments-streaming-pool.d.ts +16 -0
  3. package/dist/attachments-streaming/attachments-streaming-pool.d.ts.map +1 -0
  4. package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts +9 -0
  5. package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts.map +1 -0
  6. package/dist/attachments-streaming/attachments-streaming-pool.interfaces.js +2 -0
  7. package/dist/attachments-streaming/attachments-streaming-pool.js +97 -0
  8. package/dist/attachments-streaming/attachments-streaming-pool.test.d.ts +2 -0
  9. package/dist/attachments-streaming/attachments-streaming-pool.test.d.ts.map +1 -0
  10. package/dist/attachments-streaming/attachments-streaming-pool.test.js +267 -0
  11. package/dist/common/constants.d.ts +25 -0
  12. package/dist/common/constants.d.ts.map +1 -0
  13. package/dist/common/constants.js +58 -0
  14. package/dist/common/control-protocol.d.ts +10 -0
  15. package/dist/common/control-protocol.d.ts.map +1 -0
  16. package/dist/common/control-protocol.js +31 -0
  17. package/dist/common/errors.d.ts +6 -0
  18. package/dist/common/errors.d.ts.map +1 -0
  19. package/dist/common/errors.js +4 -0
  20. package/dist/common/event-type-translation.d.ts +24 -0
  21. package/dist/common/event-type-translation.d.ts.map +1 -0
  22. package/dist/common/event-type-translation.js +117 -0
  23. package/dist/common/helpers.d.ts +41 -0
  24. package/dist/common/helpers.d.ts.map +1 -0
  25. package/dist/common/helpers.js +124 -0
  26. package/dist/common/install-initial-domain-mapping.d.ts +4 -0
  27. package/dist/common/install-initial-domain-mapping.d.ts.map +1 -0
  28. package/dist/common/install-initial-domain-mapping.js +58 -0
  29. package/dist/common/install-initial-domain-mapping.test.d.ts +2 -0
  30. package/dist/common/install-initial-domain-mapping.test.d.ts.map +1 -0
  31. package/dist/common/install-initial-domain-mapping.test.js +207 -0
  32. package/dist/deprecated/adapter/index.d.ts +62 -0
  33. package/dist/deprecated/adapter/index.d.ts.map +1 -0
  34. package/dist/deprecated/adapter/index.js +151 -0
  35. package/dist/deprecated/common/helpers.d.ts +7 -0
  36. package/dist/deprecated/common/helpers.d.ts.map +1 -0
  37. package/dist/deprecated/common/helpers.js +47 -0
  38. package/dist/deprecated/demo-extractor/external_domain_metadata.json +38 -0
  39. package/dist/deprecated/demo-extractor/index.d.ts +18 -0
  40. package/dist/deprecated/demo-extractor/index.d.ts.map +1 -0
  41. package/dist/deprecated/demo-extractor/index.js +161 -0
  42. package/dist/deprecated/http/client.d.ts +22 -0
  43. package/dist/deprecated/http/client.d.ts.map +1 -0
  44. package/dist/deprecated/http/client.js +161 -0
  45. package/dist/deprecated/uploader/index.d.ts +35 -0
  46. package/dist/deprecated/uploader/index.d.ts.map +1 -0
  47. package/dist/deprecated/uploader/index.js +161 -0
  48. package/dist/http/axios-client-internal.d.ts +3 -0
  49. package/dist/http/axios-client-internal.d.ts.map +1 -0
  50. package/dist/http/axios-client-internal.js +66 -0
  51. package/dist/http/axios-client-internal.test.d.ts +2 -0
  52. package/dist/http/axios-client-internal.test.d.ts.map +1 -0
  53. package/dist/http/axios-client-internal.test.js +154 -0
  54. package/dist/http/axios-client.d.ts +27 -0
  55. package/dist/http/axios-client.d.ts.map +1 -0
  56. package/dist/http/axios-client.js +57 -0
  57. package/dist/http/constants.d.ts +4 -0
  58. package/dist/http/constants.d.ts.map +1 -0
  59. package/dist/http/constants.js +6 -0
  60. package/dist/http/index.d.ts +3 -0
  61. package/dist/http/index.d.ts.map +1 -0
  62. package/dist/http/index.js +18 -0
  63. package/dist/http/types.d.ts +17 -0
  64. package/dist/http/types.d.ts.map +1 -0
  65. package/dist/http/types.js +2 -0
  66. package/dist/index.d.ts +14 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +34 -0
  69. package/dist/logger/logger.constants.d.ts +6 -0
  70. package/dist/logger/logger.constants.d.ts.map +1 -0
  71. package/dist/logger/logger.constants.js +13 -0
  72. package/dist/logger/logger.context.d.ts +58 -0
  73. package/dist/logger/logger.context.d.ts.map +1 -0
  74. package/dist/logger/logger.context.js +86 -0
  75. package/dist/logger/logger.d.ts +89 -0
  76. package/dist/logger/logger.d.ts.map +1 -0
  77. package/dist/logger/logger.interfaces.d.ts +43 -0
  78. package/dist/logger/logger.interfaces.d.ts.map +1 -0
  79. package/dist/logger/logger.interfaces.js +9 -0
  80. package/dist/logger/logger.js +196 -0
  81. package/dist/logger/logger.test.d.ts +2 -0
  82. package/dist/logger/logger.test.d.ts.map +1 -0
  83. package/dist/logger/logger.test.js +490 -0
  84. package/dist/mappers/mappers.d.ts +52 -0
  85. package/dist/mappers/mappers.d.ts.map +1 -0
  86. package/dist/mappers/mappers.interface.d.ts +294 -0
  87. package/dist/mappers/mappers.interface.d.ts.map +1 -0
  88. package/dist/mappers/mappers.interface.js +48 -0
  89. package/dist/mappers/mappers.js +83 -0
  90. package/dist/mappers/mappers.test.d.ts +2 -0
  91. package/dist/mappers/mappers.test.d.ts.map +1 -0
  92. package/dist/mappers/mappers.test.js +107 -0
  93. package/dist/multithreading/create-worker.d.ts +5 -0
  94. package/dist/multithreading/create-worker.d.ts.map +1 -0
  95. package/dist/multithreading/create-worker.js +28 -0
  96. package/dist/multithreading/create-worker.test.d.ts +2 -0
  97. package/dist/multithreading/create-worker.test.d.ts.map +1 -0
  98. package/dist/multithreading/create-worker.test.js +89 -0
  99. package/dist/multithreading/process-task.d.ts +3 -0
  100. package/dist/multithreading/process-task.d.ts.map +1 -0
  101. package/dist/multithreading/process-task.js +58 -0
  102. package/dist/multithreading/spawn/spawn.d.ts +30 -0
  103. package/dist/multithreading/spawn/spawn.d.ts.map +1 -0
  104. package/dist/multithreading/spawn/spawn.helpers.d.ts +21 -0
  105. package/dist/multithreading/spawn/spawn.helpers.d.ts.map +1 -0
  106. package/dist/multithreading/spawn/spawn.helpers.js +114 -0
  107. package/dist/multithreading/spawn/spawn.helpers.test.d.ts +2 -0
  108. package/dist/multithreading/spawn/spawn.helpers.test.d.ts.map +1 -0
  109. package/dist/multithreading/spawn/spawn.helpers.test.js +293 -0
  110. package/dist/multithreading/spawn/spawn.js +249 -0
  111. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts +2 -0
  112. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts.map +1 -0
  113. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.js +127 -0
  114. package/dist/multithreading/worker-adapter/worker-adapter.d.ts +91 -0
  115. package/dist/multithreading/worker-adapter/worker-adapter.d.ts.map +1 -0
  116. package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts +22 -0
  117. package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts.map +1 -0
  118. package/dist/multithreading/worker-adapter/worker-adapter.helpers.js +64 -0
  119. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts +2 -0
  120. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts.map +1 -0
  121. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.js +514 -0
  122. package/dist/multithreading/worker-adapter/worker-adapter.js +747 -0
  123. package/dist/multithreading/worker-adapter/worker-adapter.test.d.ts +2 -0
  124. package/dist/multithreading/worker-adapter/worker-adapter.test.d.ts.map +1 -0
  125. package/dist/multithreading/worker-adapter/worker-adapter.test.js +483 -0
  126. package/dist/multithreading/worker.d.ts +2 -0
  127. package/dist/multithreading/worker.d.ts.map +1 -0
  128. package/dist/multithreading/worker.js +9 -0
  129. package/dist/repo/repo.d.ts +18 -0
  130. package/dist/repo/repo.d.ts.map +1 -0
  131. package/dist/repo/repo.interfaces.d.ts +46 -0
  132. package/dist/repo/repo.interfaces.d.ts.map +1 -0
  133. package/dist/repo/repo.interfaces.js +2 -0
  134. package/dist/repo/repo.js +75 -0
  135. package/dist/repo/repo.test.d.ts +2 -0
  136. package/dist/repo/repo.test.d.ts.map +1 -0
  137. package/dist/repo/repo.test.js +131 -0
  138. package/dist/state/state.d.ts +30 -0
  139. package/dist/state/state.d.ts.map +1 -0
  140. package/dist/state/state.interfaces.d.ts +51 -0
  141. package/dist/state/state.interfaces.d.ts.map +1 -0
  142. package/dist/state/state.interfaces.js +21 -0
  143. package/dist/state/state.js +166 -0
  144. package/dist/state/state.test.d.ts +2 -0
  145. package/dist/state/state.test.d.ts.map +1 -0
  146. package/dist/state/state.test.js +224 -0
  147. package/dist/types/common.d.ts +50 -0
  148. package/dist/types/common.d.ts.map +1 -0
  149. package/dist/types/common.js +25 -0
  150. package/dist/types/extraction.d.ts +417 -0
  151. package/dist/types/extraction.d.ts.map +1 -0
  152. package/dist/types/extraction.js +170 -0
  153. package/dist/types/extraction.test.d.ts +2 -0
  154. package/dist/types/extraction.test.d.ts.map +1 -0
  155. package/dist/types/extraction.test.js +70 -0
  156. package/dist/types/index.d.ts +9 -0
  157. package/dist/types/index.d.ts.map +1 -0
  158. package/dist/types/index.js +18 -0
  159. package/dist/types/loading.d.ts +147 -0
  160. package/dist/types/loading.d.ts.map +1 -0
  161. package/dist/types/loading.js +48 -0
  162. package/dist/types/workers.d.ts +161 -0
  163. package/dist/types/workers.d.ts.map +1 -0
  164. package/dist/types/workers.js +22 -0
  165. package/dist/uploader/uploader.d.ts +92 -0
  166. package/dist/uploader/uploader.d.ts.map +1 -0
  167. package/dist/uploader/uploader.helpers.d.ts +33 -0
  168. package/dist/uploader/uploader.helpers.d.ts.map +1 -0
  169. package/dist/uploader/uploader.helpers.js +139 -0
  170. package/dist/uploader/uploader.helpers.test.d.ts +2 -0
  171. package/dist/uploader/uploader.helpers.test.d.ts.map +1 -0
  172. package/dist/uploader/uploader.helpers.test.js +267 -0
  173. package/dist/uploader/uploader.interfaces.d.ts +95 -0
  174. package/dist/uploader/uploader.interfaces.d.ts.map +1 -0
  175. package/dist/uploader/uploader.interfaces.js +2 -0
  176. package/dist/uploader/uploader.js +305 -0
  177. package/dist/uploader/uploader.test.d.ts +2 -0
  178. package/dist/uploader/uploader.test.d.ts.map +1 -0
  179. package/dist/uploader/uploader.test.js +589 -0
  180. package/package.json +60 -0
@@ -0,0 +1,514 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const loading_1 = require("../../types/loading");
4
+ const worker_adapter_helpers_1 = require("./worker-adapter.helpers");
5
+ describe(worker_adapter_helpers_1.getFilesToLoad.name, () => {
6
+ let statsFile;
7
+ beforeEach(() => {
8
+ statsFile = [
9
+ {
10
+ id: 'test-artifact-1',
11
+ file_name: 'test_file_1.json.gz',
12
+ item_type: 'issues',
13
+ count: '79',
14
+ },
15
+ {
16
+ id: 'test-artifact-2',
17
+ file_name: 'test_file_2.json.gz',
18
+ item_type: 'comments',
19
+ count: '1079',
20
+ },
21
+ {
22
+ id: 'test-artifact-3',
23
+ file_name: 'test_file_3.json.gz',
24
+ item_type: 'issues',
25
+ count: '1921',
26
+ },
27
+ {
28
+ id: 'test-artifact-4',
29
+ file_name: 'test_file_4.json.gz',
30
+ item_type: 'comments',
31
+ count: '921',
32
+ },
33
+ {
34
+ id: 'test-artifact-5',
35
+ file_name: 'test_file_5.json.gz',
36
+ item_type: 'attachments',
37
+ count: '50',
38
+ },
39
+ {
40
+ id: 'test-artifact-6',
41
+ file_name: 'test_file_6.json.gz',
42
+ item_type: 'unknown',
43
+ count: '50',
44
+ },
45
+ {
46
+ id: 'test-artifact-7',
47
+ file_name: 'test_file_7.json.gz',
48
+ item_type: 'issues',
49
+ count: '32',
50
+ },
51
+ ];
52
+ });
53
+ it('should filter files by supported item types and order them correctly', () => {
54
+ // Arrange
55
+ const itemTypesToLoad = [
56
+ { itemType: 'attachments', create: jest.fn(), update: jest.fn() },
57
+ { itemType: 'issues', create: jest.fn(), update: jest.fn() },
58
+ ];
59
+ const expectedResult = [
60
+ {
61
+ id: 'test-artifact-5',
62
+ itemType: 'attachments',
63
+ count: 50,
64
+ file_name: 'test_file_5.json.gz',
65
+ completed: false,
66
+ lineToProcess: 0,
67
+ },
68
+ {
69
+ id: 'test-artifact-1',
70
+ itemType: 'issues',
71
+ count: 79,
72
+ file_name: 'test_file_1.json.gz',
73
+ completed: false,
74
+ lineToProcess: 0,
75
+ },
76
+ {
77
+ id: 'test-artifact-3',
78
+ itemType: 'issues',
79
+ count: 1921,
80
+ file_name: 'test_file_3.json.gz',
81
+ completed: false,
82
+ lineToProcess: 0,
83
+ },
84
+ {
85
+ id: 'test-artifact-7',
86
+ itemType: 'issues',
87
+ count: 32,
88
+ file_name: 'test_file_7.json.gz',
89
+ completed: false,
90
+ lineToProcess: 0,
91
+ },
92
+ ];
93
+ // Act
94
+ const result = (0, worker_adapter_helpers_1.getFilesToLoad)({
95
+ supportedItemTypes: itemTypesToLoad.map((it) => it.itemType),
96
+ statsFile,
97
+ });
98
+ // Assert
99
+ expect(result).toEqual(expectedResult);
100
+ });
101
+ it('should ignore files with unrecognized item types in statsFile', () => {
102
+ // Arrange
103
+ const itemTypesToLoad = [
104
+ { itemType: 'issues', create: jest.fn(), update: jest.fn() },
105
+ { itemType: 'unrecognized', create: jest.fn(), update: jest.fn() },
106
+ ];
107
+ const expectedResult = [
108
+ {
109
+ id: 'test-artifact-1',
110
+ itemType: 'issues',
111
+ count: 79,
112
+ file_name: 'test_file_1.json.gz',
113
+ completed: false,
114
+ lineToProcess: 0,
115
+ },
116
+ {
117
+ id: 'test-artifact-3',
118
+ itemType: 'issues',
119
+ count: 1921,
120
+ file_name: 'test_file_3.json.gz',
121
+ completed: false,
122
+ lineToProcess: 0,
123
+ },
124
+ {
125
+ id: 'test-artifact-7',
126
+ itemType: 'issues',
127
+ count: 32,
128
+ file_name: 'test_file_7.json.gz',
129
+ completed: false,
130
+ lineToProcess: 0,
131
+ },
132
+ ];
133
+ // Act
134
+ const result = (0, worker_adapter_helpers_1.getFilesToLoad)({
135
+ supportedItemTypes: itemTypesToLoad.map((it) => it.itemType),
136
+ statsFile,
137
+ });
138
+ // Assert
139
+ expect(result).toEqual(expectedResult);
140
+ });
141
+ it('should parse count string to number', () => {
142
+ // Arrange
143
+ const singleItemStatsFile = [
144
+ {
145
+ id: 'test-artifact-single',
146
+ file_name: 'test_file_single.json.gz',
147
+ item_type: 'issues',
148
+ count: '12345',
149
+ },
150
+ ];
151
+ const supportedItemTypes = ['issues'];
152
+ // Act
153
+ const result = (0, worker_adapter_helpers_1.getFilesToLoad)({
154
+ supportedItemTypes,
155
+ statsFile: singleItemStatsFile,
156
+ });
157
+ // Assert
158
+ expect(result[0].count).toBe(12345);
159
+ expect(typeof result[0].count).toBe('number');
160
+ });
161
+ it('should initialize completed as false and lineToProcess as 0', () => {
162
+ // Arrange
163
+ const singleItemStatsFile = [
164
+ {
165
+ id: 'test-artifact-init',
166
+ file_name: 'test_file_init.json.gz',
167
+ item_type: 'issues',
168
+ count: '100',
169
+ },
170
+ ];
171
+ const supportedItemTypes = ['issues'];
172
+ // Act
173
+ const result = (0, worker_adapter_helpers_1.getFilesToLoad)({
174
+ supportedItemTypes,
175
+ statsFile: singleItemStatsFile,
176
+ });
177
+ // Assert
178
+ expect(result[0].completed).toBe(false);
179
+ expect(result[0].lineToProcess).toBe(0);
180
+ });
181
+ it('[edge] should return an empty array when statsFile is empty', () => {
182
+ // Arrange
183
+ const emptyStatsFile = [];
184
+ const itemTypesToLoad = [
185
+ { itemType: 'issues', create: jest.fn(), update: jest.fn() },
186
+ ];
187
+ // Act
188
+ const result = (0, worker_adapter_helpers_1.getFilesToLoad)({
189
+ supportedItemTypes: itemTypesToLoad.map((it) => it.itemType),
190
+ statsFile: emptyStatsFile,
191
+ });
192
+ // Assert
193
+ expect(result).toEqual([]);
194
+ });
195
+ it('[edge] should return an empty array when supportedItemTypes is empty', () => {
196
+ // Arrange
197
+ const supportedItemTypes = [];
198
+ // Act
199
+ const result = (0, worker_adapter_helpers_1.getFilesToLoad)({
200
+ supportedItemTypes,
201
+ statsFile,
202
+ });
203
+ // Assert
204
+ expect(result).toEqual([]);
205
+ });
206
+ it('[edge] should return an empty array when statsFile has no matching items', () => {
207
+ // Arrange
208
+ const itemTypesToLoad = [
209
+ { itemType: 'users', create: jest.fn(), update: jest.fn() },
210
+ ];
211
+ // Act
212
+ const result = (0, worker_adapter_helpers_1.getFilesToLoad)({
213
+ supportedItemTypes: itemTypesToLoad.map((it) => it.itemType),
214
+ statsFile,
215
+ });
216
+ // Assert
217
+ expect(result).toEqual([]);
218
+ });
219
+ it('[edge] should return an empty array when both statsFile and supportedItemTypes are empty', () => {
220
+ // Arrange
221
+ const emptyStatsFile = [];
222
+ const supportedItemTypes = [];
223
+ // Act
224
+ const result = (0, worker_adapter_helpers_1.getFilesToLoad)({
225
+ supportedItemTypes,
226
+ statsFile: emptyStatsFile,
227
+ });
228
+ // Assert
229
+ expect(result).toEqual([]);
230
+ });
231
+ });
232
+ describe(worker_adapter_helpers_1.addReportToLoaderReport.name, () => {
233
+ it('should add a new report when no existing report for the item type', () => {
234
+ // Arrange
235
+ const loaderReports = [];
236
+ const report = {
237
+ item_type: 'issues',
238
+ [loading_1.ActionType.CREATED]: 10,
239
+ [loading_1.ActionType.UPDATED]: 5,
240
+ };
241
+ // Act
242
+ const result = (0, worker_adapter_helpers_1.addReportToLoaderReport)({ loaderReports, report });
243
+ // Assert
244
+ expect(result).toHaveLength(1);
245
+ expect(result[0]).toEqual({
246
+ item_type: 'issues',
247
+ [loading_1.ActionType.CREATED]: 10,
248
+ [loading_1.ActionType.UPDATED]: 5,
249
+ });
250
+ });
251
+ it('should merge created counts when report for item type already exists', () => {
252
+ // Arrange
253
+ const loaderReports = [
254
+ {
255
+ item_type: 'issues',
256
+ [loading_1.ActionType.CREATED]: 10,
257
+ },
258
+ ];
259
+ const report = {
260
+ item_type: 'issues',
261
+ [loading_1.ActionType.CREATED]: 5,
262
+ };
263
+ // Act
264
+ const result = (0, worker_adapter_helpers_1.addReportToLoaderReport)({ loaderReports, report });
265
+ // Assert
266
+ expect(result).toHaveLength(1);
267
+ expect(result[0][loading_1.ActionType.CREATED]).toBe(15);
268
+ });
269
+ it('should merge updated counts when report for item type already exists', () => {
270
+ // Arrange
271
+ const loaderReports = [
272
+ {
273
+ item_type: 'issues',
274
+ [loading_1.ActionType.UPDATED]: 20,
275
+ },
276
+ ];
277
+ const report = {
278
+ item_type: 'issues',
279
+ [loading_1.ActionType.UPDATED]: 8,
280
+ };
281
+ // Act
282
+ const result = (0, worker_adapter_helpers_1.addReportToLoaderReport)({ loaderReports, report });
283
+ // Assert
284
+ expect(result).toHaveLength(1);
285
+ expect(result[0][loading_1.ActionType.UPDATED]).toBe(28);
286
+ });
287
+ it('should merge failed counts when report for item type already exists', () => {
288
+ // Arrange
289
+ const loaderReports = [
290
+ {
291
+ item_type: 'issues',
292
+ [loading_1.ActionType.FAILED]: 3,
293
+ },
294
+ ];
295
+ const report = {
296
+ item_type: 'issues',
297
+ [loading_1.ActionType.FAILED]: 2,
298
+ };
299
+ // Act
300
+ const result = (0, worker_adapter_helpers_1.addReportToLoaderReport)({ loaderReports, report });
301
+ // Assert
302
+ expect(result).toHaveLength(1);
303
+ expect(result[0][loading_1.ActionType.FAILED]).toBe(5);
304
+ });
305
+ it('should merge all action types when report for item type already exists', () => {
306
+ // Arrange
307
+ const loaderReports = [
308
+ {
309
+ item_type: 'issues',
310
+ [loading_1.ActionType.CREATED]: 10,
311
+ [loading_1.ActionType.UPDATED]: 20,
312
+ [loading_1.ActionType.FAILED]: 3,
313
+ },
314
+ ];
315
+ const report = {
316
+ item_type: 'issues',
317
+ [loading_1.ActionType.CREATED]: 5,
318
+ [loading_1.ActionType.UPDATED]: 8,
319
+ [loading_1.ActionType.FAILED]: 2,
320
+ };
321
+ // Act
322
+ const result = (0, worker_adapter_helpers_1.addReportToLoaderReport)({ loaderReports, report });
323
+ // Assert
324
+ expect(result).toHaveLength(1);
325
+ expect(result[0]).toEqual({
326
+ item_type: 'issues',
327
+ [loading_1.ActionType.CREATED]: 15,
328
+ [loading_1.ActionType.UPDATED]: 28,
329
+ [loading_1.ActionType.FAILED]: 5,
330
+ });
331
+ });
332
+ it('should add reports for different item types separately', () => {
333
+ // Arrange
334
+ const loaderReports = [
335
+ {
336
+ item_type: 'issues',
337
+ [loading_1.ActionType.CREATED]: 10,
338
+ },
339
+ ];
340
+ const report = {
341
+ item_type: 'comments',
342
+ [loading_1.ActionType.CREATED]: 50,
343
+ };
344
+ // Act
345
+ const result = (0, worker_adapter_helpers_1.addReportToLoaderReport)({ loaderReports, report });
346
+ // Assert
347
+ expect(result).toHaveLength(2);
348
+ expect(result[0]).toEqual({
349
+ item_type: 'issues',
350
+ [loading_1.ActionType.CREATED]: 10,
351
+ });
352
+ expect(result[1]).toEqual({
353
+ item_type: 'comments',
354
+ [loading_1.ActionType.CREATED]: 50,
355
+ });
356
+ });
357
+ it('should preserve existing count when new report has undefined for an action type', () => {
358
+ // Arrange
359
+ const loaderReports = [
360
+ {
361
+ item_type: 'issues',
362
+ [loading_1.ActionType.CREATED]: 10,
363
+ [loading_1.ActionType.UPDATED]: 5,
364
+ },
365
+ ];
366
+ const report = {
367
+ item_type: 'issues',
368
+ [loading_1.ActionType.CREATED]: 3,
369
+ };
370
+ // Act
371
+ const result = (0, worker_adapter_helpers_1.addReportToLoaderReport)({ loaderReports, report });
372
+ // Assert
373
+ expect(result).toHaveLength(1);
374
+ expect(result[0][loading_1.ActionType.CREATED]).toBe(13);
375
+ expect(result[0][loading_1.ActionType.UPDATED]).toBe(5);
376
+ });
377
+ it('should use new report count when existing report has undefined for an action type', () => {
378
+ // Arrange
379
+ const loaderReports = [
380
+ {
381
+ item_type: 'issues',
382
+ [loading_1.ActionType.CREATED]: 10,
383
+ },
384
+ ];
385
+ const report = {
386
+ item_type: 'issues',
387
+ [loading_1.ActionType.CREATED]: 3,
388
+ [loading_1.ActionType.UPDATED]: 7,
389
+ };
390
+ // Act
391
+ const result = (0, worker_adapter_helpers_1.addReportToLoaderReport)({ loaderReports, report });
392
+ // Assert
393
+ expect(result).toHaveLength(1);
394
+ expect(result[0][loading_1.ActionType.CREATED]).toBe(13);
395
+ expect(result[0][loading_1.ActionType.UPDATED]).toBe(7);
396
+ });
397
+ it('should mutate and return the same loaderReports array', () => {
398
+ // Arrange
399
+ const loaderReports = [];
400
+ const report = {
401
+ item_type: 'issues',
402
+ [loading_1.ActionType.CREATED]: 10,
403
+ };
404
+ // Act
405
+ const result = (0, worker_adapter_helpers_1.addReportToLoaderReport)({ loaderReports, report });
406
+ // Assert
407
+ expect(result).toBe(loaderReports);
408
+ });
409
+ it('[edge] should handle report with only item_type and no action counts', () => {
410
+ // Arrange
411
+ const loaderReports = [];
412
+ const report = {
413
+ item_type: 'issues',
414
+ };
415
+ // Act
416
+ const result = (0, worker_adapter_helpers_1.addReportToLoaderReport)({ loaderReports, report });
417
+ // Assert
418
+ expect(result).toHaveLength(1);
419
+ expect(result[0]).toEqual({ item_type: 'issues' });
420
+ });
421
+ it('[edge] should handle merging when both reports have zero counts', () => {
422
+ // Arrange
423
+ const loaderReports = [
424
+ {
425
+ item_type: 'issues',
426
+ [loading_1.ActionType.CREATED]: 0,
427
+ },
428
+ ];
429
+ const report = {
430
+ item_type: 'issues',
431
+ [loading_1.ActionType.CREATED]: 0,
432
+ };
433
+ // Act
434
+ const result = (0, worker_adapter_helpers_1.addReportToLoaderReport)({ loaderReports, report });
435
+ // Assert
436
+ expect(result).toHaveLength(1);
437
+ expect(result[0][loading_1.ActionType.CREATED]).toBe(0);
438
+ });
439
+ it('[edge] should handle empty loaderReports array', () => {
440
+ // Arrange
441
+ const loaderReports = [];
442
+ const report = {
443
+ item_type: 'attachments',
444
+ [loading_1.ActionType.CREATED]: 25,
445
+ [loading_1.ActionType.FAILED]: 1,
446
+ };
447
+ // Act
448
+ const result = (0, worker_adapter_helpers_1.addReportToLoaderReport)({ loaderReports, report });
449
+ // Assert
450
+ expect(result).toHaveLength(1);
451
+ expect(result[0]).toEqual({
452
+ item_type: 'attachments',
453
+ [loading_1.ActionType.CREATED]: 25,
454
+ [loading_1.ActionType.FAILED]: 1,
455
+ });
456
+ });
457
+ it('[edge] should preserve existing created count when new report has undefined created', () => {
458
+ // Arrange
459
+ const loaderReports = [
460
+ {
461
+ item_type: 'issues',
462
+ [loading_1.ActionType.CREATED]: 10,
463
+ },
464
+ ];
465
+ const report = {
466
+ item_type: 'issues',
467
+ [loading_1.ActionType.UPDATED]: 5,
468
+ };
469
+ // Act
470
+ const result = (0, worker_adapter_helpers_1.addReportToLoaderReport)({ loaderReports, report });
471
+ // Assert
472
+ expect(result).toHaveLength(1);
473
+ expect(result[0][loading_1.ActionType.CREATED]).toBe(10);
474
+ expect(result[0][loading_1.ActionType.UPDATED]).toBe(5);
475
+ });
476
+ it('[edge] should preserve existing updated count when new report has undefined updated', () => {
477
+ // Arrange
478
+ const loaderReports = [
479
+ {
480
+ item_type: 'issues',
481
+ [loading_1.ActionType.UPDATED]: 15,
482
+ },
483
+ ];
484
+ const report = {
485
+ item_type: 'issues',
486
+ [loading_1.ActionType.CREATED]: 3,
487
+ };
488
+ // Act
489
+ const result = (0, worker_adapter_helpers_1.addReportToLoaderReport)({ loaderReports, report });
490
+ // Assert
491
+ expect(result).toHaveLength(1);
492
+ expect(result[0][loading_1.ActionType.UPDATED]).toBe(15);
493
+ expect(result[0][loading_1.ActionType.CREATED]).toBe(3);
494
+ });
495
+ it('[edge] should preserve existing failed count when new report has undefined failed', () => {
496
+ // Arrange
497
+ const loaderReports = [
498
+ {
499
+ item_type: 'issues',
500
+ [loading_1.ActionType.FAILED]: 7,
501
+ },
502
+ ];
503
+ const report = {
504
+ item_type: 'issues',
505
+ [loading_1.ActionType.CREATED]: 2,
506
+ };
507
+ // Act
508
+ const result = (0, worker_adapter_helpers_1.addReportToLoaderReport)({ loaderReports, report });
509
+ // Assert
510
+ expect(result).toHaveLength(1);
511
+ expect(result[0][loading_1.ActionType.FAILED]).toBe(7);
512
+ expect(result[0][loading_1.ActionType.CREATED]).toBe(2);
513
+ });
514
+ });