feed-common 1.11.0 → 1.12.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -29,6 +29,7 @@ export type ProductUploadMapSource = {
29
29
  };
30
30
 
31
31
  export type ProductUploadMapping = {
32
+ id: string;
32
33
  attribute: MappingFields;
33
34
  value: ValueType;
34
35
  rules: ProductUploadRules;
@@ -12,7 +12,7 @@ import {
12
12
  sanitizeUploadProfile,
13
13
  sortMappings,
14
14
  } from '../src/utils/profile.js';
15
- import { ProductUploadMapSource, ProductUploadMapping, ProductUploadProfile } from '../src/types/profile.types.js';
15
+ import { ProductUploadMapping, ProductUploadProfile } from '../src/types/profile.types.js';
16
16
 
17
17
  describe('Rules duplication', () => {
18
18
  test('no match', () => {
@@ -79,8 +79,8 @@ describe('Alwaysness', () => {
79
79
  describe('Rules deadlock', () => {
80
80
  test('match #1', () => {
81
81
  const rulesList = [
82
- { ruleItems: [{ id: '1', attribute: 'attr1', operator: 'equals', value: '1' }] },
83
- { ruleItems: [{ id: '5', attribute: 'attr1', operator: 'notEquals', value: '1' }] },
82
+ { id: '1', ruleItems: [{ id: '1', attribute: 'attr1', operator: 'equals', value: '1' }] },
83
+ { id: '1', ruleItems: [{ id: '5', attribute: 'attr1', operator: 'notEquals', value: '1' }] },
84
84
  ];
85
85
 
86
86
  expect(checkRuleDeadlocks(rulesList)).toEqual(['1', '5']);
@@ -89,18 +89,21 @@ describe('Rules deadlock', () => {
89
89
  test('match #2', () => {
90
90
  const rulesList = [
91
91
  {
92
+ id: '1',
92
93
  ruleItems: [
93
94
  { id: '1', attribute: 'attr1', operator: 'equals', value: '1' },
94
95
  { id: '2', attribute: 'attr3', operator: 'equals', value: '1' },
95
96
  ],
96
97
  },
97
98
  {
99
+ id: '1',
98
100
  ruleItems: [
99
101
  { id: '3', attribute: 'attr1', operator: 'notEquals', value: '1' },
100
102
  { id: '4', attribute: 'attr2', operator: 'notEquals', value: '1' },
101
103
  ],
102
104
  },
103
105
  {
106
+ id: '1',
104
107
  ruleItems: [
105
108
  { id: '5', attribute: 'attr2', operator: 'equals', value: '1' },
106
109
  { id: '6', attribute: 'attr3', operator: 'notEquals', value: '1' },
@@ -114,6 +117,7 @@ describe('Rules deadlock', () => {
114
117
  test('match #3', () => {
115
118
  const rulesList = [
116
119
  {
120
+ id: '1',
117
121
  ruleItems: [
118
122
  { id: '1', attribute: 'attr1', operator: 'equals', value: '1' },
119
123
  { id: '2', attribute: 'attr3', operator: 'equals', value: '1' },
@@ -121,12 +125,14 @@ describe('Rules deadlock', () => {
121
125
  ],
122
126
  },
123
127
  {
128
+ id: '1',
124
129
  ruleItems: [
125
130
  { id: '3', attribute: 'attr1', operator: 'notEquals', value: '1' },
126
131
  { id: '4', attribute: 'attr2', operator: 'notEquals', value: '1' },
127
132
  ],
128
133
  },
129
134
  {
135
+ id: '1',
130
136
  ruleItems: [
131
137
  { id: '5', attribute: 'attr2', operator: 'equals', value: '1' },
132
138
  { id: '6', attribute: 'attr3', operator: 'notEquals', value: '1' },
@@ -140,6 +146,7 @@ describe('Rules deadlock', () => {
140
146
  test('match #4', () => {
141
147
  const rulesList = [
142
148
  {
149
+ id: '1',
143
150
  ruleItems: [
144
151
  { id: '1', attribute: 'attr1', operator: 'equals', value: '1' },
145
152
  { id: '2', attribute: 'attr3', operator: 'equals', value: '1' },
@@ -147,6 +154,7 @@ describe('Rules deadlock', () => {
147
154
  ],
148
155
  },
149
156
  {
157
+ id: '1',
150
158
  ruleItems: [
151
159
  { id: '3', attribute: 'attr1', operator: 'notEquals', value: '1' },
152
160
  { id: '4', attribute: 'attr2', operator: 'notEquals', value: '1' },
@@ -154,6 +162,7 @@ describe('Rules deadlock', () => {
154
162
  ],
155
163
  },
156
164
  {
165
+ id: '1',
157
166
  ruleItems: [
158
167
  { id: '5', attribute: 'attr2', operator: 'equals', value: '1' },
159
168
  { id: '6', attribute: 'attr3', operator: 'notEquals', value: '1' },
@@ -167,6 +176,7 @@ describe('Rules deadlock', () => {
167
176
  test('no match', () => {
168
177
  const rulesList = [
169
178
  {
179
+ id: '1',
170
180
  ruleItems: [
171
181
  { id: '1', attribute: 'attr1', operator: 'equals', value: '1' },
172
182
  { id: '2', attribute: 'attr3', operator: 'equals', value: '1' },
@@ -174,6 +184,7 @@ describe('Rules deadlock', () => {
174
184
  ],
175
185
  },
176
186
  {
187
+ id: '1',
177
188
  ruleItems: [
178
189
  { id: '3', attribute: 'attr1', operator: 'notEquals', value: '1' },
179
190
  { id: '4', attribute: 'attr2', operator: 'notEquals', value: '1' },
@@ -181,6 +192,7 @@ describe('Rules deadlock', () => {
181
192
  ],
182
193
  },
183
194
  {
195
+ id: '1',
184
196
  ruleItems: [
185
197
  { id: '5', attribute: 'attr2', operator: 'equals', value: '1' },
186
198
  { id: '6', attribute: 'attr3', operator: 'notEquals', value: '1' },
@@ -246,13 +258,23 @@ describe('Has rules', () => {
246
258
  test('match', () => {
247
259
  expect(
248
260
  hasRules({
249
- sections: [{ ruleItems: [] }, { ruleItems: [{ id: '1', attribute: 'a', operator: 'b', value: 'c' }] }],
261
+ sections: [
262
+ { id: '1', ruleItems: [] },
263
+ { id: '1', ruleItems: [{ id: '1', attribute: 'a', operator: 'b', value: 'c' }] },
264
+ ],
250
265
  })
251
266
  ).toBe(true);
252
267
  });
253
268
 
254
269
  test('no match', () => {
255
- expect(hasRules({ sections: [{ ruleItems: [] }, { ruleItems: [] }] })).toBe(false);
270
+ expect(
271
+ hasRules({
272
+ sections: [
273
+ { id: '1', ruleItems: [] },
274
+ { id: '1', ruleItems: [] },
275
+ ],
276
+ })
277
+ ).toBe(false);
256
278
  });
257
279
  });
258
280
 
@@ -260,8 +282,8 @@ describe('Compare rules', () => {
260
282
  test('match #1', () => {
261
283
  expect(
262
284
  compareRules(
263
- { sections: [{ ruleItems: [{ id: '1', attribute: 'a', operator: 'b', value: 'c' }] }] },
264
- { sections: [{ ruleItems: [{ id: '2', attribute: 'a', operator: 'b', value: 'c' }] }] }
285
+ { sections: [{ id: '1', ruleItems: [{ id: '1', attribute: 'a', operator: 'b', value: 'c' }] }] },
286
+ { sections: [{ id: '1', ruleItems: [{ id: '2', attribute: 'a', operator: 'b', value: 'c' }] }] }
265
287
  )
266
288
  ).toBe(true);
267
289
  });
@@ -271,11 +293,11 @@ describe('Compare rules', () => {
271
293
  compareRules(
272
294
  {
273
295
  sections: [
274
- { ruleItems: [{ id: '1', attribute: 'a', operator: 'b', value: 'c' }] },
275
- { ruleItems: [] },
296
+ { id: '1', ruleItems: [{ id: '1', attribute: 'a', operator: 'b', value: 'c' }] },
297
+ { id: '1', ruleItems: [] },
276
298
  ],
277
299
  },
278
- { sections: [{ ruleItems: [{ id: '2', attribute: 'a', operator: 'b', value: 'c' }] }] }
300
+ { sections: [{ id: '1', ruleItems: [{ id: '2', attribute: 'a', operator: 'b', value: 'c' }] }] }
279
301
  )
280
302
  ).toBe(true);
281
303
  });
@@ -285,14 +307,14 @@ describe('Compare rules', () => {
285
307
  compareRules(
286
308
  {
287
309
  sections: [
288
- { ruleItems: [{ id: '1', attribute: 'a', operator: 'b', value: 'c' }] },
289
- { ruleItems: [] },
310
+ { id: '1', ruleItems: [{ id: '1', attribute: 'a', operator: 'b', value: 'c' }] },
311
+ { id: '1', ruleItems: [] },
290
312
  ],
291
313
  },
292
314
  {
293
315
  sections: [
294
- { ruleItems: [{ id: '2', attribute: 'a', operator: 'b', value: 'c' }] },
295
- { ruleItems: [] },
316
+ { id: '1', ruleItems: [{ id: '2', attribute: 'a', operator: 'b', value: 'c' }] },
317
+ { id: '1', ruleItems: [] },
296
318
  ],
297
319
  }
298
320
  )
@@ -303,12 +325,12 @@ describe('Compare rules', () => {
303
325
  expect(
304
326
  compareRules(
305
327
  {
306
- sections: [{ ruleItems: [{ id: '1', attribute: 'a', operator: 'b', value: 'c' }] }],
328
+ sections: [{ id: '1', ruleItems: [{ id: '1', attribute: 'a', operator: 'b', value: 'c' }] }],
307
329
  },
308
330
  {
309
331
  sections: [
310
- { ruleItems: [{ id: '2', attribute: 'a', operator: 'b', value: 'c' }] },
311
- { ruleItems: [] },
332
+ { id: '1', ruleItems: [{ id: '2', attribute: 'a', operator: 'b', value: 'c' }] },
333
+ { id: '1', ruleItems: [] },
312
334
  ],
313
335
  }
314
336
  )
@@ -320,15 +342,15 @@ describe('Compare rules', () => {
320
342
  compareRules(
321
343
  {
322
344
  sections: [
323
- { ruleItems: [{ id: '1', attribute: 'a', operator: 'b', value: 'c' }] },
324
- { ruleItems: [{ id: '2', attribute: 'b', operator: 'c', value: 'd' }] },
325
- { ruleItems: [] },
345
+ { id: '1', ruleItems: [{ id: '1', attribute: 'a', operator: 'b', value: 'c' }] },
346
+ { id: '1', ruleItems: [{ id: '2', attribute: 'b', operator: 'c', value: 'd' }] },
347
+ { id: '1', ruleItems: [] },
326
348
  ],
327
349
  },
328
350
  {
329
351
  sections: [
330
- { ruleItems: [{ id: '3', attribute: 'a', operator: 'b', value: 'c' }] },
331
- { ruleItems: [{ id: '4', attribute: 'b', operator: 'c', value: 'd' }] },
352
+ { id: '1', ruleItems: [{ id: '3', attribute: 'a', operator: 'b', value: 'c' }] },
353
+ { id: '1', ruleItems: [{ id: '4', attribute: 'b', operator: 'c', value: 'd' }] },
332
354
  ],
333
355
  }
334
356
  )
@@ -341,24 +363,26 @@ describe('Compare rules', () => {
341
363
  {
342
364
  sections: [
343
365
  {
366
+ id: '1',
344
367
  ruleItems: [
345
368
  { id: '1', attribute: 'a', operator: 'b', value: ['c', 'd'] },
346
369
  { id: '5', attribute: 'c', operator: 'd', value: 'e' },
347
370
  ],
348
371
  },
349
- { ruleItems: [{ id: '2', attribute: 'b', operator: 'c', value: 'd' }] },
350
- { ruleItems: [] },
372
+ { id: '1', ruleItems: [{ id: '2', attribute: 'b', operator: 'c', value: 'd' }] },
373
+ { id: '1', ruleItems: [] },
351
374
  ],
352
375
  },
353
376
  {
354
377
  sections: [
355
378
  {
379
+ id: '1',
356
380
  ruleItems: [
357
381
  { id: '3', attribute: 'a', operator: 'b', value: ['d', 'c'] },
358
382
  { id: '6', attribute: 'c', operator: 'd', value: 'e' },
359
383
  ],
360
384
  },
361
- { ruleItems: [{ id: '4', attribute: 'b', operator: 'c', value: 'd' }] },
385
+ { id: '1', ruleItems: [{ id: '4', attribute: 'b', operator: 'c', value: 'd' }] },
362
386
  ],
363
387
  }
364
388
  )
@@ -370,27 +394,27 @@ describe('Compare rules', () => {
370
394
  compareRules(
371
395
  {
372
396
  sections: [
397
+ { id: '1', ruleItems: [{ id: '1', attribute: 'a', operator: 'b', value: 'c' }] },
373
398
  {
374
- ruleItems: [{ id: '1', attribute: 'a', operator: 'b', value: 'c' }],
375
- },
376
- {
399
+ id: '1',
377
400
  ruleItems: [
378
401
  { id: '2', attribute: 'b', operator: 'c', value: 'd' },
379
402
  { id: '5', attribute: 'c', operator: 'd', value: 'e' },
380
403
  ],
381
404
  },
382
- { ruleItems: [] },
405
+ { id: '1', ruleItems: [] },
383
406
  ],
384
407
  },
385
408
  {
386
409
  sections: [
387
410
  {
411
+ id: '1',
388
412
  ruleItems: [
389
413
  { id: '3', attribute: 'a', operator: 'b', value: 'c' },
390
414
  { id: '6', attribute: 'c', operator: 'd', value: 'e' },
391
415
  ],
392
416
  },
393
- { ruleItems: [{ id: '4', attribute: 'b', operator: 'c', value: 'd' }] },
417
+ { id: '1', ruleItems: [{ id: '4', attribute: 'b', operator: 'c', value: 'd' }] },
394
418
  ],
395
419
  }
396
420
  )
@@ -403,29 +427,32 @@ describe('Compare rules', () => {
403
427
  {
404
428
  sections: [
405
429
  {
430
+ id: '1',
406
431
  ruleItems: [
407
432
  { id: '1', attribute: 'a', operator: 'b', value: 'c' },
408
433
  { id: '5', attribute: 'c', operator: 'd', value: 'e' },
409
434
  ],
410
435
  },
411
436
  {
437
+ id: '1',
412
438
  ruleItems: [
413
439
  { id: '2', attribute: 'b', operator: 'c', value: 'd' },
414
440
  { id: '8', attribute: 'c', operator: 'd', value: 'e' },
415
441
  ],
416
442
  },
417
- { ruleItems: [] },
443
+ { id: '1', ruleItems: [] },
418
444
  ],
419
445
  },
420
446
  {
421
447
  sections: [
422
448
  {
449
+ id: '1',
423
450
  ruleItems: [
424
451
  { id: '3', attribute: 'a', operator: 'b', value: 'c' },
425
452
  { id: '6', attribute: 'c', operator: 'd', value: 'e' },
426
453
  ],
427
454
  },
428
- { ruleItems: [{ id: '4', attribute: 'b', operator: 'c', value: 'd' }] },
455
+ { id: '1', ruleItems: [{ id: '4', attribute: 'b', operator: 'c', value: 'd' }] },
429
456
  ],
430
457
  }
431
458
  )
@@ -438,26 +465,26 @@ describe('Compare rules', () => {
438
465
  {
439
466
  sections: [
440
467
  {
468
+ id: '1',
441
469
  ruleItems: [
442
470
  { id: '1', attribute: 'a', operator: 'b', value: 'c' },
443
471
  { id: '5', attribute: 'c', operator: 'd', value: 'e' },
444
472
  ],
445
473
  },
446
- {
447
- ruleItems: [{ id: '2', attribute: 'b', operator: 'c', value: 'd' }],
448
- },
449
- { ruleItems: [{ id: '10', attribute: 'a', operator: 'b', value: 'c' }] },
474
+ { id: '1', ruleItems: [{ id: '2', attribute: 'b', operator: 'c', value: 'd' }] },
475
+ { id: '1', ruleItems: [{ id: '10', attribute: 'a', operator: 'b', value: 'c' }] },
450
476
  ],
451
477
  },
452
478
  {
453
479
  sections: [
454
480
  {
481
+ id: '1',
455
482
  ruleItems: [
456
483
  { id: '3', attribute: 'a', operator: 'b', value: 'c' },
457
484
  { id: '6', attribute: 'c', operator: 'd', value: 'e' },
458
485
  ],
459
486
  },
460
- { ruleItems: [{ id: '4', attribute: 'b', operator: 'c', value: 'd' }] },
487
+ { id: '1', ruleItems: [{ id: '4', attribute: 'b', operator: 'c', value: 'd' }] },
461
488
  ],
462
489
  }
463
490
  )
@@ -468,11 +495,11 @@ describe('Compare rules', () => {
468
495
  describe('Compare mappings', () => {
469
496
  test('match #1', () => {
470
497
  const mappingsA = [
471
- { attribute: 'contentLanguage', value: 'en', rules: { sections: [{ ruleItems: [] }] } },
498
+ { id: '1', attribute: 'contentLanguage', value: 'en', rules: { sections: [{ id: '1', ruleItems: [] }] } },
472
499
  ] as ProductUploadMapping[];
473
500
 
474
501
  const mappingsB = [
475
- { attribute: 'contentLanguage', value: 'en', rules: { sections: [{ ruleItems: [] }] } },
502
+ { id: '1', attribute: 'contentLanguage', value: 'en', rules: { sections: [{ id: '1', ruleItems: [] }] } },
476
503
  ] as ProductUploadMapping[];
477
504
 
478
505
  expect(compareMappings(mappingsA, mappingsB)).toBe(true);
@@ -534,11 +561,11 @@ describe('Compare mappings', () => {
534
561
 
535
562
  test('no match #1', () => {
536
563
  const mappingsA = [
537
- { attribute: 'contentLanguage', value: 'uk', rules: { sections: [{ ruleItems: [] }] } },
564
+ { id: '1', attribute: 'contentLanguage', value: 'uk', rules: { sections: [{ id: '1', ruleItems: [] }] } },
538
565
  ] as ProductUploadMapping[];
539
566
 
540
567
  const mappingsB = [
541
- { attribute: 'contentLanguage', value: 'en', rules: { sections: [{ ruleItems: [] }] } },
568
+ { id: '1', attribute: 'contentLanguage', value: 'en', rules: { sections: [{ id: '1', ruleItems: [] }] } },
542
569
  ] as ProductUploadMapping[];
543
570
 
544
571
  expect(compareMappings(mappingsA, mappingsB)).toBe(false);
@@ -546,11 +573,11 @@ describe('Compare mappings', () => {
546
573
 
547
574
  test('no match #2', () => {
548
575
  const mappingsA = [
549
- { attribute: 'title', value: 'en', rules: { sections: [{ ruleItems: [] }] } },
576
+ { id: '1', attribute: 'title', value: 'en', rules: { sections: [{ id: '1', ruleItems: [] }] } },
550
577
  ] as ProductUploadMapping[];
551
578
 
552
579
  const mappingsB = [
553
- { attribute: 'contentLanguage', value: 'en', rules: { sections: [{ ruleItems: [] }] } },
580
+ { id: '1', attribute: 'contentLanguage', value: 'en', rules: { sections: [{ id: '1', ruleItems: [] }] } },
554
581
  ] as ProductUploadMapping[];
555
582
 
556
583
  expect(compareMappings(mappingsA, mappingsB)).toBe(false);