@mic-rexjs/usecases-react 1.5.1 → 1.6.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.
@@ -109,6 +109,9 @@ var fileUseCase = function fileUseCase() {
109
109
  isImage: isImage
110
110
  });
111
111
  };
112
+ var subtractionReducer = _globals.jest.fn(function (value1, value2) {
113
+ return value1 - value2;
114
+ });
112
115
  var mathUseCase = function mathUseCase() {
113
116
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
114
117
  var _options$extraValue = options.extraValue,
@@ -116,12 +119,9 @@ var mathUseCase = function mathUseCase() {
116
119
  var add = function add(value1, value2) {
117
120
  return value1 + value2 + extraValue;
118
121
  };
119
- var subtraction = function subtraction(value1, value2) {
120
- return value1 - value2;
121
- };
122
122
  return {
123
123
  add: add,
124
- subtraction: subtraction
124
+ subtraction: subtractionReducer
125
125
  };
126
126
  };
127
127
  var fieldPathUseCase = function fieldPathUseCase() {
@@ -239,6 +239,9 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
239
239
  callback();
240
240
  }, deps);
241
241
  };
242
+ (0, _globals.beforeEach)(function () {
243
+ subtractionReducer.mockClear();
244
+ });
242
245
  (0, _globals.describe)('useUseCase', function () {
243
246
  (0, _globals.describe)('`useUseCase` should work with 2+ arguments on provider mode', function () {
244
247
  (0, _globals.test)('check `context.length`', function () {
@@ -406,6 +409,126 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
406
409
  (0, _globals.expect)(result.current[1].init).not.toBe(init);
407
410
  (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(1);
408
411
  });
412
+ (0, _globals.test)('reducer call should be cached if component is at rendering phase', function () {
413
+ var buttonText = 'button';
414
+ var addReducer = _globals.jest.fn(function (entity, substring) {
415
+ return entity + substring;
416
+ });
417
+ var stringUseCase = function stringUseCase() {
418
+ var entityReducers = (0, _usecases.entityUseCase)();
419
+ return _objectSpread(_objectSpread({}, entityReducers), {}, {
420
+ add: addReducer
421
+ });
422
+ };
423
+ var CacheTestComponent = function CacheTestComponent() {
424
+ var _useUseCase6 = (0, _.useUseCase)('', stringUseCase),
425
+ _useUseCase7 = (0, _slicedToArray2["default"])(_useUseCase6, 2),
426
+ add = _useUseCase7[1].add;
427
+ var update = (0, _ahooks.useUpdate)();
428
+ var onClick = function onClick() {
429
+ update();
430
+ };
431
+ add('x');
432
+ return (0, _jsxRuntime.jsx)("button", {
433
+ onClick: onClick,
434
+ children: buttonText
435
+ });
436
+ };
437
+ (0, _react.render)((0, _jsxRuntime.jsx)(CacheTestComponent, {}));
438
+ (0, _globals.expect)(addReducer).toHaveBeenCalledTimes(1);
439
+ (0, _globals.expect)(addReducer).toHaveBeenCalledWith('', 'x');
440
+ (0, _globals.expect)(addReducer).toHaveReturnedWith('x');
441
+ _react.fireEvent.click(_react.screen.getByText(buttonText));
442
+ (0, _globals.expect)(addReducer).toHaveBeenCalledTimes(1);
443
+ });
444
+ (0, _globals.test)('reducer call should not be cached if component is not at rendering phase', function () {
445
+ var buttonText = 'button';
446
+ var addReducer = _globals.jest.fn(function (entity, substring) {
447
+ return entity + substring;
448
+ });
449
+ var stringUseCase = function stringUseCase() {
450
+ var entityReducers = (0, _usecases.entityUseCase)();
451
+ return _objectSpread(_objectSpread({}, entityReducers), {}, {
452
+ add: addReducer
453
+ });
454
+ };
455
+ var CacheTestComponent = function CacheTestComponent() {
456
+ var _useUseCase8 = (0, _.useUseCase)('', stringUseCase),
457
+ _useUseCase9 = (0, _slicedToArray2["default"])(_useUseCase8, 2),
458
+ add = _useUseCase9[1].add;
459
+ var onClick = function onClick() {
460
+ add('x');
461
+ };
462
+ (0, _ahooks.useMount)(function () {
463
+ add('x');
464
+ add('x');
465
+ });
466
+ return (0, _jsxRuntime.jsx)("button", {
467
+ onClick: onClick,
468
+ children: buttonText
469
+ });
470
+ };
471
+ (0, _react.render)((0, _jsxRuntime.jsx)(CacheTestComponent, {}));
472
+ (0, _globals.expect)(addReducer).toHaveBeenCalledTimes(2);
473
+ (0, _globals.expect)(addReducer).toHaveBeenNthCalledWith(1, '', 'x');
474
+ (0, _globals.expect)(addReducer).toHaveBeenNthCalledWith(2, '', 'x');
475
+ _react.fireEvent.click(_react.screen.getByText(buttonText));
476
+ (0, _globals.expect)(addReducer).toHaveBeenCalledTimes(3);
477
+ (0, _globals.expect)(addReducer).toHaveBeenNthCalledWith(3, '', 'x');
478
+ });
479
+ (0, _globals.test)('reducer call should not be cached if entity or parameters have changed', function () {
480
+ var count = 0;
481
+ var addedText = 'x';
482
+ var setButtonText = 'button';
483
+ var updateButtonText = 'update';
484
+ var addReducer = _globals.jest.fn(function (entity, substring) {
485
+ return entity + substring;
486
+ });
487
+ var stringUseCase = function stringUseCase() {
488
+ var entityReducers = (0, _usecases.entityUseCase)();
489
+ return _objectSpread(_objectSpread({}, entityReducers), {}, {
490
+ add: addReducer
491
+ });
492
+ };
493
+ var CacheTestComponent = function CacheTestComponent() {
494
+ var _useUseCase10 = (0, _.useUseCase)('', stringUseCase),
495
+ _useUseCase11 = (0, _slicedToArray2["default"])(_useUseCase10, 2),
496
+ _useUseCase11$ = _useUseCase11[1],
497
+ add = _useUseCase11$.add,
498
+ setEntity = _useUseCase11$.setEntity;
499
+ var update = (0, _ahooks.useUpdate)();
500
+ add(addedText);
501
+ var onSet = function onSet() {
502
+ setEntity("".concat(count++));
503
+ };
504
+ var onUpdate = function onUpdate() {
505
+ update();
506
+ };
507
+ return (0, _jsxRuntime.jsxs)("div", {
508
+ children: [(0, _jsxRuntime.jsx)("button", {
509
+ onClick: onSet,
510
+ children: setButtonText
511
+ }), (0, _jsxRuntime.jsx)("button", {
512
+ onClick: onUpdate,
513
+ children: updateButtonText
514
+ })]
515
+ });
516
+ };
517
+ (0, _react.render)((0, _jsxRuntime.jsx)(CacheTestComponent, {}));
518
+ (0, _globals.expect)(addReducer).toHaveBeenCalledTimes(1);
519
+ (0, _globals.expect)(addReducer).toHaveBeenCalledWith('', 'x');
520
+ _react.fireEvent.click(_react.screen.getByText(setButtonText));
521
+ (0, _globals.expect)(addReducer).toHaveBeenCalledTimes(2);
522
+ (0, _globals.expect)(addReducer).toHaveBeenCalledWith('0', 'x');
523
+ (0, _globals.expect)(addReducer).toHaveReturnedWith('0x');
524
+ addedText = 'y';
525
+ _react.fireEvent.click(_react.screen.getByText(updateButtonText));
526
+ (0, _globals.expect)(addReducer).toHaveBeenCalledTimes(3);
527
+ (0, _globals.expect)(addReducer).toHaveBeenCalledWith('0', 'y');
528
+ (0, _globals.expect)(addReducer).toHaveReturnedWith('0y');
529
+ _react.fireEvent.click(_react.screen.getByText(updateButtonText));
530
+ (0, _globals.expect)(addReducer).toHaveBeenCalledTimes(3);
531
+ });
409
532
  (0, _globals.test)('`options.stateless` should not generate new reducers when `yeild entity`', function () {
410
533
  var onUpdate = _globals.jest.fn();
411
534
  var _renderHook9 = (0, _react.renderHook)(function () {
@@ -667,182 +790,33 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
667
790
  (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
668
791
  (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
669
792
  });
670
- });
671
- (0, _globals.describe)('`useUseCase` should work with 1+ arguments on non-entity mode', function () {
672
- (0, _globals.test)('`entity` should equal `defaultFile`', function () {
673
- var _renderHook18 = (0, _react.renderHook)(function () {
674
- return (0, _.useUseCase)(mathUseCase);
675
- }),
676
- result = _renderHook18.result;
677
- var reducers = result.current;
678
- (0, _globals.expect)(Array.isArray(reducers)).toBe(false);
679
- });
680
- (0, _globals.test)('returned reducer should work', function () {
681
- var _renderHook19 = (0, _react.renderHook)(function () {
682
- return (0, _.useUseCase)(mathUseCase);
683
- }),
684
- result = _renderHook19.result;
685
- var reducers = result.current;
686
- var add = reducers.add;
687
- (0, _globals.expect)(add(1, 2)).toBe(3);
688
- });
689
- (0, _globals.test)('`options.extraValue` should be added after call `add` method', function () {
690
- var _renderHook20 = (0, _react.renderHook)(function () {
691
- return (0, _.useUseCase)(mathUseCase, {
692
- extraValue: 5
693
- });
694
- }),
695
- result = _renderHook20.result;
696
- var reducers = result.current;
697
- var add = reducers.add;
698
- (0, _globals.expect)(add(1, 2)).toBe(8);
699
- });
700
- (0, _globals.test)('when `options` has changed, it should not trigger update', function () {
701
- var onUpdate = _globals.jest.fn();
702
- var onDeepUpdate = _globals.jest.fn();
703
- var _renderHook21 = (0, _react.renderHook)(function () {
704
- var _useState7 = (0, _react2.useState)(0),
705
- _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
706
- extraValue = _useState8[0],
707
- setExtraValue = _useState8[1];
708
- var reducers = (0, _.useUseCase)(mathUseCase, {
709
- extraValue: extraValue
710
- });
711
- (0, _ahooks.useUpdateEffect)(function () {
712
- onUpdate();
713
- }, [reducers]);
714
- useDeepCompareUpdate(function () {
715
- onDeepUpdate();
716
- }, [reducers]);
717
- return setExtraValue;
718
- }),
719
- result = _renderHook21.result;
720
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
721
- (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
722
- (0, _react.act)(function () {
723
- result.current(3);
724
- });
725
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
726
- (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
727
- });
728
- (0, _globals.test)('when `deps` change, it should update reducers', function () {
729
- var onUpdate = _globals.jest.fn();
730
- var onDeepUpdate = _globals.jest.fn();
731
- var _renderHook22 = (0, _react.renderHook)(function () {
732
- var _useState9 = (0, _react2.useState)(0),
733
- _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
734
- extraValue = _useState10[0],
735
- setExtraValue = _useState10[1];
736
- var reducers = (0, _.useUseCase)(mathUseCase, {
737
- extraValue: extraValue
738
- }, [extraValue]);
739
- (0, _ahooks.useUpdateEffect)(function () {
740
- onUpdate();
741
- }, [reducers]);
742
- useDeepCompareUpdate(function () {
743
- onDeepUpdate();
744
- }, [reducers]);
745
- return setExtraValue;
746
- }),
747
- result = _renderHook22.result;
748
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
749
- (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
750
- (0, _react.act)(function () {
751
- result.current(3);
752
- });
753
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(1);
754
- (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(1);
755
- });
756
- (0, _globals.test)('empty `deps` should not update reducers', function () {
757
- var onUpdate = _globals.jest.fn();
758
- var onDeepUpdate = _globals.jest.fn();
759
- var _renderHook23 = (0, _react.renderHook)(function () {
760
- var _useState11 = (0, _react2.useState)(0),
761
- _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
762
- extraValue = _useState12[0],
763
- setExtraValue = _useState12[1];
764
- var reducers = (0, _.useUseCase)(mathUseCase, {
765
- extraValue: extraValue
766
- }, []);
767
- (0, _ahooks.useUpdateEffect)(function () {
768
- onUpdate();
769
- }, [reducers]);
770
- useDeepCompareUpdate(function () {
771
- onDeepUpdate();
772
- }, [reducers]);
773
- return setExtraValue;
774
- }),
775
- result = _renderHook23.result;
776
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
777
- (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
778
- (0, _react.act)(function () {
779
- result.current(3);
780
- });
781
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
782
- (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
783
- });
784
- (0, _globals.test)('should not trigger update', function () {
785
- var onUpdate = _globals.jest.fn();
786
- (0, _react.render)((0, _jsxRuntime.jsx)(MathParent, {
787
- onUpdate: onUpdate
788
- }));
789
- _react.fireEvent.click(_react.screen.getByText(PARENT_BUTTON_TEXT));
790
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
791
- });
792
- });
793
- (0, _globals.describe)('`useUseCase` should work with 1+ arguments on context mode', function () {
794
- (0, _globals.test)('should work within <Child /> which it is under <Parent />', function () {
795
- var textPrefix = '>>';
796
- var onUpdate = _globals.jest.fn();
797
- var onPathChange = _globals.jest.fn();
798
- var onUndefinedEntity = _globals.jest.fn();
799
- var onSetPath = _globals.jest.fn(function () {
800
- return PATH_1;
801
- });
802
- (0, _react.render)((0, _jsxRuntime.jsx)("div", {
803
- children: (0, _jsxRuntime.jsx)(Parent, {
804
- onSetPath: onSetPath,
805
- children: (0, _jsxRuntime.jsx)(Child, {
806
- textPrefix: textPrefix,
807
- onUpdate: onUpdate,
808
- onPathChange: onPathChange,
809
- onUndefinedEntity: onUndefinedEntity
810
- })
811
- })
812
- }));
813
- _react.fireEvent.click(_react.screen.getByText(PARENT_BUTTON_TEXT));
814
- (0, _globals.expect)(onSetPath).toHaveBeenCalledTimes(1);
815
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(1);
816
- (0, _globals.expect)(onPathChange).toHaveBeenCalledWith(PATH_1);
817
- _react.fireEvent.click(_react.screen.getByText(textPrefix + CHILD_BUTTON_TEXT));
818
- (0, _globals.expect)(onSetPath).toHaveBeenCalledTimes(1);
819
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(2);
820
- (0, _globals.expect)(onPathChange).toHaveBeenCalledWith('');
821
- (0, _globals.expect)(onUndefinedEntity).toHaveBeenCalledTimes(0);
822
- });
823
- (0, _globals.test)('`options.onChange` event should be trigger at child elements', function () {
824
- var onFirstChange = _globals.jest.fn();
825
- var onSecondChange = _globals.jest.fn();
826
- var onParentPathChange = _globals.jest.fn();
793
+ (0, _globals.test)('`options.watch` should be trigger at child elements', function () {
794
+ var onFirstExtChange = _globals.jest.fn();
795
+ var onSecondExtChange = _globals.jest.fn();
796
+ var onParentExtChange = _globals.jest.fn();
797
+ var onExtChange = onFirstExtChange;
827
798
  var firstButtonText = 'first button';
828
799
  var secondButtonText = 'second button';
829
- var onChange = onFirstChange;
830
800
  var A = function A() {
831
801
  (0, _.useUseCase)(fileUseCase, {
832
- onChange: onChange
802
+ watch: {
803
+ ext: onExtChange
804
+ }
833
805
  });
834
806
  return (0, _jsxRuntime.jsx)(_react2.Fragment, {});
835
807
  };
836
808
  var B = function B() {
837
- var _useUseCase6 = (0, _.useUseCase)(defaultFile, fileUseCase, {
838
- onChange: onParentPathChange
809
+ var _useUseCase12 = (0, _.useUseCase)(defaultFile, fileUseCase, {
810
+ watch: {
811
+ ext: onParentExtChange
812
+ }
839
813
  }),
840
- _useUseCase7 = (0, _slicedToArray2["default"])(_useUseCase6, 3),
841
- setPath = _useUseCase7[1].setPath,
842
- Provider = _useUseCase7[2];
814
+ _useUseCase13 = (0, _slicedToArray2["default"])(_useUseCase12, 3),
815
+ setPath = _useUseCase13[1].setPath,
816
+ Provider = _useUseCase13[2];
843
817
  var onFirstClick = function onFirstClick() {
844
818
  setPath(PATH_1);
845
- onChange = onSecondChange;
819
+ onExtChange = onSecondExtChange;
846
820
  };
847
821
  var onSecondClick = function onSecondClick() {
848
822
  setPath('');
@@ -858,27 +832,40 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
858
832
  });
859
833
  };
860
834
  (0, _react.render)((0, _jsxRuntime.jsx)(B, {}));
861
- (0, _globals.expect)(onFirstChange).toHaveBeenCalledTimes(0);
835
+ (0, _globals.expect)(onFirstExtChange).toHaveBeenCalledTimes(0);
862
836
  _react.fireEvent.click(_react.screen.getByText(firstButtonText));
863
- (0, _globals.expect)(onFirstChange).toHaveBeenCalledTimes(1);
864
- (0, _globals.expect)(onFirstChange).toHaveBeenLastCalledWith(_objectSpread(_objectSpread({}, defaultFile), {}, {
865
- ext: EXT_1,
866
- path: PATH_1
867
- }), defaultFile);
868
- (0, _globals.expect)(onParentPathChange).toHaveBeenCalledTimes(1);
869
- (0, _globals.expect)(onSecondChange).toHaveBeenCalledTimes(0);
837
+ (0, _globals.expect)(onFirstExtChange).toHaveBeenCalledTimes(1);
838
+ (0, _globals.expect)(onFirstExtChange).toHaveBeenLastCalledWith({
839
+ fieldPaths: ['ext'],
840
+ newEntity: _objectSpread(_objectSpread({}, defaultFile), {}, {
841
+ ext: EXT_1,
842
+ path: PATH_1
843
+ }),
844
+ oldEntity: defaultFile,
845
+ newValue: EXT_1,
846
+ oldValue: ''
847
+ });
848
+ (0, _globals.expect)(onParentExtChange).toHaveBeenCalledTimes(1);
849
+ (0, _globals.expect)(onSecondExtChange).toHaveBeenCalledTimes(0);
870
850
  _react.fireEvent.click(_react.screen.getByText(secondButtonText));
871
- (0, _globals.expect)(onSecondChange).toHaveBeenCalledTimes(1);
872
- (0, _globals.expect)(onSecondChange).toHaveBeenLastCalledWith(defaultFile, _objectSpread(_objectSpread({}, defaultFile), {}, {
873
- ext: EXT_1,
874
- path: PATH_1
875
- }));
876
- (0, _globals.expect)(onFirstChange).toHaveBeenCalledTimes(1);
877
- (0, _globals.expect)(onParentPathChange).toHaveBeenCalledTimes(2);
851
+ (0, _globals.expect)(onSecondExtChange).toHaveBeenCalledTimes(1);
852
+ (0, _globals.expect)(onSecondExtChange).toHaveBeenLastCalledWith({
853
+ fieldPaths: ['ext'],
854
+ newEntity: defaultFile,
855
+ oldEntity: _objectSpread(_objectSpread({}, defaultFile), {}, {
856
+ ext: EXT_1,
857
+ path: PATH_1
858
+ }),
859
+ newValue: '',
860
+ oldValue: EXT_1
861
+ });
862
+ (0, _globals.expect)(onFirstExtChange).toHaveBeenCalledTimes(1);
863
+ (0, _globals.expect)(onParentExtChange).toHaveBeenCalledTimes(2);
878
864
  });
879
- (0, _globals.test)('`options.onChange` event should be trigger in orders', function () {
865
+ (0, _globals.test)('`options.watch` should be trigger in orders', function () {
880
866
  var changeTimes = 0;
881
- var updateChangeTimes = function updateChangeTimes() {
867
+ var updateChangeTimes = function updateChangeTimes(e) {
868
+ void e;
882
869
  return ++changeTimes;
883
870
  };
884
871
  var onChangeA = _globals.jest.fn(updateChangeTimes);
@@ -887,129 +874,6 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
887
874
  var buttonText = 'my button';
888
875
  var A = function A(_ref7) {
889
876
  var children = _ref7.children;
890
- (0, _.useUseCase)(fileUseCase, {
891
- onChange: onChangeA
892
- });
893
- return (0, _jsxRuntime.jsx)(_react2.Fragment, {
894
- children: children
895
- });
896
- };
897
- var B = function B() {
898
- (0, _.useUseCase)(fileUseCase, {
899
- onChange: onChangeB
900
- });
901
- return (0, _jsxRuntime.jsx)(_react2.Fragment, {});
902
- };
903
- var C = function C() {
904
- var _useUseCase8 = (0, _.useUseCase)(defaultFile, fileUseCase, {
905
- onChange: onChangeC
906
- }),
907
- _useUseCase9 = (0, _slicedToArray2["default"])(_useUseCase8, 3),
908
- setPath = _useUseCase9[1].setPath,
909
- Provider = _useUseCase9[2];
910
- var onFirstClick = function onFirstClick() {
911
- setPath(PATH_1);
912
- };
913
- return (0, _jsxRuntime.jsxs)(Provider, {
914
- children: [(0, _jsxRuntime.jsx)(A, {
915
- children: (0, _jsxRuntime.jsx)(B, {})
916
- }), (0, _jsxRuntime.jsx)("button", {
917
- onClick: onFirstClick,
918
- children: buttonText
919
- })]
920
- });
921
- };
922
- (0, _react.render)((0, _jsxRuntime.jsx)(C, {}));
923
- (0, _globals.expect)(changeTimes).toBe(0);
924
- _react.fireEvent.click(_react.screen.getByText(buttonText));
925
- (0, _globals.expect)(onChangeA).toHaveReturnedWith(2);
926
- (0, _globals.expect)(onChangeB).toHaveReturnedWith(1);
927
- (0, _globals.expect)(onChangeC).toHaveReturnedWith(3);
928
- });
929
- (0, _globals.test)('`options.watch` should be trigger at child elements', function () {
930
- var onFirstExtChange = _globals.jest.fn();
931
- var onSecondExtChange = _globals.jest.fn();
932
- var onParentExtChange = _globals.jest.fn();
933
- var onExtChange = onFirstExtChange;
934
- var firstButtonText = 'first button';
935
- var secondButtonText = 'second button';
936
- var A = function A() {
937
- (0, _.useUseCase)(fileUseCase, {
938
- watch: {
939
- ext: onExtChange
940
- }
941
- });
942
- return (0, _jsxRuntime.jsx)(_react2.Fragment, {});
943
- };
944
- var B = function B() {
945
- var _useUseCase10 = (0, _.useUseCase)(defaultFile, fileUseCase, {
946
- watch: {
947
- ext: onParentExtChange
948
- }
949
- }),
950
- _useUseCase11 = (0, _slicedToArray2["default"])(_useUseCase10, 3),
951
- setPath = _useUseCase11[1].setPath,
952
- Provider = _useUseCase11[2];
953
- var onFirstClick = function onFirstClick() {
954
- setPath(PATH_1);
955
- onExtChange = onSecondExtChange;
956
- };
957
- var onSecondClick = function onSecondClick() {
958
- setPath('');
959
- };
960
- return (0, _jsxRuntime.jsxs)(Provider, {
961
- children: [(0, _jsxRuntime.jsx)(A, {}), (0, _jsxRuntime.jsx)("button", {
962
- onClick: onFirstClick,
963
- children: firstButtonText
964
- }), (0, _jsxRuntime.jsx)("button", {
965
- onClick: onSecondClick,
966
- children: secondButtonText
967
- })]
968
- });
969
- };
970
- (0, _react.render)((0, _jsxRuntime.jsx)(B, {}));
971
- (0, _globals.expect)(onFirstExtChange).toHaveBeenCalledTimes(0);
972
- _react.fireEvent.click(_react.screen.getByText(firstButtonText));
973
- (0, _globals.expect)(onFirstExtChange).toHaveBeenCalledTimes(1);
974
- (0, _globals.expect)(onFirstExtChange).toHaveBeenLastCalledWith({
975
- fieldPaths: ['ext'],
976
- newEntity: _objectSpread(_objectSpread({}, defaultFile), {}, {
977
- ext: EXT_1,
978
- path: PATH_1
979
- }),
980
- oldEntity: defaultFile,
981
- newValue: EXT_1,
982
- oldValue: ''
983
- });
984
- (0, _globals.expect)(onParentExtChange).toHaveBeenCalledTimes(1);
985
- (0, _globals.expect)(onSecondExtChange).toHaveBeenCalledTimes(0);
986
- _react.fireEvent.click(_react.screen.getByText(secondButtonText));
987
- (0, _globals.expect)(onSecondExtChange).toHaveBeenCalledTimes(1);
988
- (0, _globals.expect)(onSecondExtChange).toHaveBeenLastCalledWith({
989
- fieldPaths: ['ext'],
990
- newEntity: defaultFile,
991
- oldEntity: _objectSpread(_objectSpread({}, defaultFile), {}, {
992
- ext: EXT_1,
993
- path: PATH_1
994
- }),
995
- newValue: '',
996
- oldValue: EXT_1
997
- });
998
- (0, _globals.expect)(onFirstExtChange).toHaveBeenCalledTimes(1);
999
- (0, _globals.expect)(onParentExtChange).toHaveBeenCalledTimes(2);
1000
- });
1001
- (0, _globals.test)('`options.watch` should be trigger in orders', function () {
1002
- var changeTimes = 0;
1003
- var updateChangeTimes = function updateChangeTimes(e) {
1004
- void e;
1005
- return ++changeTimes;
1006
- };
1007
- var onChangeA = _globals.jest.fn(updateChangeTimes);
1008
- var onChangeB = _globals.jest.fn(updateChangeTimes);
1009
- var onChangeC = _globals.jest.fn(updateChangeTimes);
1010
- var buttonText = 'my button';
1011
- var A = function A(_ref8) {
1012
- var children = _ref8.children;
1013
877
  (0, _.useUseCase)(fileUseCase, {
1014
878
  watch: {
1015
879
  ext: onChangeA
@@ -1028,14 +892,14 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1028
892
  return (0, _jsxRuntime.jsx)(_react2.Fragment, {});
1029
893
  };
1030
894
  var C = function C() {
1031
- var _useUseCase12 = (0, _.useUseCase)(defaultFile, fileUseCase, {
895
+ var _useUseCase14 = (0, _.useUseCase)(defaultFile, fileUseCase, {
1032
896
  watch: {
1033
897
  ext: onChangeC
1034
898
  }
1035
899
  }),
1036
- _useUseCase13 = (0, _slicedToArray2["default"])(_useUseCase12, 3),
1037
- setPath = _useUseCase13[1].setPath,
1038
- Provider = _useUseCase13[2];
900
+ _useUseCase15 = (0, _slicedToArray2["default"])(_useUseCase14, 3),
901
+ setPath = _useUseCase15[1].setPath,
902
+ Provider = _useUseCase15[2];
1039
903
  var onFirstClick = function onFirstClick() {
1040
904
  setPath(PATH_1);
1041
905
  };
@@ -1058,7 +922,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1058
922
  (0, _globals.test)('`options.watch` should work with array field path of array', function () {
1059
923
  var onExtChange = _globals.jest.fn();
1060
924
  var onSizeChange = _globals.jest.fn();
1061
- var _renderHook24 = (0, _react.renderHook)(function () {
925
+ var _renderHook18 = (0, _react.renderHook)(function () {
1062
926
  return (0, _.useUseCase)({}, fieldPathUseCase, {
1063
927
  watch: {
1064
928
  'list.ext': onExtChange,
@@ -1066,7 +930,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1066
930
  }
1067
931
  });
1068
932
  }),
1069
- result = _renderHook24.result;
933
+ result = _renderHook18.result;
1070
934
  var cores = result.current;
1071
935
  var _cores13 = (0, _slicedToArray2["default"])(cores, 2),
1072
936
  setEntity = _cores13[1].setEntity;
@@ -1354,7 +1218,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1354
1218
  var lengthUseCase = function lengthUseCase() {
1355
1219
  return (0, _usecases.entityUseCase)();
1356
1220
  };
1357
- var _renderHook25 = (0, _react.renderHook)(function () {
1221
+ var _renderHook19 = (0, _react.renderHook)(function () {
1358
1222
  return (0, _.useUseCase)([], lengthUseCase, {
1359
1223
  watch: {
1360
1224
  length: onEntityLengthChange,
@@ -1362,7 +1226,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1362
1226
  }
1363
1227
  });
1364
1228
  }),
1365
- result = _renderHook25.result;
1229
+ result = _renderHook19.result;
1366
1230
  var cores = result.current;
1367
1231
  var _cores14 = (0, _slicedToArray2["default"])(cores, 2),
1368
1232
  setEntity = _cores14[1].setEntity;
@@ -1396,14 +1260,14 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1396
1260
  });
1397
1261
  (0, _globals.test)('`options.watch` should work with field path of nested array', function () {
1398
1262
  var onChange = _globals.jest.fn();
1399
- var _renderHook26 = (0, _react.renderHook)(function () {
1263
+ var _renderHook20 = (0, _react.renderHook)(function () {
1400
1264
  return (0, _.useUseCase)({}, fieldPathUseCase, {
1401
1265
  watch: {
1402
1266
  'nestedList.size': onChange
1403
1267
  }
1404
1268
  });
1405
1269
  }),
1406
- result = _renderHook26.result;
1270
+ result = _renderHook20.result;
1407
1271
  var cores = result.current;
1408
1272
  var _cores15 = (0, _slicedToArray2["default"])(cores, 2),
1409
1273
  setEntity = _cores15[1].setEntity;
@@ -1490,7 +1354,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1490
1354
  (0, _globals.test)('`options.watch` should work with field path of object', function () {
1491
1355
  var onExtChange = _globals.jest.fn();
1492
1356
  var onSizeChange = _globals.jest.fn();
1493
- var _renderHook27 = (0, _react.renderHook)(function () {
1357
+ var _renderHook21 = (0, _react.renderHook)(function () {
1494
1358
  return (0, _.useUseCase)({}, fieldPathUseCase, {
1495
1359
  watch: {
1496
1360
  'obj.file.ext': onExtChange,
@@ -1498,7 +1362,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1498
1362
  }
1499
1363
  });
1500
1364
  }),
1501
- result = _renderHook27.result;
1365
+ result = _renderHook21.result;
1502
1366
  var cores = result.current;
1503
1367
  var _cores16 = (0, _slicedToArray2["default"])(cores, 2),
1504
1368
  setEntity = _cores16[1].setEntity;
@@ -1549,4 +1413,483 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1549
1413
  });
1550
1414
  });
1551
1415
  });
1416
+ (0, _globals.describe)('`useUseCase` should work with 1+ arguments on non-entity mode', function () {
1417
+ (0, _globals.test)('`entity` should equal `defaultFile`', function () {
1418
+ var _renderHook22 = (0, _react.renderHook)(function () {
1419
+ return (0, _.useUseCase)(mathUseCase);
1420
+ }),
1421
+ result = _renderHook22.result;
1422
+ var reducers = result.current;
1423
+ (0, _globals.expect)(Array.isArray(reducers)).toBe(false);
1424
+ });
1425
+ (0, _globals.test)('returned reducer should work', function () {
1426
+ var _renderHook23 = (0, _react.renderHook)(function () {
1427
+ return (0, _.useUseCase)(mathUseCase);
1428
+ }),
1429
+ result = _renderHook23.result;
1430
+ var reducers = result.current;
1431
+ var add = reducers.add;
1432
+ (0, _globals.expect)(add(1, 2)).toBe(3);
1433
+ });
1434
+ (0, _globals.test)('reducer call should be cached if component is at rendering phase', function () {
1435
+ var buttonText = 'button';
1436
+ var CacheTestComponent = function CacheTestComponent() {
1437
+ var _useUseCase16 = (0, _.useUseCase)(mathUseCase),
1438
+ subtraction = _useUseCase16.subtraction;
1439
+ var update = (0, _ahooks.useUpdate)();
1440
+ var onClick = function onClick() {
1441
+ update();
1442
+ };
1443
+ subtraction(5, 3);
1444
+ return (0, _jsxRuntime.jsx)("button", {
1445
+ onClick: onClick,
1446
+ children: buttonText
1447
+ });
1448
+ };
1449
+ (0, _react.render)((0, _jsxRuntime.jsx)(CacheTestComponent, {}));
1450
+ (0, _globals.expect)(subtractionReducer).toHaveBeenCalledTimes(1);
1451
+ (0, _globals.expect)(subtractionReducer).toHaveBeenCalledWith(5, 3);
1452
+ (0, _globals.expect)(subtractionReducer).toHaveReturnedWith(2);
1453
+ _react.fireEvent.click(_react.screen.getByText(buttonText));
1454
+ (0, _globals.expect)(subtractionReducer).toHaveBeenCalledTimes(1);
1455
+ });
1456
+ (0, _globals.test)('reducer call should not be cached if component is not at rendering phase', function () {
1457
+ var buttonText = 'button';
1458
+ var CacheTestComponent = function CacheTestComponent() {
1459
+ var _useUseCase17 = (0, _.useUseCase)(mathUseCase),
1460
+ subtraction = _useUseCase17.subtraction;
1461
+ var onClick = function onClick() {
1462
+ subtraction(5, 3);
1463
+ };
1464
+ (0, _ahooks.useMount)(function () {
1465
+ subtraction(5, 3);
1466
+ subtraction(5, 3);
1467
+ });
1468
+ return (0, _jsxRuntime.jsx)("button", {
1469
+ onClick: onClick,
1470
+ children: buttonText
1471
+ });
1472
+ };
1473
+ (0, _react.render)((0, _jsxRuntime.jsx)(CacheTestComponent, {}));
1474
+ (0, _globals.expect)(subtractionReducer).toHaveBeenCalledTimes(2);
1475
+ (0, _globals.expect)(subtractionReducer).toHaveBeenNthCalledWith(1, 5, 3);
1476
+ (0, _globals.expect)(subtractionReducer).toHaveNthReturnedWith(1, 2);
1477
+ (0, _globals.expect)(subtractionReducer).toHaveBeenNthCalledWith(2, 5, 3);
1478
+ (0, _globals.expect)(subtractionReducer).toHaveNthReturnedWith(2, 2);
1479
+ _react.fireEvent.click(_react.screen.getByText(buttonText));
1480
+ (0, _globals.expect)(subtractionReducer).toHaveBeenCalledTimes(3);
1481
+ (0, _globals.expect)(subtractionReducer).toHaveBeenNthCalledWith(3, 5, 3);
1482
+ (0, _globals.expect)(subtractionReducer).toHaveNthReturnedWith(3, 2);
1483
+ });
1484
+ (0, _globals.test)('reducer call should not be cached if parameters have changed', function () {
1485
+ var count = 0;
1486
+ var buttonText = 'button';
1487
+ var StringUseCaseTestComponent = function StringUseCaseTestComponent() {
1488
+ var _useUseCase18 = (0, _.useUseCase)(mathUseCase),
1489
+ subtraction = _useUseCase18.subtraction;
1490
+ var update = (0, _ahooks.useUpdate)();
1491
+ subtraction(5, count++);
1492
+ var onUpdate = function onUpdate() {
1493
+ update();
1494
+ };
1495
+ return (0, _jsxRuntime.jsx)("div", {
1496
+ children: (0, _jsxRuntime.jsx)("button", {
1497
+ onClick: onUpdate,
1498
+ children: buttonText
1499
+ })
1500
+ });
1501
+ };
1502
+ (0, _react.render)((0, _jsxRuntime.jsx)(StringUseCaseTestComponent, {}));
1503
+ (0, _globals.expect)(subtractionReducer).toHaveBeenCalledTimes(1);
1504
+ (0, _globals.expect)(subtractionReducer).toHaveBeenCalledWith(5, 0);
1505
+ _react.fireEvent.click(_react.screen.getByText(buttonText));
1506
+ (0, _globals.expect)(subtractionReducer).toHaveBeenCalledTimes(2);
1507
+ (0, _globals.expect)(subtractionReducer).toHaveBeenCalledWith(5, 1);
1508
+ (0, _globals.expect)(subtractionReducer).toHaveReturnedWith(4);
1509
+ });
1510
+ (0, _globals.test)('`options.extraValue` should be added after call `add` method', function () {
1511
+ var _renderHook24 = (0, _react.renderHook)(function () {
1512
+ return (0, _.useUseCase)(mathUseCase, {
1513
+ extraValue: 5
1514
+ });
1515
+ }),
1516
+ result = _renderHook24.result;
1517
+ var reducers = result.current;
1518
+ var add = reducers.add;
1519
+ (0, _globals.expect)(add(1, 2)).toBe(8);
1520
+ });
1521
+ (0, _globals.test)('when `options` has changed, it should not trigger update', function () {
1522
+ var onUpdate = _globals.jest.fn();
1523
+ var onDeepUpdate = _globals.jest.fn();
1524
+ var _renderHook25 = (0, _react.renderHook)(function () {
1525
+ var _useState7 = (0, _react2.useState)(0),
1526
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
1527
+ extraValue = _useState8[0],
1528
+ setExtraValue = _useState8[1];
1529
+ var reducers = (0, _.useUseCase)(mathUseCase, {
1530
+ extraValue: extraValue
1531
+ });
1532
+ (0, _ahooks.useUpdateEffect)(function () {
1533
+ onUpdate();
1534
+ }, [reducers]);
1535
+ useDeepCompareUpdate(function () {
1536
+ onDeepUpdate();
1537
+ }, [reducers]);
1538
+ return setExtraValue;
1539
+ }),
1540
+ result = _renderHook25.result;
1541
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
1542
+ (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
1543
+ (0, _react.act)(function () {
1544
+ result.current(3);
1545
+ });
1546
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
1547
+ (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
1548
+ });
1549
+ (0, _globals.test)('when `deps` change, it should update reducers', function () {
1550
+ var onUpdate = _globals.jest.fn();
1551
+ var onDeepUpdate = _globals.jest.fn();
1552
+ var _renderHook26 = (0, _react.renderHook)(function () {
1553
+ var _useState9 = (0, _react2.useState)(0),
1554
+ _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
1555
+ extraValue = _useState10[0],
1556
+ setExtraValue = _useState10[1];
1557
+ var reducers = (0, _.useUseCase)(mathUseCase, {
1558
+ extraValue: extraValue
1559
+ }, [extraValue]);
1560
+ (0, _ahooks.useUpdateEffect)(function () {
1561
+ onUpdate();
1562
+ }, [reducers]);
1563
+ useDeepCompareUpdate(function () {
1564
+ onDeepUpdate();
1565
+ }, [reducers]);
1566
+ return setExtraValue;
1567
+ }),
1568
+ result = _renderHook26.result;
1569
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
1570
+ (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
1571
+ (0, _react.act)(function () {
1572
+ result.current(3);
1573
+ });
1574
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(1);
1575
+ (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(1);
1576
+ });
1577
+ (0, _globals.test)('empty `deps` should not update reducers', function () {
1578
+ var onUpdate = _globals.jest.fn();
1579
+ var onDeepUpdate = _globals.jest.fn();
1580
+ var _renderHook27 = (0, _react.renderHook)(function () {
1581
+ var _useState11 = (0, _react2.useState)(0),
1582
+ _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
1583
+ extraValue = _useState12[0],
1584
+ setExtraValue = _useState12[1];
1585
+ var reducers = (0, _.useUseCase)(mathUseCase, {
1586
+ extraValue: extraValue
1587
+ }, []);
1588
+ (0, _ahooks.useUpdateEffect)(function () {
1589
+ onUpdate();
1590
+ }, [reducers]);
1591
+ useDeepCompareUpdate(function () {
1592
+ onDeepUpdate();
1593
+ }, [reducers]);
1594
+ return setExtraValue;
1595
+ }),
1596
+ result = _renderHook27.result;
1597
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
1598
+ (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
1599
+ (0, _react.act)(function () {
1600
+ result.current(3);
1601
+ });
1602
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
1603
+ (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
1604
+ });
1605
+ (0, _globals.test)('should not trigger update', function () {
1606
+ var onUpdate = _globals.jest.fn();
1607
+ (0, _react.render)((0, _jsxRuntime.jsx)(MathParent, {
1608
+ onUpdate: onUpdate
1609
+ }));
1610
+ _react.fireEvent.click(_react.screen.getByText(PARENT_BUTTON_TEXT));
1611
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
1612
+ });
1613
+ });
1614
+ (0, _globals.describe)('`useUseCase` should work with 1+ arguments on context mode', function () {
1615
+ (0, _globals.test)('should work within <Child /> which it is under <Parent />', function () {
1616
+ var textPrefix = '>>';
1617
+ var onUpdate = _globals.jest.fn();
1618
+ var onPathChange = _globals.jest.fn();
1619
+ var onUndefinedEntity = _globals.jest.fn();
1620
+ var onSetPath = _globals.jest.fn(function () {
1621
+ return PATH_1;
1622
+ });
1623
+ (0, _react.render)((0, _jsxRuntime.jsx)("div", {
1624
+ children: (0, _jsxRuntime.jsx)(Parent, {
1625
+ onSetPath: onSetPath,
1626
+ children: (0, _jsxRuntime.jsx)(Child, {
1627
+ textPrefix: textPrefix,
1628
+ onUpdate: onUpdate,
1629
+ onPathChange: onPathChange,
1630
+ onUndefinedEntity: onUndefinedEntity
1631
+ })
1632
+ })
1633
+ }));
1634
+ _react.fireEvent.click(_react.screen.getByText(PARENT_BUTTON_TEXT));
1635
+ (0, _globals.expect)(onSetPath).toHaveBeenCalledTimes(1);
1636
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(1);
1637
+ (0, _globals.expect)(onPathChange).toHaveBeenCalledWith(PATH_1);
1638
+ _react.fireEvent.click(_react.screen.getByText(textPrefix + CHILD_BUTTON_TEXT));
1639
+ (0, _globals.expect)(onSetPath).toHaveBeenCalledTimes(1);
1640
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(2);
1641
+ (0, _globals.expect)(onPathChange).toHaveBeenCalledWith('');
1642
+ (0, _globals.expect)(onUndefinedEntity).toHaveBeenCalledTimes(0);
1643
+ });
1644
+ (0, _globals.test)('reducer call should be cached if component is at rendering phase in child components', function () {
1645
+ var buttonText = 'button';
1646
+ var addReducer = _globals.jest.fn(function (entity, substring) {
1647
+ return entity + substring;
1648
+ });
1649
+ var stringUseCase = function stringUseCase() {
1650
+ var entityReducers = (0, _usecases.entityUseCase)();
1651
+ return _objectSpread(_objectSpread({}, entityReducers), {}, {
1652
+ add: addReducer
1653
+ });
1654
+ };
1655
+ var A = function A() {
1656
+ var _useUseCase19 = (0, _.useUseCase)(stringUseCase),
1657
+ _useUseCase20 = (0, _slicedToArray2["default"])(_useUseCase19, 2),
1658
+ add = _useUseCase20[1].add;
1659
+ var update = (0, _ahooks.useUpdate)();
1660
+ var onClick = function onClick() {
1661
+ update();
1662
+ };
1663
+ add('x');
1664
+ return (0, _jsxRuntime.jsx)("button", {
1665
+ onClick: onClick,
1666
+ children: buttonText
1667
+ });
1668
+ };
1669
+ var B = function B() {
1670
+ var _useUseCase21 = (0, _.useUseCase)('', stringUseCase),
1671
+ _useUseCase22 = (0, _slicedToArray2["default"])(_useUseCase21, 3),
1672
+ Provider = _useUseCase22[2];
1673
+ return (0, _jsxRuntime.jsx)(Provider, {
1674
+ children: (0, _jsxRuntime.jsx)(A, {})
1675
+ });
1676
+ };
1677
+ (0, _react.render)((0, _jsxRuntime.jsx)(B, {}));
1678
+ (0, _globals.expect)(addReducer).toHaveBeenCalledTimes(1);
1679
+ (0, _globals.expect)(addReducer).toHaveBeenCalledWith('', 'x');
1680
+ (0, _globals.expect)(addReducer).toHaveReturnedWith('x');
1681
+ _react.fireEvent.click(_react.screen.getByText(buttonText));
1682
+ (0, _globals.expect)(addReducer).toHaveBeenCalledTimes(1);
1683
+ });
1684
+ (0, _globals.test)('reducer call should not be cached if component is not at rendering phase in child components', function () {
1685
+ var buttonText = 'button';
1686
+ var addReducer = _globals.jest.fn(function (entity, substring) {
1687
+ return entity + substring;
1688
+ });
1689
+ var stringUseCase = function stringUseCase() {
1690
+ var entityReducers = (0, _usecases.entityUseCase)();
1691
+ return _objectSpread(_objectSpread({}, entityReducers), {}, {
1692
+ add: addReducer
1693
+ });
1694
+ };
1695
+ var A = function A() {
1696
+ var _useUseCase23 = (0, _.useUseCase)(stringUseCase),
1697
+ _useUseCase24 = (0, _slicedToArray2["default"])(_useUseCase23, 2),
1698
+ add = _useUseCase24[1].add;
1699
+ var onClick = function onClick() {
1700
+ add('x');
1701
+ };
1702
+ (0, _ahooks.useMount)(function () {
1703
+ add('x');
1704
+ add('x');
1705
+ });
1706
+ return (0, _jsxRuntime.jsx)("button", {
1707
+ onClick: onClick,
1708
+ children: buttonText
1709
+ });
1710
+ };
1711
+ var B = function B() {
1712
+ var _useUseCase25 = (0, _.useUseCase)('', stringUseCase),
1713
+ _useUseCase26 = (0, _slicedToArray2["default"])(_useUseCase25, 3),
1714
+ Provider = _useUseCase26[2];
1715
+ return (0, _jsxRuntime.jsx)(Provider, {
1716
+ children: (0, _jsxRuntime.jsx)(A, {})
1717
+ });
1718
+ };
1719
+ (0, _react.render)((0, _jsxRuntime.jsx)(B, {}));
1720
+ (0, _globals.expect)(addReducer).toHaveBeenCalledTimes(2);
1721
+ (0, _globals.expect)(addReducer).toHaveBeenNthCalledWith(1, '', 'x');
1722
+ (0, _globals.expect)(addReducer).toHaveBeenNthCalledWith(2, '', 'x');
1723
+ _react.fireEvent.click(_react.screen.getByText(buttonText));
1724
+ (0, _globals.expect)(addReducer).toHaveBeenCalledTimes(3);
1725
+ (0, _globals.expect)(addReducer).toHaveBeenNthCalledWith(3, '', 'x');
1726
+ });
1727
+ (0, _globals.test)('reducer call should not be cached if entity or parameters have changed in child components', function () {
1728
+ var count = 0;
1729
+ var addedText = 'x';
1730
+ var setButtonText = 'button';
1731
+ var updateButtonText = 'update';
1732
+ var addReducer = _globals.jest.fn(function (entity, substring) {
1733
+ return entity + substring;
1734
+ });
1735
+ var stringUseCase = function stringUseCase() {
1736
+ var entityReducers = (0, _usecases.entityUseCase)();
1737
+ return _objectSpread(_objectSpread({}, entityReducers), {}, {
1738
+ add: addReducer
1739
+ });
1740
+ };
1741
+ var A = function A() {
1742
+ var _useUseCase27 = (0, _.useUseCase)(stringUseCase),
1743
+ _useUseCase28 = (0, _slicedToArray2["default"])(_useUseCase27, 2),
1744
+ _useUseCase28$ = _useUseCase28[1],
1745
+ add = _useUseCase28$.add,
1746
+ setEntity = _useUseCase28$.setEntity;
1747
+ var update = (0, _ahooks.useUpdate)();
1748
+ add(addedText);
1749
+ var onSet = function onSet() {
1750
+ setEntity("".concat(count++));
1751
+ };
1752
+ var onUpdate = function onUpdate() {
1753
+ update();
1754
+ };
1755
+ return (0, _jsxRuntime.jsxs)("div", {
1756
+ children: [(0, _jsxRuntime.jsx)("button", {
1757
+ onClick: onSet,
1758
+ children: setButtonText
1759
+ }), (0, _jsxRuntime.jsx)("button", {
1760
+ onClick: onUpdate,
1761
+ children: updateButtonText
1762
+ })]
1763
+ });
1764
+ };
1765
+ var B = function B() {
1766
+ var _useUseCase29 = (0, _.useUseCase)('', stringUseCase),
1767
+ _useUseCase30 = (0, _slicedToArray2["default"])(_useUseCase29, 3),
1768
+ Provider = _useUseCase30[2];
1769
+ return (0, _jsxRuntime.jsx)(Provider, {
1770
+ children: (0, _jsxRuntime.jsx)(A, {})
1771
+ });
1772
+ };
1773
+ (0, _react.render)((0, _jsxRuntime.jsx)(B, {}));
1774
+ (0, _globals.expect)(addReducer).toHaveBeenCalledTimes(1);
1775
+ (0, _globals.expect)(addReducer).toHaveBeenCalledWith('', 'x');
1776
+ _react.fireEvent.click(_react.screen.getByText(setButtonText));
1777
+ (0, _globals.expect)(addReducer).toHaveBeenCalledTimes(2);
1778
+ (0, _globals.expect)(addReducer).toHaveBeenCalledWith('0', 'x');
1779
+ (0, _globals.expect)(addReducer).toHaveReturnedWith('0x');
1780
+ addedText = 'y';
1781
+ _react.fireEvent.click(_react.screen.getByText(updateButtonText));
1782
+ (0, _globals.expect)(addReducer).toHaveBeenCalledTimes(3);
1783
+ (0, _globals.expect)(addReducer).toHaveBeenCalledWith('0', 'y');
1784
+ (0, _globals.expect)(addReducer).toHaveReturnedWith('0y');
1785
+ _react.fireEvent.click(_react.screen.getByText(updateButtonText));
1786
+ (0, _globals.expect)(addReducer).toHaveBeenCalledTimes(3);
1787
+ });
1788
+ (0, _globals.test)('`options.onChange` event should be trigger at child elements', function () {
1789
+ var onFirstChange = _globals.jest.fn();
1790
+ var onSecondChange = _globals.jest.fn();
1791
+ var onParentPathChange = _globals.jest.fn();
1792
+ var firstButtonText = 'first button';
1793
+ var secondButtonText = 'second button';
1794
+ var onChange = onFirstChange;
1795
+ var A = function A() {
1796
+ (0, _.useUseCase)(fileUseCase, {
1797
+ onChange: onChange
1798
+ });
1799
+ return (0, _jsxRuntime.jsx)(_react2.Fragment, {});
1800
+ };
1801
+ var B = function B() {
1802
+ var _useUseCase31 = (0, _.useUseCase)(defaultFile, fileUseCase, {
1803
+ onChange: onParentPathChange
1804
+ }),
1805
+ _useUseCase32 = (0, _slicedToArray2["default"])(_useUseCase31, 3),
1806
+ setPath = _useUseCase32[1].setPath,
1807
+ Provider = _useUseCase32[2];
1808
+ var onFirstClick = function onFirstClick() {
1809
+ setPath(PATH_1);
1810
+ onChange = onSecondChange;
1811
+ };
1812
+ var onSecondClick = function onSecondClick() {
1813
+ setPath('');
1814
+ };
1815
+ return (0, _jsxRuntime.jsxs)(Provider, {
1816
+ children: [(0, _jsxRuntime.jsx)(A, {}), (0, _jsxRuntime.jsx)("button", {
1817
+ onClick: onFirstClick,
1818
+ children: firstButtonText
1819
+ }), (0, _jsxRuntime.jsx)("button", {
1820
+ onClick: onSecondClick,
1821
+ children: secondButtonText
1822
+ })]
1823
+ });
1824
+ };
1825
+ (0, _react.render)((0, _jsxRuntime.jsx)(B, {}));
1826
+ (0, _globals.expect)(onFirstChange).toHaveBeenCalledTimes(0);
1827
+ _react.fireEvent.click(_react.screen.getByText(firstButtonText));
1828
+ (0, _globals.expect)(onFirstChange).toHaveBeenCalledTimes(1);
1829
+ (0, _globals.expect)(onFirstChange).toHaveBeenLastCalledWith(_objectSpread(_objectSpread({}, defaultFile), {}, {
1830
+ ext: EXT_1,
1831
+ path: PATH_1
1832
+ }), defaultFile);
1833
+ (0, _globals.expect)(onParentPathChange).toHaveBeenCalledTimes(1);
1834
+ (0, _globals.expect)(onSecondChange).toHaveBeenCalledTimes(0);
1835
+ _react.fireEvent.click(_react.screen.getByText(secondButtonText));
1836
+ (0, _globals.expect)(onSecondChange).toHaveBeenCalledTimes(1);
1837
+ (0, _globals.expect)(onSecondChange).toHaveBeenLastCalledWith(defaultFile, _objectSpread(_objectSpread({}, defaultFile), {}, {
1838
+ ext: EXT_1,
1839
+ path: PATH_1
1840
+ }));
1841
+ (0, _globals.expect)(onFirstChange).toHaveBeenCalledTimes(1);
1842
+ (0, _globals.expect)(onParentPathChange).toHaveBeenCalledTimes(2);
1843
+ });
1844
+ (0, _globals.test)('`options.onChange` event should be trigger in orders', function () {
1845
+ var changeTimes = 0;
1846
+ var updateChangeTimes = function updateChangeTimes() {
1847
+ return ++changeTimes;
1848
+ };
1849
+ var onChangeA = _globals.jest.fn(updateChangeTimes);
1850
+ var onChangeB = _globals.jest.fn(updateChangeTimes);
1851
+ var onChangeC = _globals.jest.fn(updateChangeTimes);
1852
+ var buttonText = 'my button';
1853
+ var A = function A(_ref8) {
1854
+ var children = _ref8.children;
1855
+ (0, _.useUseCase)(fileUseCase, {
1856
+ onChange: onChangeA
1857
+ });
1858
+ return (0, _jsxRuntime.jsx)(_react2.Fragment, {
1859
+ children: children
1860
+ });
1861
+ };
1862
+ var B = function B() {
1863
+ (0, _.useUseCase)(fileUseCase, {
1864
+ onChange: onChangeB
1865
+ });
1866
+ return (0, _jsxRuntime.jsx)(_react2.Fragment, {});
1867
+ };
1868
+ var C = function C() {
1869
+ var _useUseCase33 = (0, _.useUseCase)(defaultFile, fileUseCase, {
1870
+ onChange: onChangeC
1871
+ }),
1872
+ _useUseCase34 = (0, _slicedToArray2["default"])(_useUseCase33, 3),
1873
+ setPath = _useUseCase34[1].setPath,
1874
+ Provider = _useUseCase34[2];
1875
+ var onFirstClick = function onFirstClick() {
1876
+ setPath(PATH_1);
1877
+ };
1878
+ return (0, _jsxRuntime.jsxs)(Provider, {
1879
+ children: [(0, _jsxRuntime.jsx)(A, {
1880
+ children: (0, _jsxRuntime.jsx)(B, {})
1881
+ }), (0, _jsxRuntime.jsx)("button", {
1882
+ onClick: onFirstClick,
1883
+ children: buttonText
1884
+ })]
1885
+ });
1886
+ };
1887
+ (0, _react.render)((0, _jsxRuntime.jsx)(C, {}));
1888
+ (0, _globals.expect)(changeTimes).toBe(0);
1889
+ _react.fireEvent.click(_react.screen.getByText(buttonText));
1890
+ (0, _globals.expect)(onChangeA).toHaveReturnedWith(2);
1891
+ (0, _globals.expect)(onChangeB).toHaveReturnedWith(1);
1892
+ (0, _globals.expect)(onChangeC).toHaveReturnedWith(3);
1893
+ });
1894
+ });
1552
1895
  });