@pie-lib/graphing 4.1.0-beta.6 → 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,503 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof3 = require("@babel/runtime/helpers/typeof");
5
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
6
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
7
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
8
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
- var _react = _interopRequireDefault(require("react"));
10
- var _testUtils = require("@pie-lib/test-utils");
11
- var _index = _interopRequireWildcard(require("../index"));
12
- var _actions = require("../actions");
13
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
14
- jest.mock('../../graph-with-controls', function () {
15
- return function GraphWithControls(_ref) {
16
- var marks = _ref.marks,
17
- onChangeMarks = _ref.onChangeMarks,
18
- onUndo = _ref.onUndo,
19
- onRedo = _ref.onRedo,
20
- onReset = _ref.onReset,
21
- disabled = _ref.disabled;
22
- return /*#__PURE__*/_react["default"].createElement("div", {
23
- "data-testid": "graph-with-controls"
24
- }, /*#__PURE__*/_react["default"].createElement("div", {
25
- "data-testid": "marks-count"
26
- }, (marks === null || marks === void 0 ? void 0 : marks.length) || 0), disabled && /*#__PURE__*/_react["default"].createElement("div", {
27
- "data-testid": "disabled-indicator"
28
- }, "Disabled"), /*#__PURE__*/_react["default"].createElement("button", {
29
- "data-testid": "change-marks",
30
- onClick: function onClick() {
31
- return onChangeMarks && onChangeMarks([{
32
- id: 1
33
- }]);
34
- }
35
- }, "Change"), /*#__PURE__*/_react["default"].createElement("button", {
36
- "data-testid": "undo",
37
- onClick: onUndo
38
- }, "Undo"), /*#__PURE__*/_react["default"].createElement("button", {
39
- "data-testid": "redo",
40
- onClick: onRedo
41
- }, "Redo"), /*#__PURE__*/_react["default"].createElement("button", {
42
- "data-testid": "reset",
43
- onClick: onReset
44
- }, "Reset"));
45
- };
46
- });
47
- jest.mock('@pie-lib/drag', function () {
48
- return {
49
- DragProvider: function DragProvider(_ref2) {
50
- var children = _ref2.children;
51
- return /*#__PURE__*/_react["default"].createElement("div", {
52
- "data-testid": "drag-provider"
53
- }, children);
54
- }
55
- };
56
- });
57
- describe('Container Root Component', function () {
58
- var defaultProps = {
59
- marks: [],
60
- onChangeMarks: jest.fn()
61
- };
62
- var renderComponent = function renderComponent() {
63
- var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
64
- return (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_index["default"], (0, _extends2["default"])({}, defaultProps, props)));
65
- };
66
- describe('rendering', function () {
67
- it('renders without crashing', function () {
68
- var _renderComponent = renderComponent(),
69
- container = _renderComponent.container;
70
- expect(container).toBeInTheDocument();
71
- });
72
- it('renders GraphWithControls', function () {
73
- var _renderComponent2 = renderComponent(),
74
- getByTestId = _renderComponent2.getByTestId;
75
- expect(getByTestId('graph-with-controls')).toBeInTheDocument();
76
- });
77
- it('renders with Provider when no correctness set', function () {
78
- var _renderComponent3 = renderComponent({
79
- marks: [{
80
- id: 1,
81
- type: 'point'
82
- }]
83
- }),
84
- container = _renderComponent3.container;
85
- expect(container.querySelector('[data-testid="graph-with-controls"]')).toBeInTheDocument();
86
- });
87
- it('renders directly when correctness is set', function () {
88
- var marks = [{
89
- id: 1,
90
- type: 'point',
91
- correctness: {
92
- value: 'correct'
93
- }
94
- }];
95
- var _renderComponent4 = renderComponent({
96
- marks: marks
97
- }),
98
- getByTestId = _renderComponent4.getByTestId;
99
- expect(getByTestId('graph-with-controls')).toBeInTheDocument();
100
- expect(getByTestId('disabled-indicator')).toBeInTheDocument();
101
- });
102
- it('passes marks to GraphWithControls', function () {
103
- var marks = [{
104
- id: 1
105
- }, {
106
- id: 2
107
- }];
108
- var _renderComponent5 = renderComponent({
109
- marks: marks
110
- }),
111
- getByTestId = _renderComponent5.getByTestId;
112
- expect(getByTestId('marks-count')).toHaveTextContent('2');
113
- });
114
- });
115
- describe('Redux store', function () {
116
- it('creates Redux store on mount', function () {
117
- var component = new _index["default"]({
118
- marks: [],
119
- onChangeMarks: jest.fn()
120
- });
121
- expect(component.store).toBeDefined();
122
- expect((0, _typeof2["default"])(component.store.getState)).toBe('function');
123
- expect((0, _typeof2["default"])(component.store.dispatch)).toBe('function');
124
- });
125
- it('initializes store with marks from props', function () {
126
- var marks = [{
127
- id: 1,
128
- type: 'point'
129
- }];
130
- var component = new _index["default"]({
131
- marks: marks,
132
- onChangeMarks: jest.fn()
133
- });
134
- var state = component.store.getState();
135
- expect(state.marks.present).toEqual(marks);
136
- });
137
- it('initializes store with empty marks', function () {
138
- var component = new _index["default"]({
139
- marks: [],
140
- onChangeMarks: jest.fn()
141
- });
142
- var state = component.store.getState();
143
- expect(state.marks.present).toEqual([]);
144
- });
145
- it('subscribes to store changes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
146
- var onChangeMarks, component, newMarks;
147
- return _regenerator["default"].wrap(function (_context) {
148
- while (1) switch (_context.prev = _context.next) {
149
- case 0:
150
- onChangeMarks = jest.fn();
151
- component = new _index["default"]({
152
- marks: [],
153
- onChangeMarks: onChangeMarks
154
- });
155
- newMarks = [{
156
- id: 1
157
- }];
158
- component.store.dispatch((0, _actions.changeMarks)(newMarks));
159
- _context.next = 1;
160
- return (0, _testUtils.waitFor)(function () {
161
- expect(onChangeMarks).toHaveBeenCalledWith(newMarks);
162
- });
163
- case 1:
164
- case "end":
165
- return _context.stop();
166
- }
167
- }, _callee);
168
- })));
169
- });
170
- describe('componentDidUpdate', function () {
171
- it('updates store when marks prop changes', function () {
172
- var onChangeMarks = jest.fn();
173
- var _render = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_index["default"], {
174
- marks: [],
175
- onChangeMarks: onChangeMarks
176
- })),
177
- rerender = _render.rerender;
178
- var newMarks = [{
179
- id: 1,
180
- type: 'point'
181
- }];
182
- rerender(/*#__PURE__*/_react["default"].createElement(_index["default"], {
183
- marks: newMarks,
184
- onChangeMarks: onChangeMarks
185
- }));
186
- expect(onChangeMarks).not.toHaveBeenCalled();
187
- });
188
- it('does not update when marks are equal', function () {
189
- var marks = [{
190
- id: 1,
191
- type: 'point'
192
- }];
193
- var onChangeMarks = jest.fn();
194
- var _render2 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_index["default"], {
195
- marks: marks,
196
- onChangeMarks: onChangeMarks
197
- })),
198
- rerender = _render2.rerender;
199
- onChangeMarks.mockClear();
200
- rerender(/*#__PURE__*/_react["default"].createElement(_index["default"], {
201
- marks: marks,
202
- onChangeMarks: onChangeMarks
203
- }));
204
- expect(onChangeMarks).not.toHaveBeenCalled();
205
- });
206
- it('handles marks changing from empty to non-empty', function () {
207
- var onChangeMarks = jest.fn();
208
- var _render3 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_index["default"], {
209
- marks: [],
210
- onChangeMarks: onChangeMarks
211
- })),
212
- rerender = _render3.rerender;
213
- var newMarks = [{
214
- id: 1
215
- }];
216
- expect(function () {
217
- rerender(/*#__PURE__*/_react["default"].createElement(_index["default"], {
218
- marks: newMarks,
219
- onChangeMarks: onChangeMarks
220
- }));
221
- }).not.toThrow();
222
- });
223
- it('handles marks changing from non-empty to empty', function () {
224
- var onChangeMarks = jest.fn();
225
- var _render4 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_index["default"], {
226
- marks: [{
227
- id: 1
228
- }],
229
- onChangeMarks: onChangeMarks
230
- })),
231
- rerender = _render4.rerender;
232
- expect(function () {
233
- rerender(/*#__PURE__*/_react["default"].createElement(_index["default"], {
234
- marks: [],
235
- onChangeMarks: onChangeMarks
236
- }));
237
- }).not.toThrow();
238
- });
239
- });
240
- describe('onStoreChange', function () {
241
- it('calls onChangeMarks when store state changes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
242
- var onChangeMarks, component, newMarks;
243
- return _regenerator["default"].wrap(function (_context2) {
244
- while (1) switch (_context2.prev = _context2.next) {
245
- case 0:
246
- onChangeMarks = jest.fn();
247
- component = new _index["default"]({
248
- marks: [],
249
- onChangeMarks: onChangeMarks
250
- });
251
- newMarks = [{
252
- id: 1,
253
- type: 'point'
254
- }];
255
- component.store.dispatch((0, _actions.changeMarks)(newMarks));
256
- _context2.next = 1;
257
- return (0, _testUtils.waitFor)(function () {
258
- expect(onChangeMarks).toHaveBeenCalledWith(newMarks);
259
- });
260
- case 1:
261
- case "end":
262
- return _context2.stop();
263
- }
264
- }, _callee2);
265
- })));
266
- it('does not call onChangeMarks when marks are equal', function () {
267
- var marks = [{
268
- id: 1,
269
- type: 'point'
270
- }];
271
- var onChangeMarks = jest.fn();
272
- var component = new _index["default"]({
273
- marks: marks,
274
- onChangeMarks: onChangeMarks
275
- });
276
- onChangeMarks.mockClear();
277
- component.store.dispatch((0, _actions.changeMarks)(marks));
278
- expect(onChangeMarks).not.toHaveBeenCalled();
279
- });
280
- it('handles multiple store changes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
281
- var onChangeMarks, component;
282
- return _regenerator["default"].wrap(function (_context3) {
283
- while (1) switch (_context3.prev = _context3.next) {
284
- case 0:
285
- onChangeMarks = jest.fn();
286
- component = new _index["default"]({
287
- marks: [],
288
- onChangeMarks: onChangeMarks
289
- });
290
- component.store.dispatch((0, _actions.changeMarks)([{
291
- id: 1
292
- }]));
293
- component.store.dispatch((0, _actions.changeMarks)([{
294
- id: 2
295
- }]));
296
- component.store.dispatch((0, _actions.changeMarks)([{
297
- id: 3
298
- }]));
299
- _context3.next = 1;
300
- return (0, _testUtils.waitFor)(function () {
301
- expect(onChangeMarks).toHaveBeenCalledTimes(3);
302
- });
303
- case 1:
304
- case "end":
305
- return _context3.stop();
306
- }
307
- }, _callee3);
308
- })));
309
- });
310
- describe('correctness handling', function () {
311
- it('disables when any mark has correctness', function () {
312
- var marks = [{
313
- id: 1,
314
- type: 'point'
315
- }, {
316
- id: 2,
317
- type: 'point',
318
- correctness: {
319
- value: 'correct'
320
- }
321
- }];
322
- var _renderComponent6 = renderComponent({
323
- marks: marks
324
- }),
325
- getByTestId = _renderComponent6.getByTestId;
326
- expect(getByTestId('disabled-indicator')).toBeInTheDocument();
327
- });
328
- it('renders without Provider when correctness is set', function () {
329
- var marks = [{
330
- id: 1,
331
- correctness: {
332
- value: 'correct'
333
- }
334
- }];
335
- var _renderComponent7 = renderComponent({
336
- marks: marks
337
- }),
338
- container = _renderComponent7.container;
339
- expect(container.querySelector('[data-testid="graph-with-controls"]')).toBeInTheDocument();
340
- });
341
- it('does not disable when no correctness is set', function () {
342
- var marks = [{
343
- id: 1,
344
- type: 'point'
345
- }, {
346
- id: 2,
347
- type: 'line'
348
- }];
349
- var _renderComponent8 = renderComponent({
350
- marks: marks
351
- }),
352
- queryByTestId = _renderComponent8.queryByTestId;
353
- expect(queryByTestId('disabled-indicator')).not.toBeInTheDocument();
354
- });
355
- it('handles correctness with different values', function () {
356
- var marks = [{
357
- id: 1,
358
- correctness: {
359
- value: 'incorrect'
360
- }
361
- }];
362
- var _renderComponent9 = renderComponent({
363
- marks: marks
364
- }),
365
- getByTestId = _renderComponent9.getByTestId;
366
- expect(getByTestId('disabled-indicator')).toBeInTheDocument();
367
- });
368
- it('handles empty correctness object', function () {
369
- var marks = [{
370
- id: 1,
371
- correctness: {}
372
- }];
373
- var _renderComponent0 = renderComponent({
374
- marks: marks
375
- }),
376
- getByTestId = _renderComponent0.getByTestId;
377
- expect(getByTestId('disabled-indicator')).toBeInTheDocument();
378
- });
379
- });
380
- describe('props forwarding', function () {
381
- it('forwards additional props to GraphWithControls', function () {
382
- var _renderComponent1 = renderComponent({
383
- className: 'custom-class',
384
- size: {
385
- width: 500,
386
- height: 500
387
- }
388
- }),
389
- container = _renderComponent1.container;
390
- expect(container.querySelector('[data-testid="graph-with-controls"]')).toBeInTheDocument();
391
- });
392
- it('does not forward onChangeMarks and marks to GraphWithControls', function () {
393
- var _renderComponent10 = renderComponent({
394
- marks: [{
395
- id: 1
396
- }],
397
- onChangeMarks: jest.fn(),
398
- otherProp: 'test'
399
- }),
400
- getByTestId = _renderComponent10.getByTestId;
401
- expect(getByTestId('graph-with-controls')).toBeInTheDocument();
402
- });
403
- });
404
- describe('edge cases', function () {
405
- it('handles empty marks array', function () {
406
- var _renderComponent11 = renderComponent({
407
- marks: []
408
- }),
409
- container = _renderComponent11.container;
410
- expect(container).toBeInTheDocument();
411
- });
412
- it('handles marks with complex structure', function () {
413
- var marks = [{
414
- id: 1,
415
- type: 'line',
416
- from: {
417
- x: 0,
418
- y: 0
419
- },
420
- to: {
421
- x: 10,
422
- y: 10
423
- },
424
- label: 'Line A',
425
- correctness: {
426
- value: 'correct',
427
- label: 'Correct!'
428
- }
429
- }];
430
- var _renderComponent12 = renderComponent({
431
- marks: marks
432
- }),
433
- getByTestId = _renderComponent12.getByTestId;
434
- expect(getByTestId('graph-with-controls')).toBeInTheDocument();
435
- });
436
- it('handles switching between correctness states', function () {
437
- var _render5 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_index["default"], {
438
- marks: [{
439
- id: 1
440
- }],
441
- onChangeMarks: jest.fn()
442
- })),
443
- rerender = _render5.rerender;
444
- rerender(/*#__PURE__*/_react["default"].createElement(_index["default"], {
445
- marks: [{
446
- id: 1,
447
- correctness: {
448
- value: 'correct'
449
- }
450
- }],
451
- onChangeMarks: jest.fn()
452
- }));
453
- rerender(/*#__PURE__*/_react["default"].createElement(_index["default"], {
454
- marks: [{
455
- id: 1
456
- }],
457
- onChangeMarks: jest.fn()
458
- }));
459
- expect(document.querySelector('[data-testid="graph-with-controls"]')).toBeInTheDocument();
460
- });
461
- });
462
- describe('store synchronization', function () {
463
- it('keeps store and props in sync', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
464
- var onChangeMarks, component, newMarks;
465
- return _regenerator["default"].wrap(function (_context4) {
466
- while (1) switch (_context4.prev = _context4.next) {
467
- case 0:
468
- onChangeMarks = jest.fn();
469
- component = new _index["default"]({
470
- marks: [],
471
- onChangeMarks: onChangeMarks
472
- });
473
- newMarks = [{
474
- id: 1
475
- }];
476
- component.store.dispatch((0, _actions.changeMarks)(newMarks));
477
- _context4.next = 1;
478
- return (0, _testUtils.waitFor)(function () {
479
- var state = component.store.getState();
480
- expect(state.marks.present).toEqual(newMarks);
481
- expect(onChangeMarks).toHaveBeenCalledWith(newMarks);
482
- });
483
- case 1:
484
- case "end":
485
- return _context4.stop();
486
- }
487
- }, _callee4);
488
- })));
489
- });
490
- });
491
- describe('GraphContainer (connected component)', function () {
492
- it('is a connected component', function () {
493
- expect(_index.GraphContainer).toBeDefined();
494
- expect(_index.GraphContainer.displayName).toContain('Connect');
495
- });
496
- it('maps state to props', function () {
497
- expect(_index.GraphContainer).toBeDefined();
498
- });
499
- it('maps dispatch to props', function () {
500
- expect(_index.GraphContainer).toBeDefined();
501
- });
502
- });
503
- //# sourceMappingURL=index.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.js","names":["_react","_interopRequireDefault","require","_testUtils","_index","_interopRequireWildcard","_actions","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof3","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","jest","mock","GraphWithControls","_ref","marks","onChangeMarks","onUndo","onRedo","onReset","disabled","createElement","length","onClick","id","DragProvider","_ref2","children","describe","defaultProps","fn","renderComponent","props","arguments","undefined","render","_extends2","it","_renderComponent","container","expect","toBeInTheDocument","_renderComponent2","getByTestId","_renderComponent3","type","querySelector","correctness","value","_renderComponent4","_renderComponent5","toHaveTextContent","component","Root","store","toBeDefined","_typeof2","getState","toBe","dispatch","state","present","toEqual","_asyncToGenerator2","_regenerator","mark","_callee","newMarks","wrap","_context","prev","next","changeMarks","waitFor","toHaveBeenCalledWith","stop","_render","rerender","not","toHaveBeenCalled","_render2","mockClear","_render3","toThrow","_render4","_callee2","_context2","_callee3","_context3","toHaveBeenCalledTimes","_renderComponent6","_renderComponent7","_renderComponent8","queryByTestId","_renderComponent9","_renderComponent0","_renderComponent1","className","size","width","height","_renderComponent10","otherProp","_renderComponent11","from","x","y","to","label","_renderComponent12","_render5","document","_callee4","_context4","GraphContainer","displayName","toContain"],"sources":["../../../src/container/__tests__/index.test.jsx"],"sourcesContent":["import React from 'react';\nimport { render, waitFor } from '@pie-lib/test-utils';\nimport Root, { GraphContainer } from '../index';\nimport { changeMarks } from '../actions';\n\njest.mock('../../graph-with-controls', () => {\n return function GraphWithControls({ marks, onChangeMarks, onUndo, onRedo, onReset, disabled }) {\n return (\n <div data-testid=\"graph-with-controls\">\n <div data-testid=\"marks-count\">{marks?.length || 0}</div>\n {disabled && <div data-testid=\"disabled-indicator\">Disabled</div>}\n <button data-testid=\"change-marks\" onClick={() => onChangeMarks && onChangeMarks([{ id: 1 }])}>\n Change\n </button>\n <button data-testid=\"undo\" onClick={onUndo}>\n Undo\n </button>\n <button data-testid=\"redo\" onClick={onRedo}>\n Redo\n </button>\n <button data-testid=\"reset\" onClick={onReset}>\n Reset\n </button>\n </div>\n );\n };\n});\n\njest.mock('@pie-lib/drag', () => ({\n DragProvider: ({ children }) => <div data-testid=\"drag-provider\">{children}</div>,\n}));\n\ndescribe('Container Root Component', () => {\n const defaultProps = {\n marks: [],\n onChangeMarks: jest.fn(),\n };\n\n const renderComponent = (props = {}) => {\n return render(<Root {...defaultProps} {...props} />);\n };\n\n describe('rendering', () => {\n it('renders without crashing', () => {\n const { container } = renderComponent();\n expect(container).toBeInTheDocument();\n });\n\n it('renders GraphWithControls', () => {\n const { getByTestId } = renderComponent();\n expect(getByTestId('graph-with-controls')).toBeInTheDocument();\n });\n\n it('renders with Provider when no correctness set', () => {\n const { container } = renderComponent({ marks: [{ id: 1, type: 'point' }] });\n expect(container.querySelector('[data-testid=\"graph-with-controls\"]')).toBeInTheDocument();\n });\n\n it('renders directly when correctness is set', () => {\n const marks = [{ id: 1, type: 'point', correctness: { value: 'correct' } }];\n const { getByTestId } = renderComponent({ marks });\n\n expect(getByTestId('graph-with-controls')).toBeInTheDocument();\n expect(getByTestId('disabled-indicator')).toBeInTheDocument();\n });\n\n it('passes marks to GraphWithControls', () => {\n const marks = [{ id: 1 }, { id: 2 }];\n const { getByTestId } = renderComponent({ marks });\n expect(getByTestId('marks-count')).toHaveTextContent('2');\n });\n });\n\n describe('Redux store', () => {\n it('creates Redux store on mount', () => {\n const component = new Root({ marks: [], onChangeMarks: jest.fn() });\n expect(component.store).toBeDefined();\n expect(typeof component.store.getState).toBe('function');\n expect(typeof component.store.dispatch).toBe('function');\n });\n\n it('initializes store with marks from props', () => {\n const marks = [{ id: 1, type: 'point' }];\n const component = new Root({ marks, onChangeMarks: jest.fn() });\n\n const state = component.store.getState();\n expect(state.marks.present).toEqual(marks);\n });\n\n it('initializes store with empty marks', () => {\n const component = new Root({ marks: [], onChangeMarks: jest.fn() });\n\n const state = component.store.getState();\n expect(state.marks.present).toEqual([]);\n });\n\n it('subscribes to store changes', async () => {\n const onChangeMarks = jest.fn();\n const component = new Root({ marks: [], onChangeMarks });\n\n const newMarks = [{ id: 1 }];\n component.store.dispatch(changeMarks(newMarks));\n\n await waitFor(() => {\n expect(onChangeMarks).toHaveBeenCalledWith(newMarks);\n });\n });\n });\n\n describe('componentDidUpdate', () => {\n it('updates store when marks prop changes', () => {\n const onChangeMarks = jest.fn();\n const { rerender } = render(<Root marks={[]} onChangeMarks={onChangeMarks} />);\n\n const newMarks = [{ id: 1, type: 'point' }];\n rerender(<Root marks={newMarks} onChangeMarks={onChangeMarks} />);\n\n expect(onChangeMarks).not.toHaveBeenCalled();\n });\n\n it('does not update when marks are equal', () => {\n const marks = [{ id: 1, type: 'point' }];\n const onChangeMarks = jest.fn();\n const { rerender } = render(<Root marks={marks} onChangeMarks={onChangeMarks} />);\n\n onChangeMarks.mockClear();\n\n rerender(<Root marks={marks} onChangeMarks={onChangeMarks} />);\n\n expect(onChangeMarks).not.toHaveBeenCalled();\n });\n\n it('handles marks changing from empty to non-empty', () => {\n const onChangeMarks = jest.fn();\n const { rerender } = render(<Root marks={[]} onChangeMarks={onChangeMarks} />);\n\n const newMarks = [{ id: 1 }];\n\n expect(() => {\n rerender(<Root marks={newMarks} onChangeMarks={onChangeMarks} />);\n }).not.toThrow();\n });\n\n it('handles marks changing from non-empty to empty', () => {\n const onChangeMarks = jest.fn();\n const { rerender } = render(<Root marks={[{ id: 1 }]} onChangeMarks={onChangeMarks} />);\n\n expect(() => {\n rerender(<Root marks={[]} onChangeMarks={onChangeMarks} />);\n }).not.toThrow();\n });\n });\n\n describe('onStoreChange', () => {\n it('calls onChangeMarks when store state changes', async () => {\n const onChangeMarks = jest.fn();\n const component = new Root({ marks: [], onChangeMarks });\n\n const newMarks = [{ id: 1, type: 'point' }];\n component.store.dispatch(changeMarks(newMarks));\n\n await waitFor(() => {\n expect(onChangeMarks).toHaveBeenCalledWith(newMarks);\n });\n });\n\n it('does not call onChangeMarks when marks are equal', () => {\n const marks = [{ id: 1, type: 'point' }];\n const onChangeMarks = jest.fn();\n const component = new Root({ marks, onChangeMarks });\n\n onChangeMarks.mockClear();\n\n component.store.dispatch(changeMarks(marks));\n\n expect(onChangeMarks).not.toHaveBeenCalled();\n });\n\n it('handles multiple store changes', async () => {\n const onChangeMarks = jest.fn();\n const component = new Root({ marks: [], onChangeMarks });\n\n component.store.dispatch(changeMarks([{ id: 1 }]));\n component.store.dispatch(changeMarks([{ id: 2 }]));\n component.store.dispatch(changeMarks([{ id: 3 }]));\n\n await waitFor(() => {\n expect(onChangeMarks).toHaveBeenCalledTimes(3);\n });\n });\n });\n\n describe('correctness handling', () => {\n it('disables when any mark has correctness', () => {\n const marks = [\n { id: 1, type: 'point' },\n { id: 2, type: 'point', correctness: { value: 'correct' } },\n ];\n const { getByTestId } = renderComponent({ marks });\n\n expect(getByTestId('disabled-indicator')).toBeInTheDocument();\n });\n\n it('renders without Provider when correctness is set', () => {\n const marks = [{ id: 1, correctness: { value: 'correct' } }];\n const { container } = renderComponent({ marks });\n\n expect(container.querySelector('[data-testid=\"graph-with-controls\"]')).toBeInTheDocument();\n });\n\n it('does not disable when no correctness is set', () => {\n const marks = [\n { id: 1, type: 'point' },\n { id: 2, type: 'line' },\n ];\n const { queryByTestId } = renderComponent({ marks });\n\n expect(queryByTestId('disabled-indicator')).not.toBeInTheDocument();\n });\n\n it('handles correctness with different values', () => {\n const marks = [{ id: 1, correctness: { value: 'incorrect' } }];\n const { getByTestId } = renderComponent({ marks });\n\n expect(getByTestId('disabled-indicator')).toBeInTheDocument();\n });\n\n it('handles empty correctness object', () => {\n const marks = [{ id: 1, correctness: {} }];\n const { getByTestId } = renderComponent({ marks });\n\n expect(getByTestId('disabled-indicator')).toBeInTheDocument();\n });\n });\n\n describe('props forwarding', () => {\n it('forwards additional props to GraphWithControls', () => {\n const { container } = renderComponent({\n className: 'custom-class',\n size: { width: 500, height: 500 },\n });\n\n expect(container.querySelector('[data-testid=\"graph-with-controls\"]')).toBeInTheDocument();\n });\n\n it('does not forward onChangeMarks and marks to GraphWithControls', () => {\n const { getByTestId } = renderComponent({\n marks: [{ id: 1 }],\n onChangeMarks: jest.fn(),\n otherProp: 'test',\n });\n\n expect(getByTestId('graph-with-controls')).toBeInTheDocument();\n });\n });\n\n describe('edge cases', () => {\n it('handles empty marks array', () => {\n const { container } = renderComponent({ marks: [] });\n expect(container).toBeInTheDocument();\n });\n\n it('handles marks with complex structure', () => {\n const marks = [\n {\n id: 1,\n type: 'line',\n from: { x: 0, y: 0 },\n to: { x: 10, y: 10 },\n label: 'Line A',\n correctness: { value: 'correct', label: 'Correct!' },\n },\n ];\n const { getByTestId } = renderComponent({ marks });\n expect(getByTestId('graph-with-controls')).toBeInTheDocument();\n });\n\n it('handles switching between correctness states', () => {\n const { rerender } = render(<Root marks={[{ id: 1 }]} onChangeMarks={jest.fn()} />);\n\n rerender(<Root marks={[{ id: 1, correctness: { value: 'correct' } }]} onChangeMarks={jest.fn()} />);\n\n rerender(<Root marks={[{ id: 1 }]} onChangeMarks={jest.fn()} />);\n\n expect(document.querySelector('[data-testid=\"graph-with-controls\"]')).toBeInTheDocument();\n });\n });\n\n describe('store synchronization', () => {\n it('keeps store and props in sync', async () => {\n const onChangeMarks = jest.fn();\n const component = new Root({ marks: [], onChangeMarks });\n\n const newMarks = [{ id: 1 }];\n component.store.dispatch(changeMarks(newMarks));\n\n await waitFor(() => {\n const state = component.store.getState();\n expect(state.marks.present).toEqual(newMarks);\n expect(onChangeMarks).toHaveBeenCalledWith(newMarks);\n });\n });\n });\n});\n\ndescribe('GraphContainer (connected component)', () => {\n it('is a connected component', () => {\n expect(GraphContainer).toBeDefined();\n expect(GraphContainer.displayName).toContain('Connect');\n });\n\n it('maps state to props', () => {\n expect(GraphContainer).toBeDefined();\n });\n\n it('maps dispatch to props', () => {\n expect(GraphContainer).toBeDefined();\n });\n});\n"],"mappings":"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","ignoreList":[]}