@pie-lib/graphing 4.1.0-beta.7 → 4.1.0-beta.8

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 (97) hide show
  1. package/package.json +3 -3
  2. package/lib/__tests__/bg.test.js +0 -282
  3. package/lib/__tests__/bg.test.js.map +0 -1
  4. package/lib/__tests__/coordinates-label.test.js +0 -276
  5. package/lib/__tests__/coordinates-label.test.js.map +0 -1
  6. package/lib/__tests__/graph-with-controls.test.js +0 -275
  7. package/lib/__tests__/graph-with-controls.test.js.map +0 -1
  8. package/lib/__tests__/graph.test.js +0 -927
  9. package/lib/__tests__/graph.test.js.map +0 -1
  10. package/lib/__tests__/grid-setup.test.js +0 -729
  11. package/lib/__tests__/grid-setup.test.js.map +0 -1
  12. package/lib/__tests__/grid.test.js +0 -29
  13. package/lib/__tests__/grid.test.js.map +0 -1
  14. package/lib/__tests__/key-legend.test.js +0 -321
  15. package/lib/__tests__/key-legend.test.js.map +0 -1
  16. package/lib/__tests__/label-svg-icon.test.js +0 -373
  17. package/lib/__tests__/label-svg-icon.test.js.map +0 -1
  18. package/lib/__tests__/labels.test.js +0 -61
  19. package/lib/__tests__/labels.test.js.map +0 -1
  20. package/lib/__tests__/mark-label.test.js +0 -133
  21. package/lib/__tests__/mark-label.test.js.map +0 -1
  22. package/lib/__tests__/toggle-bar.test.js +0 -197
  23. package/lib/__tests__/toggle-bar.test.js.map +0 -1
  24. package/lib/__tests__/tool-menu.test.js +0 -151
  25. package/lib/__tests__/tool-menu.test.js.map +0 -1
  26. package/lib/__tests__/undo-redo.test.js +0 -31
  27. package/lib/__tests__/undo-redo.test.js.map +0 -1
  28. package/lib/__tests__/use-debounce.test.js +0 -24
  29. package/lib/__tests__/use-debounce.test.js.map +0 -1
  30. package/lib/__tests__/utils.js +0 -70
  31. package/lib/__tests__/utils.js.map +0 -1
  32. package/lib/__tests__/utils.test.js +0 -123
  33. package/lib/__tests__/utils.test.js.map +0 -1
  34. package/lib/axis/__tests__/arrow.test.js +0 -60
  35. package/lib/axis/__tests__/arrow.test.js.map +0 -1
  36. package/lib/axis/__tests__/axes.test.js +0 -195
  37. package/lib/axis/__tests__/axes.test.js.map +0 -1
  38. package/lib/container/__tests__/actions.test.js +0 -108
  39. package/lib/container/__tests__/actions.test.js.map +0 -1
  40. package/lib/container/__tests__/index.test.js +0 -503
  41. package/lib/container/__tests__/index.test.js.map +0 -1
  42. package/lib/container/__tests__/marks.test.js +0 -259
  43. package/lib/container/__tests__/marks.test.js.map +0 -1
  44. package/lib/container/__tests__/middleware.test.js +0 -244
  45. package/lib/container/__tests__/middleware.test.js.map +0 -1
  46. package/lib/container/__tests__/reducer.test.js +0 -450
  47. package/lib/container/__tests__/reducer.test.js.map +0 -1
  48. package/lib/tools/absolute/__tests__/component.test.js +0 -65
  49. package/lib/tools/absolute/__tests__/component.test.js.map +0 -1
  50. package/lib/tools/circle/__tests__/bg-circle.test.js +0 -33
  51. package/lib/tools/circle/__tests__/bg-circle.test.js.map +0 -1
  52. package/lib/tools/circle/__tests__/component.test.js +0 -615
  53. package/lib/tools/circle/__tests__/component.test.js.map +0 -1
  54. package/lib/tools/circle/__tests__/index.test.js +0 -576
  55. package/lib/tools/circle/__tests__/index.test.js.map +0 -1
  56. package/lib/tools/exponential/__tests__/component.test.js +0 -64
  57. package/lib/tools/exponential/__tests__/component.test.js.map +0 -1
  58. package/lib/tools/exponential/__tests__/index.test.js +0 -828
  59. package/lib/tools/exponential/__tests__/index.test.js.map +0 -1
  60. package/lib/tools/line/__tests__/component.test.js +0 -45
  61. package/lib/tools/line/__tests__/component.test.js.map +0 -1
  62. package/lib/tools/parabola/__tests__/component.test.js +0 -64
  63. package/lib/tools/parabola/__tests__/component.test.js.map +0 -1
  64. package/lib/tools/parabola/__tests__/index.test.js +0 -564
  65. package/lib/tools/parabola/__tests__/index.test.js.map +0 -1
  66. package/lib/tools/point/__tests__/component.test.js +0 -434
  67. package/lib/tools/point/__tests__/component.test.js.map +0 -1
  68. package/lib/tools/point/__tests__/index.test.js +0 -262
  69. package/lib/tools/point/__tests__/index.test.js.map +0 -1
  70. package/lib/tools/polygon/__tests__/component.test.js +0 -485
  71. package/lib/tools/polygon/__tests__/component.test.js.map +0 -1
  72. package/lib/tools/polygon/__tests__/index.test.js +0 -303
  73. package/lib/tools/polygon/__tests__/index.test.js.map +0 -1
  74. package/lib/tools/polygon/__tests__/line.test.js +0 -50
  75. package/lib/tools/polygon/__tests__/line.test.js.map +0 -1
  76. package/lib/tools/polygon/__tests__/polygon.test.js +0 -85
  77. package/lib/tools/polygon/__tests__/polygon.test.js.map +0 -1
  78. package/lib/tools/ray/__tests__/component.test.js +0 -35
  79. package/lib/tools/ray/__tests__/component.test.js.map +0 -1
  80. package/lib/tools/segment/__tests__/component.test.js +0 -35
  81. package/lib/tools/segment/__tests__/component.test.js.map +0 -1
  82. package/lib/tools/shared/__tests__/arrow-head.test.js +0 -45
  83. package/lib/tools/shared/__tests__/arrow-head.test.js.map +0 -1
  84. package/lib/tools/shared/line/__tests__/index.test.js +0 -124
  85. package/lib/tools/shared/line/__tests__/index.test.js.map +0 -1
  86. package/lib/tools/shared/line/__tests__/line-path.test.js +0 -62
  87. package/lib/tools/shared/line/__tests__/line-path.test.js.map +0 -1
  88. package/lib/tools/shared/line/__tests__/with-root-edge.test.js +0 -90
  89. package/lib/tools/shared/line/__tests__/with-root-edge.test.js.map +0 -1
  90. package/lib/tools/shared/point/__tests__/arrow-point.test.js +0 -127
  91. package/lib/tools/shared/point/__tests__/arrow-point.test.js.map +0 -1
  92. package/lib/tools/shared/point/__tests__/base-point.test.js +0 -122
  93. package/lib/tools/shared/point/__tests__/base-point.test.js.map +0 -1
  94. package/lib/tools/sine/__tests__/component.test.js +0 -72
  95. package/lib/tools/sine/__tests__/component.test.js.map +0 -1
  96. package/lib/tools/vector/__tests__/component.test.js +0 -32
  97. package/lib/tools/vector/__tests__/component.test.js.map +0 -1
