@outliant/sunrise-utils 1.0.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 (40) hide show
  1. package/.eslintignore +5 -0
  2. package/.eslintrc +53 -0
  3. package/.github/workflows/pr-dev-workflow.yml +16 -0
  4. package/.nvmrc +1 -0
  5. package/.release-it.js +26 -0
  6. package/.vscode/launch.json +24 -0
  7. package/.vscode/settings.json +7 -0
  8. package/CHANGELOG.md +12 -0
  9. package/README.md +19 -0
  10. package/changelog.hbs +13 -0
  11. package/helpers/es.js +6 -0
  12. package/helpers/projectFilter/projectFieldFilter.js +587 -0
  13. package/helpers/searchFilter.js +86 -0
  14. package/helpers/taskFilter/criticalPathFilter.js +144 -0
  15. package/helpers/taskFilter/index.js +228 -0
  16. package/helpers/taskFilter/onHoldFilter.js +101 -0
  17. package/helpers/taskFilter/ownerFilter.js +148 -0
  18. package/helpers/taskFilter/pathAgeFilter.js +18 -0
  19. package/helpers/taskFilter/regionFilter.js +82 -0
  20. package/helpers/taskFilter/statusFilter.js +177 -0
  21. package/helpers/taskFilter/taskFieldFilter.js +309 -0
  22. package/helpers/taskSortScript.js +356 -0
  23. package/index.d.ts +11 -0
  24. package/index.js +9 -0
  25. package/lib/fieldConditions.js +166 -0
  26. package/lib/logger.js +48 -0
  27. package/lib/taskPipeline.js +137 -0
  28. package/package.json +73 -0
  29. package/test/helpers/projectFilter/projectFieldFilter.spec.js +881 -0
  30. package/test/helpers/taskFilter/criticalPathFilter.spec.js +174 -0
  31. package/test/helpers/taskFilter/index.spec.js +339 -0
  32. package/test/helpers/taskFilter/onHoldFilter.spec.js +112 -0
  33. package/test/helpers/taskFilter/ownerFilter.spec.js +226 -0
  34. package/test/helpers/taskFilter/pathAgeFilter.spec.js +47 -0
  35. package/test/helpers/taskFilter/regionFilter.spec.js +131 -0
  36. package/test/helpers/taskFilter/statusFilter.spec.js +197 -0
  37. package/test/helpers/taskFilter/taskFieldFilter.spec.js +355 -0
  38. package/test/lib/fieldConditions.spec.js +17 -0
  39. package/test/lib/logger.spec.js +117 -0
  40. package/test/lib/taskPipeline.spec.js +162 -0