@@ -1,259 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _marks = _interopRequireDefault(require("../marks"));
5
- describe('marks reducer', function () {
6
- describe('initial state', function () {
7
- it('returns empty array as initial state', function () {
8
- var state = (0, _marks["default"])(undefined, {
9
- type: 'INIT'
10
- });
11
- expect(state).toEqual([]);
12
- });
13
- it('handles no state parameter', function () {
14
- var state = (0, _marks["default"])(undefined, {
15
- type: 'UNKNOWN_ACTION'
16
- });
17
- expect(Array.isArray(state)).toBe(true);
18
- });
19
- });
20
- describe('CHANGE_MARKS action', function () {
21
- it('updates state with new marks', function () {
22
- var initialState = [];
23
- var newMarks = [{
24
- id: 1,
25
- type: 'point'
26
- }];
27
- var action = {
28
- type: 'CHANGE_MARKS',
29
- marks: newMarks
30
- };
31
- var state = (0, _marks["default"])(initialState, action);
32
- expect(state).toEqual(newMarks);
33
- });
34
- it('replaces existing marks', function () {
35
- var initialState = [{
36
- id: 1,
37
- type: 'point'
38
- }];
39
- var newMarks = [{
40
- id: 2,
41
- type: 'line'
42
- }];
43
- var action = {
44
- type: 'CHANGE_MARKS',
45
- marks: newMarks
46
- };
47
- var state = (0, _marks["default"])(initialState, action);
48
- expect(state).toEqual(newMarks);
49
- expect(state.length).toBe(1);
50
- expect(state[0].id).toBe(2);
51
- });
52
- it('handles empty marks array', function () {
53
- var initialState = [{
54
- id: 1,
55
- type: 'point'
56
- }];
57
- var action = {
58
- type: 'CHANGE_MARKS',
59
- marks: []
60
- };
61
- var state = (0, _marks["default"])(initialState, action);
62
- expect(state).toEqual([]);
63
- });
64
- it('handles multiple marks', function () {
65
- var initialState = [];
66
- var newMarks = [{
67
- id: 1,
68
- type: 'point',
69
- x: 1,
70
- y: 2
71
- }, {
72
- id: 2,
73
- type: 'line',
74
- from: {
75
- x: 0,
76
- y: 0
77
- },
78
- to: {
79
- x: 5,
80
- y: 5
81
- }
82
- }, {
83
- id: 3,
84
- type: 'circle',
85
- center: {
86
- x: 3,
87
- y: 3
88
- },
89
- radius: 2
90
- }];
91
- var action = {
92
- type: 'CHANGE_MARKS',
93
- marks: newMarks
94
- };
95
- var state = (0, _marks["default"])(initialState, action);
96
- expect(state).toEqual(newMarks);
97
- expect(state.length).toBe(3);
98
- });
99
- it('throws error when marks is not an array', function () {
100
- var initialState = [];
101
- var action = {
102
- type: 'CHANGE_MARKS',
103
- marks: 'not an array'
104
- };
105
- expect(function () {
106
- return (0, _marks["default"])(initialState, action);
107
- }).toThrow('marks must be an array');
108
- });
109
- it('throws error when marks is null', function () {
110
- var initialState = [];
111
- var action = {
112
- type: 'CHANGE_MARKS',
113
- marks: null
114
- };
115
- expect(function () {
116
- return (0, _marks["default"])(initialState, action);
117
- }).toThrow('marks must be an array');
118
- });
119
- it('throws error when marks is undefined', function () {
120
- var initialState = [];
121
- var action = {
122
- type: 'CHANGE_MARKS',
123
- marks: undefined
124
- };
125
- expect(function () {
126
- return (0, _marks["default"])(initialState, action);
127
- }).toThrow('marks must be an array');
128
- });
129
- it('throws error when marks is an object', function () {
130
- var initialState = [];
131
- var action = {
132
- type: 'CHANGE_MARKS',
133
- marks: {
134
- id: 1
135
- }
136
- };
137
- expect(function () {
138
- return (0, _marks["default"])(initialState, action);
139
- }).toThrow('marks must be an array');
140
- });
141
- it('throws error when marks is a number', function () {
142
- var initialState = [];
143
- var action = {
144
- type: 'CHANGE_MARKS',
145
- marks: 123
146
- };
147
- expect(function () {
148
- return (0, _marks["default"])(initialState, action);
149
- }).toThrow('marks must be an array');
150
- });
151
- it('preserves mark properties', function () {
152
- var initialState = [];
153
- var newMarks = [{
154
- id: 1,
155
- type: 'point',
156
- x: 10,
157
- y: 20,
158
- label: 'A',
159
- correctness: {
160
- value: 'correct'
161
- },
162
- editable: true,
163
- interactive: true
164
- }];
165
- var action = {
166
- type: 'CHANGE_MARKS',
167
- marks: newMarks
168
- };
169
- var state = (0, _marks["default"])(initialState, action);
170
- expect(state[0]).toEqual(newMarks[0]);
171
- expect(state[0].correctness).toBeDefined();
172
- expect(state[0].editable).toBe(true);
173
- });
174
- });
175
- describe('unknown actions', function () {
176
- it('returns current state for unknown action', function () {
177
- var initialState = [{
178
- id: 1,
179
- type: 'point'
180
- }];
181
- var action = {
182
- type: 'UNKNOWN_ACTION'
183
- };
184
- var state = (0, _marks["default"])(initialState, action);
185
- expect(state).toBe(initialState);
186
- });
187
- it('returns current state for ADD_MARK action', function () {
188
- var initialState = [{
189
- id: 1,
190
- type: 'point'
191
- }];
192
- var action = {
193
- type: 'ADD_MARK'
194
- };
195
- var state = (0, _marks["default"])(initialState, action);
196
- expect(state).toBe(initialState);
197
- });
198
- it('does not modify state for unknown actions', function () {
199
- var initialState = [{
200
- id: 1,
201
- type: 'point'
202
- }];
203
- var action = {
204
- type: 'SOME_OTHER_ACTION',
205
- data: 'test'
206
- };
207
- var state = (0, _marks["default"])(initialState, action);
208
- expect(state).toEqual(initialState);
209
- });
210
- });
211
- describe('immutability', function () {
212
- it('does not mutate original state', function () {
213
- var initialState = [{
214
- id: 1,
215
- type: 'point'
216
- }];
217
- var originalState = [].concat(initialState);
218
- var newMarks = [{
219
- id: 2,
220
- type: 'line'
221
- }];
222
- var action = {
223
- type: 'CHANGE_MARKS',
224
- marks: newMarks
225
- };
226
- (0, _marks["default"])(initialState, action);
227
- expect(initialState).toEqual(originalState);
228
- });
229
- it('returns new array reference for CHANGE_MARKS', function () {
230
- var initialState = [{
231
- id: 1,
232
- type: 'point'
233
- }];
234
- var newMarks = [{
235
- id: 1,
236
- type: 'point'
237
- }];
238
- var action = {
239
- type: 'CHANGE_MARKS',
240
- marks: newMarks
241
- };
242
- var state = (0, _marks["default"])(initialState, action);
243
- expect(state).not.toBe(initialState);
244
- expect(state).toBe(newMarks);
245
- });
246
- it('returns same reference for unknown actions', function () {
247
- var initialState = [{
248
- id: 1,
249
- type: 'point'
250
- }];
251
- var action = {
252
- type: 'UNKNOWN_ACTION'
253
- };
254
- var state = (0, _marks["default"])(initialState, action);
255
- expect(state).toBe(initialState);
256
- });
257
- });
258
- });
259
- //# sourceMappingURL=marks.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"marks.test.js","names":["_marks","_interopRequireDefault","require","describe","it","state","marks","undefined","type","expect","toEqual","Array","isArray","toBe","initialState","newMarks","id","action","length","x","y","from","to","center","radius","toThrow","label","correctness","value","editable","interactive","toBeDefined","data","originalState","concat","not"],"sources":["../../../src/container/__tests__/marks.test.js"],"sourcesContent":["import marks from '../marks';\n\ndescribe('marks reducer', () => {\n describe('initial state', () => {\n it('returns empty array as initial state', () => {\n const state = marks(undefined, { type: 'INIT' });\n expect(state).toEqual([]);\n });\n\n it('handles no state parameter', () => {\n const state = marks(undefined, { type: 'UNKNOWN_ACTION' });\n expect(Array.isArray(state)).toBe(true);\n });\n });\n\n describe('CHANGE_MARKS action', () => {\n it('updates state with new marks', () => {\n const initialState = [];\n const newMarks = [{ id: 1, type: 'point' }];\n const action = { type: 'CHANGE_MARKS', marks: newMarks };\n\n const state = marks(initialState, action);\n expect(state).toEqual(newMarks);\n });\n\n it('replaces existing marks', () => {\n const initialState = [{ id: 1, type: 'point' }];\n const newMarks = [{ id: 2, type: 'line' }];\n const action = { type: 'CHANGE_MARKS', marks: newMarks };\n\n const state = marks(initialState, action);\n expect(state).toEqual(newMarks);\n expect(state.length).toBe(1);\n expect(state[0].id).toBe(2);\n });\n\n it('handles empty marks array', () => {\n const initialState = [{ id: 1, type: 'point' }];\n const action = { type: 'CHANGE_MARKS', marks: [] };\n\n const state = marks(initialState, action);\n expect(state).toEqual([]);\n });\n\n it('handles multiple marks', () => {\n const initialState = [];\n const newMarks = [\n { id: 1, type: 'point', x: 1, y: 2 },\n { id: 2, type: 'line', from: { x: 0, y: 0 }, to: { x: 5, y: 5 } },\n { id: 3, type: 'circle', center: { x: 3, y: 3 }, radius: 2 },\n ];\n const action = { type: 'CHANGE_MARKS', marks: newMarks };\n\n const state = marks(initialState, action);\n expect(state).toEqual(newMarks);\n expect(state.length).toBe(3);\n });\n\n it('throws error when marks is not an array', () => {\n const initialState = [];\n const action = { type: 'CHANGE_MARKS', marks: 'not an array' };\n\n expect(() => marks(initialState, action)).toThrow('marks must be an array');\n });\n\n it('throws error when marks is null', () => {\n const initialState = [];\n const action = { type: 'CHANGE_MARKS', marks: null };\n\n expect(() => marks(initialState, action)).toThrow('marks must be an array');\n });\n\n it('throws error when marks is undefined', () => {\n const initialState = [];\n const action = { type: 'CHANGE_MARKS', marks: undefined };\n\n expect(() => marks(initialState, action)).toThrow('marks must be an array');\n });\n\n it('throws error when marks is an object', () => {\n const initialState = [];\n const action = { type: 'CHANGE_MARKS', marks: { id: 1 } };\n\n expect(() => marks(initialState, action)).toThrow('marks must be an array');\n });\n\n it('throws error when marks is a number', () => {\n const initialState = [];\n const action = { type: 'CHANGE_MARKS', marks: 123 };\n\n expect(() => marks(initialState, action)).toThrow('marks must be an array');\n });\n\n it('preserves mark properties', () => {\n const initialState = [];\n const newMarks = [\n {\n id: 1,\n type: 'point',\n x: 10,\n y: 20,\n label: 'A',\n correctness: { value: 'correct' },\n editable: true,\n interactive: true,\n },\n ];\n const action = { type: 'CHANGE_MARKS', marks: newMarks };\n\n const state = marks(initialState, action);\n expect(state[0]).toEqual(newMarks[0]);\n expect(state[0].correctness).toBeDefined();\n expect(state[0].editable).toBe(true);\n });\n });\n\n describe('unknown actions', () => {\n it('returns current state for unknown action', () => {\n const initialState = [{ id: 1, type: 'point' }];\n const action = { type: 'UNKNOWN_ACTION' };\n\n const state = marks(initialState, action);\n expect(state).toBe(initialState);\n });\n\n it('returns current state for ADD_MARK action', () => {\n const initialState = [{ id: 1, type: 'point' }];\n const action = { type: 'ADD_MARK' };\n\n const state = marks(initialState, action);\n expect(state).toBe(initialState);\n });\n\n it('does not modify state for unknown actions', () => {\n const initialState = [{ id: 1, type: 'point' }];\n const action = { type: 'SOME_OTHER_ACTION', data: 'test' };\n\n const state = marks(initialState, action);\n expect(state).toEqual(initialState);\n });\n });\n\n describe('immutability', () => {\n it('does not mutate original state', () => {\n const initialState = [{ id: 1, type: 'point' }];\n const originalState = [...initialState];\n const newMarks = [{ id: 2, type: 'line' }];\n const action = { type: 'CHANGE_MARKS', marks: newMarks };\n\n marks(initialState, action);\n expect(initialState).toEqual(originalState);\n });\n\n it('returns new array reference for CHANGE_MARKS', () => {\n const initialState = [{ id: 1, type: 'point' }];\n const newMarks = [{ id: 1, type: 'point' }];\n const action = { type: 'CHANGE_MARKS', marks: newMarks };\n\n const state = marks(initialState, action);\n expect(state).not.toBe(initialState);\n expect(state).toBe(newMarks);\n });\n\n it('returns same reference for unknown actions', () => {\n const initialState = [{ id: 1, type: 'point' }];\n const action = { type: 'UNKNOWN_ACTION' };\n\n const state = marks(initialState, action);\n expect(state).toBe(initialState);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,244 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
5
- var _middleware = require("../middleware");
6
- describe('lastActionMiddleware', function () {
7
- describe('middleware functionality', function () {
8
- it('creates middleware function', function () {
9
- var middleware = (0, _middleware.lastActionMiddleware)();
10
- expect((0, _typeof2["default"])(middleware)).toBe('function');
11
- });
12
- it('middleware returns a function', function () {
13
- var middleware = (0, _middleware.lastActionMiddleware)();
14
- var next = jest.fn();
15
- var result = middleware(next);
16
- expect((0, _typeof2["default"])(result)).toBe('function');
17
- });
18
- it('calls next with action', function () {
19
- var middleware = (0, _middleware.lastActionMiddleware)();
20
- var next = jest.fn();
21
- var dispatch = middleware(next);
22
- var action = {
23
- type: 'TEST_ACTION'
24
- };
25
- dispatch(action);
26
- expect(next).toHaveBeenCalledWith(action);
27
- });
28
- it('returns result from next', function () {
29
- var middleware = (0, _middleware.lastActionMiddleware)();
30
- var expectedResult = {
31
- status: 'success'
32
- };
33
- var next = jest.fn(function () {
34
- return expectedResult;
35
- });
36
- var dispatch = middleware(next);
37
- var action = {
38
- type: 'TEST_ACTION'
39
- };
40
- var result = dispatch(action);
41
- expect(result).toBe(expectedResult);
42
- });
43
- it('stores action before calling next', function () {
44
- var middleware = (0, _middleware.lastActionMiddleware)();
45
- var next = jest.fn(function () {
46
- var lastAction = (0, _middleware.getLastAction)();
47
- expect(lastAction).toBeDefined();
48
- expect(lastAction.type).toBe('TEST_ACTION');
49
- });
50
- var dispatch = middleware(next);
51
- var action = {
52
- type: 'TEST_ACTION'
53
- };
54
- dispatch(action);
55
- expect(next).toHaveBeenCalled();
56
- });
57
- });
58
- describe('getLastAction', function () {
59
- it('returns null initially', function () {
60
- var lastAction = (0, _middleware.getLastAction)();
61
- expect(lastAction).toBeDefined();
62
- });
63
- it('returns last dispatched action', function () {
64
- var middleware = (0, _middleware.lastActionMiddleware)();
65
- var next = jest.fn();
66
- var dispatch = middleware(next);
67
- var action = {
68
- type: 'MY_ACTION',
69
- payload: 'test'
70
- };
71
- dispatch(action);
72
- var lastAction = (0, _middleware.getLastAction)();
73
- expect(lastAction).toEqual(action);
74
- expect(lastAction.type).toBe('MY_ACTION');
75
- expect(lastAction.payload).toBe('test');
76
- });
77
- it('updates when new action is dispatched', function () {
78
- var middleware = (0, _middleware.lastActionMiddleware)();
79
- var next = jest.fn();
80
- var dispatch = middleware(next);
81
- var action1 = {
82
- type: 'ACTION_1'
83
- };
84
- dispatch(action1);
85
- expect((0, _middleware.getLastAction)()).toEqual(action1);
86
- var action2 = {
87
- type: 'ACTION_2'
88
- };
89
- dispatch(action2);
90
- expect((0, _middleware.getLastAction)()).toEqual(action2);
91
- });
92
- it('stores action with payload', function () {
93
- var middleware = (0, _middleware.lastActionMiddleware)();
94
- var next = jest.fn();
95
- var dispatch = middleware(next);
96
- var action = {
97
- type: 'CHANGE_MARKS',
98
- marks: [{
99
- id: 1,
100
- type: 'point'
101
- }]
102
- };
103
- dispatch(action);
104
- var lastAction = (0, _middleware.getLastAction)();
105
- expect(lastAction.marks).toEqual(action.marks);
106
- expect(lastAction.marks.length).toBe(1);
107
- });
108
- it('stores action with complex payload', function () {
109
- var middleware = (0, _middleware.lastActionMiddleware)();
110
- var next = jest.fn();
111
- var dispatch = middleware(next);
112
- var action = {
113
- type: 'COMPLEX_ACTION',
114
- data: {
115
- nested: {
116
- value: 123,
117
- array: [1, 2, 3]
118
- }
119
- }
120
- };
121
- dispatch(action);
122
- var lastAction = (0, _middleware.getLastAction)();
123
- expect(lastAction.data.nested.value).toBe(123);
124
- expect(lastAction.data.nested.array).toEqual([1, 2, 3]);
125
- });
126
- });
127
- describe('action storage', function () {
128
- it('overwrites previous action', function () {
129
- var middleware = (0, _middleware.lastActionMiddleware)();
130
- var next = jest.fn();
131
- var dispatch = middleware(next);
132
- dispatch({
133
- type: 'FIRST'
134
- });
135
- dispatch({
136
- type: 'SECOND'
137
- });
138
- dispatch({
139
- type: 'THIRD'
140
- });
141
- var lastAction = (0, _middleware.getLastAction)();
142
- expect(lastAction.type).toBe('THIRD');
143
- });
144
- it('stores reference to action object', function () {
145
- var middleware = (0, _middleware.lastActionMiddleware)();
146
- var next = jest.fn();
147
- var dispatch = middleware(next);
148
- var action = {
149
- type: 'TEST',
150
- data: {
151
- value: 1
152
- }
153
- };
154
- dispatch(action);
155
- var lastAction = (0, _middleware.getLastAction)();
156
-
157
- // Modify original action
158
- action.data.value = 2;
159
-
160
- // Last action should reflect the change (same reference)
161
- expect(lastAction.data.value).toBe(2);
162
- });
163
- });
164
- describe('integration scenarios', function () {
165
- it('works with multiple middleware calls', function () {
166
- var middleware = (0, _middleware.lastActionMiddleware)();
167
- var next1 = jest.fn();
168
- var next2 = jest.fn();
169
- var dispatch1 = middleware(next1);
170
- var dispatch2 = middleware(next2);
171
- dispatch1({
172
- type: 'ACTION_1'
173
- });
174
- expect((0, _middleware.getLastAction)().type).toBe('ACTION_1');
175
- dispatch2({
176
- type: 'ACTION_2'
177
- });
178
- expect((0, _middleware.getLastAction)().type).toBe('ACTION_2');
179
- });
180
- it('preserves action types', function () {
181
- var middleware = (0, _middleware.lastActionMiddleware)();
182
- var next = jest.fn();
183
- var dispatch = middleware(next);
184
- var actionTypes = ['ADD_MARK', 'CHANGE_MARKS', 'DELETE_MARK', 'UPDATE_MARK'];
185
- actionTypes.forEach(function (type) {
186
- dispatch({
187
- type: type
188
- });
189
- expect((0, _middleware.getLastAction)().type).toBe(type);
190
- });
191
- });
192
- it('handles actions without type', function () {
193
- var middleware = (0, _middleware.lastActionMiddleware)();
194
- var next = jest.fn();
195
- var dispatch = middleware(next);
196
- var action = {
197
- payload: 'data'
198
- };
199
- dispatch(action);
200
- var lastAction = (0, _middleware.getLastAction)();
201
- expect(lastAction).toEqual(action);
202
- expect(lastAction.type).toBeUndefined();
203
- });
204
- it('handles empty action object', function () {
205
- var middleware = (0, _middleware.lastActionMiddleware)();
206
- var next = jest.fn();
207
- var dispatch = middleware(next);
208
- var action = {};
209
- dispatch(action);
210
- var lastAction = (0, _middleware.getLastAction)();
211
- expect(lastAction).toEqual(action);
212
- });
213
- });
214
- describe('error handling', function () {
215
- it('stores action even if next throws error', function () {
216
- var middleware = (0, _middleware.lastActionMiddleware)();
217
- var next = jest.fn(function () {
218
- throw new Error('Next error');
219
- });
220
- var dispatch = middleware(next);
221
- var action = {
222
- type: 'ERROR_ACTION'
223
- };
224
- expect(function () {
225
- return dispatch(action);
226
- }).toThrow('Next error');
227
- expect((0, _middleware.getLastAction)()).toEqual(action);
228
- });
229
- it('propagates errors from next', function () {
230
- var middleware = (0, _middleware.lastActionMiddleware)();
231
- var errorMessage = 'Test error';
232
- var next = jest.fn(function () {
233
- throw new Error(errorMessage);
234
- });
235
- var dispatch = middleware(next);
236
- expect(function () {
237
- return dispatch({
238
- type: 'TEST'
239
- });
240
- }).toThrow(errorMessage);
241
- });
242
- });
243
- });
244
- //# sourceMappingURL=middleware.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"middleware.test.js","names":["_middleware","require","describe","it","middleware","lastActionMiddleware","expect","_typeof2","toBe","next","jest","fn","result","dispatch","action","type","toHaveBeenCalledWith","expectedResult","status","lastAction","getLastAction","toBeDefined","toHaveBeenCalled","payload","toEqual","action1","action2","marks","id","length","data","nested","value","array","next1","next2","dispatch1","dispatch2","actionTypes","forEach","toBeUndefined","Error","toThrow","errorMessage"],"sources":["../../../src/container/__tests__/middleware.test.js"],"sourcesContent":["import { getLastAction, lastActionMiddleware } from '../middleware';\n\ndescribe('lastActionMiddleware', () => {\n describe('middleware functionality', () => {\n it('creates middleware function', () => {\n const middleware = lastActionMiddleware();\n expect(typeof middleware).toBe('function');\n });\n\n it('middleware returns a function', () => {\n const middleware = lastActionMiddleware();\n const next = jest.fn();\n const result = middleware(next);\n expect(typeof result).toBe('function');\n });\n\n it('calls next with action', () => {\n const middleware = lastActionMiddleware();\n const next = jest.fn();\n const dispatch = middleware(next);\n const action = { type: 'TEST_ACTION' };\n\n dispatch(action);\n expect(next).toHaveBeenCalledWith(action);\n });\n\n it('returns result from next', () => {\n const middleware = lastActionMiddleware();\n const expectedResult = { status: 'success' };\n const next = jest.fn(() => expectedResult);\n const dispatch = middleware(next);\n const action = { type: 'TEST_ACTION' };\n\n const result = dispatch(action);\n expect(result).toBe(expectedResult);\n });\n\n it('stores action before calling next', () => {\n const middleware = lastActionMiddleware();\n const next = jest.fn(() => {\n const lastAction = getLastAction();\n expect(lastAction).toBeDefined();\n expect(lastAction.type).toBe('TEST_ACTION');\n });\n const dispatch = middleware(next);\n const action = { type: 'TEST_ACTION' };\n\n dispatch(action);\n expect(next).toHaveBeenCalled();\n });\n });\n\n describe('getLastAction', () => {\n it('returns null initially', () => {\n const lastAction = getLastAction();\n expect(lastAction).toBeDefined();\n });\n\n it('returns last dispatched action', () => {\n const middleware = lastActionMiddleware();\n const next = jest.fn();\n const dispatch = middleware(next);\n const action = { type: 'MY_ACTION', payload: 'test' };\n\n dispatch(action);\n const lastAction = getLastAction();\n\n expect(lastAction).toEqual(action);\n expect(lastAction.type).toBe('MY_ACTION');\n expect(lastAction.payload).toBe('test');\n });\n\n it('updates when new action is dispatched', () => {\n const middleware = lastActionMiddleware();\n const next = jest.fn();\n const dispatch = middleware(next);\n\n const action1 = { type: 'ACTION_1' };\n dispatch(action1);\n expect(getLastAction()).toEqual(action1);\n\n const action2 = { type: 'ACTION_2' };\n dispatch(action2);\n expect(getLastAction()).toEqual(action2);\n });\n\n it('stores action with payload', () => {\n const middleware = lastActionMiddleware();\n const next = jest.fn();\n const dispatch = middleware(next);\n const action = {\n type: 'CHANGE_MARKS',\n marks: [{ id: 1, type: 'point' }],\n };\n\n dispatch(action);\n const lastAction = getLastAction();\n\n expect(lastAction.marks).toEqual(action.marks);\n expect(lastAction.marks.length).toBe(1);\n });\n\n it('stores action with complex payload', () => {\n const middleware = lastActionMiddleware();\n const next = jest.fn();\n const dispatch = middleware(next);\n const action = {\n type: 'COMPLEX_ACTION',\n data: {\n nested: {\n value: 123,\n array: [1, 2, 3],\n },\n },\n };\n\n dispatch(action);\n const lastAction = getLastAction();\n\n expect(lastAction.data.nested.value).toBe(123);\n expect(lastAction.data.nested.array).toEqual([1, 2, 3]);\n });\n });\n\n describe('action storage', () => {\n it('overwrites previous action', () => {\n const middleware = lastActionMiddleware();\n const next = jest.fn();\n const dispatch = middleware(next);\n\n dispatch({ type: 'FIRST' });\n dispatch({ type: 'SECOND' });\n dispatch({ type: 'THIRD' });\n\n const lastAction = getLastAction();\n expect(lastAction.type).toBe('THIRD');\n });\n\n it('stores reference to action object', () => {\n const middleware = lastActionMiddleware();\n const next = jest.fn();\n const dispatch = middleware(next);\n const action = { type: 'TEST', data: { value: 1 } };\n\n dispatch(action);\n const lastAction = getLastAction();\n\n // Modify original action\n action.data.value = 2;\n\n // Last action should reflect the change (same reference)\n expect(lastAction.data.value).toBe(2);\n });\n });\n\n describe('integration scenarios', () => {\n it('works with multiple middleware calls', () => {\n const middleware = lastActionMiddleware();\n const next1 = jest.fn();\n const next2 = jest.fn();\n\n const dispatch1 = middleware(next1);\n const dispatch2 = middleware(next2);\n\n dispatch1({ type: 'ACTION_1' });\n expect(getLastAction().type).toBe('ACTION_1');\n\n dispatch2({ type: 'ACTION_2' });\n expect(getLastAction().type).toBe('ACTION_2');\n });\n\n it('preserves action types', () => {\n const middleware = lastActionMiddleware();\n const next = jest.fn();\n const dispatch = middleware(next);\n\n const actionTypes = ['ADD_MARK', 'CHANGE_MARKS', 'DELETE_MARK', 'UPDATE_MARK'];\n\n actionTypes.forEach((type) => {\n dispatch({ type });\n expect(getLastAction().type).toBe(type);\n });\n });\n\n it('handles actions without type', () => {\n const middleware = lastActionMiddleware();\n const next = jest.fn();\n const dispatch = middleware(next);\n const action = { payload: 'data' };\n\n dispatch(action);\n const lastAction = getLastAction();\n\n expect(lastAction).toEqual(action);\n expect(lastAction.type).toBeUndefined();\n });\n\n it('handles empty action object', () => {\n const middleware = lastActionMiddleware();\n const next = jest.fn();\n const dispatch = middleware(next);\n const action = {};\n\n dispatch(action);\n const lastAction = getLastAction();\n\n expect(lastAction).toEqual(action);\n });\n });\n\n describe('error handling', () => {\n it('stores action even if next throws error', () => {\n const middleware = lastActionMiddleware();\n const next = jest.fn(() => {\n throw new Error('Next error');\n });\n const dispatch = middleware(next);\n const action = { type: 'ERROR_ACTION' };\n\n expect(() => dispatch(action)).toThrow('Next error');\n expect(getLastAction()).toEqual(action);\n });\n\n it('propagates errors from next', () => {\n const middleware = lastActionMiddleware();\n const errorMessage = 'Test error';\n const next = jest.fn(() => {\n throw new Error(errorMessage);\n });\n const dispatch = middleware(next);\n\n expect(() => dispatch({ type: 'TEST' })).toThrow(errorMessage);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}