@@ -0,0 +1,881 @@
1
+ 'use strict';
2
+
3
+ /* eslint-env node, mocha */
4
+ const { expect } = require('chai');
5
+
6
+ // To test
7
+ const projectFieldFilter = require('../../../helpers/projectFilter/projectFieldFilter');
8
+
9
+ describe('projectFilter/projectFieldFilter', function () {
10
+ const filters = [
11
+ {
12
+ input: {
13
+ condition: 'is_empty',
14
+ field_id: 'b6d0fe7c-f049-4b17-b6b9-d0bce4c35e57',
15
+ type: 'dealinformation',
16
+ field_type: 'number',
17
+ value: '',
18
+ second_value: ''
19
+ },
20
+ output: {
21
+ bool: {
22
+ should: [
23
+ {
24
+ bool: {
25
+ must: [
26
+ {
27
+ nested: {
28
+ path: 'fields',
29
+ query: {
30
+ bool: {
31
+ must: [
32
+ {
33
+ term: {
34
+ 'fields.id': {
35
+ value: 'b6d0fe7c-f049-4b17-b6b9-d0bce4c35e57'
36
+ }
37
+ }
38
+ },
39
+ { term: { 'fields.text': { value: '' } } }
40
+ ]
41
+ }
42
+ }
43
+ }
44
+ }
45
+ ]
46
+ }
47
+ },
48
+ {
49
+ bool: {
50
+ must_not: [
51
+ {
52
+ nested: {
53
+ path: 'fields',
54
+ query: {
55
+ bool: {
56
+ must: [
57
+ {
58
+ term: {
59
+ 'fields.id': {
60
+ value: 'b6d0fe7c-f049-4b17-b6b9-d0bce4c35e57'
61
+ }
62
+ }
63
+ }
64
+ ]
65
+ }
66
+ }
67
+ }
68
+ }
69
+ ]
70
+ }
71
+ }
72
+ ]
73
+ }
74
+ }
75
+ },
76
+ {
77
+ input: {
78
+ condition: 'is_not_empty',
79
+ field_id: 'b6d0fe7c-f049-4b17-b6b9-d0bce4c35e57',
80
+ type: 'contactinformation',
81
+ field_type: 'number',
82
+ value: '',
83
+ second_value: ''
84
+ },
85
+ output: {
86
+ bool: {
87
+ must: [
88
+ {
89
+ nested: {
90
+ path: 'fields',
91
+ query: {
92
+ bool: {
93
+ must: [
94
+ {
95
+ term: {
96
+ 'fields.id': {
97
+ value: 'b6d0fe7c-f049-4b17-b6b9-d0bce4c35e57'
98
+ }
99
+ }
100
+ },
101
+ { exists: { field: 'fields.text' } },
102
+ {
103
+ bool: {
104
+ must_not: [{ term: { 'fields.text': { value: '' } } }]
105
+ }
106
+ }
107
+ ]
108
+ }
109
+ }
110
+ }
111
+ }
112
+ ]
113
+ }
114
+ }
115
+ },
116
+ {
117
+ input: {
118
+ condition: 'is_any_of',
119
+ field_id: '2726455e-fd84-4049-9756-e981e20a8772',
120
+ type: 'ticketinformation',
121
+ field_type: 'select',
122
+ value: 'Commercial;Hanwha',
123
+ second_value: ''
124
+ },
125
+ output: {
126
+ nested: {
127
+ path: 'fields',
128
+ query: {
129
+ bool: {
130
+ must: [
131
+ {
132
+ term: {
133
+ 'fields.id': {
134
+ value: '2726455e-fd84-4049-9756-e981e20a8772'
135
+ }
136
+ }
137
+ },
138
+ { terms: { 'fields.text': ['Commercial', 'Hanwha'] } }
139
+ ]
140
+ }
141
+ }
142
+ }
143
+ }
144
+ },
145
+ {
146
+ input: {
147
+ condition: 'is_any_of',
148
+ field_id: '2726455e-fd84-4049-9756-e981e20a8772',
149
+ type: 'dealinformation',
150
+ field_type: 'select',
151
+ value: ['Commercial', 'Hanwha'],
152
+ second_value: ''
153
+ },
154
+ output: {
155
+ nested: {
156
+ path: 'fields',
157
+ query: {
158
+ bool: {
159
+ must: [
160
+ {
161
+ term: {
162
+ 'fields.id': {
163
+ value: '2726455e-fd84-4049-9756-e981e20a8772'
164
+ }
165
+ }
166
+ },
167
+ { terms: { 'fields.text': ['Commercial', 'Hanwha'] } }
168
+ ]
169
+ }
170
+ }
171
+ }
172
+ }
173
+ },
174
+ {
175
+ input: {
176
+ condition: 'is_equal',
177
+ field_id: '2726455e-fd84-4049-9756-e981e20a8772',
178
+ type: 'dealinformation',
179
+ field_type: 'select',
180
+ value: 'Commercial',
181
+ second_value: ''
182
+ },
183
+ output: {
184
+ bool: {
185
+ must: [
186
+ {
187
+ nested: {
188
+ path: 'fields',
189
+ query: {
190
+ bool: {
191
+ must: [
192
+ {
193
+ term: {
194
+ 'fields.id': {
195
+ value: '2726455e-fd84-4049-9756-e981e20a8772'
196
+ }
197
+ }
198
+ },
199
+ { term: { 'fields.text': { value: 'Commercial' } } }
200
+ ]
201
+ }
202
+ }
203
+ }
204
+ }
205
+ ]
206
+ }
207
+ }
208
+ },
209
+ {
210
+ input: {
211
+ condition: 'not_equal',
212
+ field_id: '2726455e-fd84-4049-9756-e981e20a8772',
213
+ type: 'dealinformation',
214
+ field_type: 'select',
215
+ value: 'Mission',
216
+ second_value: ''
217
+ },
218
+ output: {
219
+ bool: {
220
+ must: [
221
+ {
222
+ nested: {
223
+ path: 'fields',
224
+ query: {
225
+ bool: {
226
+ must: [
227
+ {
228
+ term: {
229
+ 'fields.id': {
230
+ value: '2726455e-fd84-4049-9756-e981e20a8772'
231
+ }
232
+ }
233
+ }
234
+ ]
235
+ }
236
+ }
237
+ }
238
+ }
239
+ ],
240
+ must_not: [
241
+ {
242
+ nested: {
243
+ path: 'fields',
244
+ query: { term: { 'fields.text': { value: 'Mission' } } }
245
+ }
246
+ }
247
+ ]
248
+ }
249
+ }
250
+ },
251
+ {
252
+ input: {
253
+ condition: 'less_than',
254
+ field_id: 'b6d0fe7c-f049-4b17-b6b9-d0bce4c35e57',
255
+ type: 'dealinformation',
256
+ field_type: 'number',
257
+ value: '1',
258
+ second_value: ''
259
+ },
260
+ output: {
261
+ bool: {
262
+ must: [
263
+ {
264
+ nested: {
265
+ path: 'fields',
266
+ query: {
267
+ bool: {
268
+ must: [
269
+ {
270
+ term: {
271
+ 'fields.id': {
272
+ value: 'b6d0fe7c-f049-4b17-b6b9-d0bce4c35e57'
273
+ }
274
+ }
275
+ },
276
+ { range: { 'fields.number': { lt: 1 } } }
277
+ ]
278
+ }
279
+ }
280
+ }
281
+ }
282
+ ]
283
+ }
284
+ }
285
+ },
286
+ {
287
+ input: {
288
+ condition: 'less_than_or_equal',
289
+ field_id: 'b6d0fe7c-f049-4b17-b6b9-d0bce4c35e57',
290
+ type: 'dealinformation',
291
+ field_type: 'number',
292
+ value: '1',
293
+ second_value: ''
294
+ },
295
+ output: {
296
+ bool: {
297
+ must: [
298
+ {
299
+ nested: {
300
+ path: 'fields',
301
+ query: {
302
+ bool: {
303
+ must: [
304
+ {
305
+ term: {
306
+ 'fields.id': {
307
+ value: 'b6d0fe7c-f049-4b17-b6b9-d0bce4c35e57'
308
+ }
309
+ }
310
+ },
311
+ { range: { 'fields.number': { lte: 1 } } }
312
+ ]
313
+ }
314
+ }
315
+ }
316
+ }
317
+ ]
318
+ }
319
+ }
320
+ },
321
+ {
322
+ input: {
323
+ condition: 'greater_than',
324
+ field_id: 'b6d0fe7c-f049-4b17-b6b9-d0bce4c35e57',
325
+ type: 'dealinformation',
326
+ field_type: 'number',
327
+ value: '1',
328
+ second_value: ''
329
+ },
330
+ output: {
331
+ bool: {
332
+ must: [
333
+ {
334
+ nested: {
335
+ path: 'fields',
336
+ query: {
337
+ bool: {
338
+ must: [
339
+ {
340
+ term: {
341
+ 'fields.id': {
342
+ value: 'b6d0fe7c-f049-4b17-b6b9-d0bce4c35e57'
343
+ }
344
+ }
345
+ },
346
+ { range: { 'fields.number': { gt: 1 } } }
347
+ ]
348
+ }
349
+ }
350
+ }
351
+ }
352
+ ]
353
+ }
354
+ }
355
+ },
356
+ {
357
+ input: {
358
+ condition: 'greater_than_or_equal',
359
+ field_id: 'b6d0fe7c-f049-4b17-b6b9-d0bce4c35e57',
360
+ type: 'dealinformation',
361
+ field_type: 'number',
362
+ value: '1',
363
+ second_value: ''
364
+ },
365
+ output: {
366
+ bool: {
367
+ must: [
368
+ {
369
+ nested: {
370
+ path: 'fields',
371
+ query: {
372
+ bool: {
373
+ must: [
374
+ {
375
+ term: {
376
+ 'fields.id': {
377
+ value: 'b6d0fe7c-f049-4b17-b6b9-d0bce4c35e57'
378
+ }
379
+ }
380
+ },
381
+ { range: { 'fields.number': { gte: 1 } } }
382
+ ]
383
+ }
384
+ }
385
+ }
386
+ }
387
+ ]
388
+ }
389
+ }
390
+ },
391
+ {
392
+ input: {
393
+ condition: 'between',
394
+ field_id: 'b6d0fe7c-f049-4b17-b6b9-d0bce4c35e57',
395
+ type: 'dealinformation',
396
+ field_type: 'number',
397
+ value: '1',
398
+ second_value: '100'
399
+ },
400
+ output: {
401
+ bool: {
402
+ must: [
403
+ {
404
+ nested: {
405
+ path: 'fields',
406
+ query: {
407
+ bool: {
408
+ must: [
409
+ {
410
+ term: {
411
+ 'fields.id': {
412
+ value: 'b6d0fe7c-f049-4b17-b6b9-d0bce4c35e57'
413
+ }
414
+ }
415
+ },
416
+ { range: { 'fields.number': { gte: 1, lte: 100 } } }
417
+ ]
418
+ }
419
+ }
420
+ }
421
+ }
422
+ ]
423
+ }
424
+ }
425
+ },
426
+ {
427
+ input: {
428
+ condition: 'before',
429
+ field_id: '5a681cb0-0682-48a8-875f-a525c795d398',
430
+ type: 'dealinformation',
431
+ field_type: 'date',
432
+ value: 1676419200000,
433
+ second_value: ''
434
+ },
435
+ output: {
436
+ bool: {
437
+ must: [
438
+ {
439
+ nested: {
440
+ path: 'fields',
441
+ query: {
442
+ bool: {
443
+ must: [
444
+ {
445
+ term: {
446
+ 'fields.id': {
447
+ value: '5a681cb0-0682-48a8-875f-a525c795d398'
448
+ }
449
+ }
450
+ },
451
+ { range: { 'fields.number': { lt: 1676390400000 } } }
452
+ ]
453
+ }
454
+ }
455
+ }
456
+ }
457
+ ]
458
+ }
459
+ }
460
+ },
461
+ {
462
+ input: {
463
+ condition: 'after',
464
+ field_id: '5a681cb0-0682-48a8-875f-a525c795d398',
465
+ type: 'dealinformation',
466
+ field_type: 'date',
467
+ value: 1676419200000,
468
+ second_value: ''
469
+ },
470
+ output: {
471
+ bool: {
472
+ must: [
473
+ {
474
+ nested: {
475
+ path: 'fields',
476
+ query: {
477
+ bool: {
478
+ must: [
479
+ {
480
+ term: {
481
+ 'fields.id': {
482
+ value: '5a681cb0-0682-48a8-875f-a525c795d398'
483
+ }
484
+ }
485
+ },
486
+ { range: { 'fields.number': { gt: 1676476799999 } } }
487
+ ]
488
+ }
489
+ }
490
+ }
491
+ }
492
+ ]
493
+ }
494
+ }
495
+ },
496
+ {
497
+ input: {
498
+ condition: 'between',
499
+ field_id: '5a681cb0-0682-48a8-875f-a525c795d398',
500
+ type: 'dealinformation',
501
+ field_type: 'date',
502
+ value: 1676419200000,
503
+ second_value: 1677283200000
504
+ },
505
+ output: {
506
+ bool: {
507
+ must: [
508
+ {
509
+ nested: {
510
+ path: 'fields',
511
+ query: {
512
+ bool: {
513
+ must: [
514
+ {
515
+ term: {
516
+ 'fields.id': {
517
+ value: '5a681cb0-0682-48a8-875f-a525c795d398'
518
+ }
519
+ }
520
+ },
521
+ {
522
+ range: {
523
+ 'fields.number': {
524
+ gte: 1676390400000,
525
+ lte: 1677340799999
526
+ }
527
+ }
528
+ }
529
+ ]
530
+ }
531
+ }
532
+ }
533
+ }
534
+ ]
535
+ }
536
+ }
537
+ },
538
+ {
539
+ input: {
540
+ condition: 'unknown_condition',
541
+ field_id: '5a681cb0-0682-48a8-875f-a525c795d398',
542
+ type: 'dealinformation',
543
+ field_type: 'date',
544
+ value: 1676419200000,
545
+ second_value: 1677283200000
546
+ },
547
+ output: null
548
+ },
549
+ {
550
+ input: {
551
+ condition: 'is_equal',
552
+ field_id: '5a681cb0-0682-48a8-875f-a525c795d398',
553
+ type: 'dealinformation',
554
+ field_type: 'date',
555
+ value: 1675296000000,
556
+ second_value: ''
557
+ },
558
+ output: {
559
+ bool: {
560
+ must: [
561
+ {
562
+ nested: {
563
+ path: 'fields',
564
+ query: {
565
+ bool: {
566
+ must: [
567
+ {
568
+ term: {
569
+ 'fields.id': {
570
+ value: '5a681cb0-0682-48a8-875f-a525c795d398'
571
+ }
572
+ }
573
+ },
574
+ {
575
+ range: {
576
+ 'fields.number': {
577
+ gte: 1675267200000,
578
+ lte: 1675353599999
579
+ }
580
+ }
581
+ }
582
+ ]
583
+ }
584
+ }
585
+ }
586
+ }
587
+ ]
588
+ }
589
+ }
590
+ },
591
+ {
592
+ input: {
593
+ condition: 'is_equal',
594
+ field_id: 'b6d0fe7c-f049-4b17-b6b9-d0bce4c35e57',
595
+ type: 'dealinformation',
596
+ field_type: 'number',
597
+ value: '1',
598
+ second_value: ''
599
+ },
600
+ output: {
601
+ bool: {
602
+ must: [
603
+ {
604
+ nested: {
605
+ path: 'fields',
606
+ query: {
607
+ bool: {
608
+ must: [
609
+ {
610
+ term: {
611
+ 'fields.id': {
612
+ value: 'b6d0fe7c-f049-4b17-b6b9-d0bce4c35e57'
613
+ }
614
+ }
615
+ },
616
+ { term: { 'fields.number': { value: 1 } } }
617
+ ]
618
+ }
619
+ }
620
+ }
621
+ }
622
+ ]
623
+ }
624
+ }
625
+ },
626
+ {
627
+ input: {
628
+ condition: 'is_equal',
629
+ field_id: '74ce059a-5e08-45b4-879f-6a962fe63dff',
630
+ type: 'dealinformation',
631
+ field_type: 'checkbox',
632
+ value:
633
+ 'Change Order Missing Documents;Change Order Processed After Schedule Installation',
634
+ second_value: ''
635
+ },
636
+ output: {
637
+ bool: {
638
+ must: [
639
+ {
640
+ nested: {
641
+ path: 'fields',
642
+ query: {
643
+ bool: {
644
+ must: [
645
+ {
646
+ term: {
647
+ 'fields.id': {
648
+ value: '74ce059a-5e08-45b4-879f-6a962fe63dff'
649
+ }
650
+ }
651
+ },
652
+ {
653
+ bool: {
654
+ should: [
655
+ {
656
+ match: {
657
+ 'fields.text.analyzed': {
658
+ query: 'Change Order Missing Documents',
659
+ operator: 'and'
660
+ }
661
+ }
662
+ },
663
+ {
664
+ match: {
665
+ 'fields.text.analyzed': {
666
+ query:
667
+ 'Change Order Processed After Schedule Installation',
668
+ operator: 'and'
669
+ }
670
+ }
671
+ }
672
+ ]
673
+ }
674
+ }
675
+ ]
676
+ }
677
+ }
678
+ }
679
+ }
680
+ ]
681
+ }
682
+ }
683
+ },
684
+ {
685
+ input: {
686
+ condition: 'is_equal',
687
+ field_id: '74ce059a-5e08-45b4-879f-6a962fe63dff',
688
+ type: 'dealinformation',
689
+ field_type: 'checkbox',
690
+ value: [
691
+ 'Change Order Missing Documents',
692
+ 'Change Order Processed After Schedule Installation'
693
+ ],
694
+ second_value: ''
695
+ },
696
+ output: {
697
+ bool: {
698
+ must: [
699
+ {
700
+ nested: {
701
+ path: 'fields',
702
+ query: {
703
+ bool: {
704
+ must: [
705
+ {
706
+ term: {
707
+ 'fields.id': {
708
+ value: '74ce059a-5e08-45b4-879f-6a962fe63dff'
709
+ }
710
+ }
711
+ },
712
+ {
713
+ bool: {
714
+ should: [
715
+ {
716
+ match: {
717
+ 'fields.text.analyzed': {
718
+ query: 'Change Order Missing Documents',
719
+ operator: 'and'
720
+ }
721
+ }
722
+ },
723
+ {
724
+ match: {
725
+ 'fields.text.analyzed': {
726
+ query:
727
+ 'Change Order Processed After Schedule Installation',
728
+ operator: 'and'
729
+ }
730
+ }
731
+ }
732
+ ]
733
+ }
734
+ }
735
+ ]
736
+ }
737
+ }
738
+ }
739
+ }
740
+ ]
741
+ }
742
+ }
743
+ },
744
+ {
745
+ input: {
746
+ condition: 'is_equal',
747
+ field_id: '763c6281-a352-49b3-bcf5-c2721a39fa05',
748
+ type: 'dealinformation',
749
+ field_type: 'textarea',
750
+ value: 'test test',
751
+ second_value: ''
752
+ },
753
+ output: {
754
+ bool: {
755
+ must: [
756
+ {
757
+ nested: {
758
+ path: 'fields',
759
+ query: {
760
+ bool: {
761
+ must: [
762
+ {
763
+ term: {
764
+ 'fields.id': {
765
+ value: '763c6281-a352-49b3-bcf5-c2721a39fa05'
766
+ }
767
+ }
768
+ },
769
+ {
770
+ query_string: {
771
+ fields: ['fields.text'],
772
+ query: '*test test*'
773
+ }
774
+ }
775
+ ]
776
+ }
777
+ }
778
+ }
779
+ }
780
+ ]
781
+ }
782
+ }
783
+ },
784
+ {
785
+ input: {
786
+ condition: 'not_equal',
787
+ field_id: '5a681cb0-0682-48a8-875f-a525c795d398',
788
+ type: 'dealinformation',
789
+ field_type: 'date',
790
+ value: 1677196800000,
791
+ second_value: ''
792
+ },
793
+ output: {
794
+ bool: {
795
+ must: [
796
+ {
797
+ nested: {
798
+ path: 'fields',
799
+ query: {
800
+ bool: {
801
+ must: [
802
+ {
803
+ term: {
804
+ 'fields.id': {
805
+ value: '5a681cb0-0682-48a8-875f-a525c795d398'
806
+ }
807
+ }
808
+ }
809
+ ]
810
+ }
811
+ }
812
+ }
813
+ }
814
+ ],
815
+ must_not: [
816
+ {
817
+ nested: {
818
+ path: 'fields',
819
+ query: {
820
+ range: {
821
+ 'fields.number': { gte: 1677168000000, lte: 1677254399999 }
822
+ }
823
+ }
824
+ }
825
+ }
826
+ ]
827
+ }
828
+ }
829
+ },
830
+ {
831
+ input: {
832
+ condition: 'not_equal',
833
+ field_id: 'b6d0fe7c-f049-4b17-b6b9-d0bce4c35e57',
834
+ type: 'dealinformation',
835
+ field_type: 'number',
836
+ value: '1',
837
+ second_value: ''
838
+ },
839
+ output: {
840
+ bool: {
841
+ must: [
842
+ {
843
+ nested: {
844
+ path: 'fields',
845
+ query: {
846
+ bool: {
847
+ must: [
848
+ {
849
+ term: {
850
+ 'fields.id': {
851
+ value: 'b6d0fe7c-f049-4b17-b6b9-d0bce4c35e57'
852
+ }
853
+ }
854
+ }
855
+ ]
856
+ }
857
+ }
858
+ }
859
+ }
860
+ ],
861
+ must_not: [
862
+ {
863
+ nested: {
864
+ path: 'fields',
865
+ query: { term: { 'fields.number': { value: 1 } } }
866
+ }
867
+ }
868
+ ]
869
+ }
870
+ }
871
+ }
872
+ ];
873
+ filters.forEach((filter) => {
874
+ it(`${filter.input.condition}: ${JSON.stringify(
875
+ filter.input.value
876
+ )}`, (done) => {
877
+ expect(projectFieldFilter(filter.input)).to.deep.equal(filter.output);
878
+ done();
879
+ });
880
+ });
881
+ });