@pie-lib/graphing-solution-set 4.0.13 → 4.1.0-beta.1
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.
- package/CHANGELOG.md +0 -44
- package/lib/__tests__/bg.test.js +282 -0
- package/lib/__tests__/bg.test.js.map +1 -0
- package/lib/__tests__/coordinates-label.test.js +276 -0
- package/lib/__tests__/coordinates-label.test.js.map +1 -0
- package/lib/__tests__/graph-with-controls.test.js +256 -0
- package/lib/__tests__/graph-with-controls.test.js.map +1 -0
- package/lib/__tests__/graph.test.js +113 -0
- package/lib/__tests__/graph.test.js.map +1 -0
- package/lib/__tests__/grid-setup.test.js +729 -0
- package/lib/__tests__/grid-setup.test.js.map +1 -0
- package/lib/__tests__/grid.test.js +29 -0
- package/lib/__tests__/grid.test.js.map +1 -0
- package/lib/__tests__/labels.test.js +45 -0
- package/lib/__tests__/labels.test.js.map +1 -0
- package/lib/__tests__/mark-label.test.js +133 -0
- package/lib/__tests__/mark-label.test.js.map +1 -0
- package/lib/__tests__/toggle-bar.test.js +146 -0
- package/lib/__tests__/toggle-bar.test.js.map +1 -0
- package/lib/__tests__/tool-menu.test.js +540 -0
- package/lib/__tests__/tool-menu.test.js.map +1 -0
- package/lib/__tests__/undo-redo.test.js +31 -0
- package/lib/__tests__/undo-redo.test.js.map +1 -0
- package/lib/__tests__/use-debounce.test.js +24 -0
- package/lib/__tests__/use-debounce.test.js.map +1 -0
- package/lib/__tests__/utils.js +70 -0
- package/lib/__tests__/utils.js.map +1 -0
- package/lib/__tests__/utils.test.js +123 -0
- package/lib/__tests__/utils.test.js.map +1 -0
- package/lib/axis/__tests__/arrow.test.js +60 -0
- package/lib/axis/__tests__/arrow.test.js.map +1 -0
- package/lib/axis/__tests__/axes.test.js +160 -0
- package/lib/axis/__tests__/axes.test.js.map +1 -0
- package/lib/container/__tests__/actions.test.js +108 -0
- package/lib/container/__tests__/actions.test.js.map +1 -0
- package/lib/container/__tests__/index.test.js +346 -0
- package/lib/container/__tests__/index.test.js.map +1 -0
- package/lib/container/__tests__/marks.test.js +259 -0
- package/lib/container/__tests__/marks.test.js.map +1 -0
- package/lib/container/__tests__/middleware.test.js +244 -0
- package/lib/container/__tests__/middleware.test.js.map +1 -0
- package/lib/container/__tests__/reducer.test.js +450 -0
- package/lib/container/__tests__/reducer.test.js.map +1 -0
- package/lib/tools/line/__tests__/component.test.js +45 -0
- package/lib/tools/line/__tests__/component.test.js.map +1 -0
- package/lib/tools/polygon/__tests__/component.test.js +501 -0
- package/lib/tools/polygon/__tests__/component.test.js.map +1 -0
- package/lib/tools/polygon/__tests__/index.test.js +92 -0
- package/lib/tools/polygon/__tests__/index.test.js.map +1 -0
- package/lib/tools/polygon/__tests__/line.test.js +30 -0
- package/lib/tools/polygon/__tests__/line.test.js.map +1 -0
- package/lib/tools/polygon/__tests__/polygon.test.js +61 -0
- package/lib/tools/polygon/__tests__/polygon.test.js.map +1 -0
- package/lib/tools/shared/__tests__/arrow-head.test.js +45 -0
- package/lib/tools/shared/__tests__/arrow-head.test.js.map +1 -0
- package/lib/tools/shared/line/__tests__/index.test.js +725 -0
- package/lib/tools/shared/line/__tests__/index.test.js.map +1 -0
- package/lib/tools/shared/line/__tests__/line-path.test.js +64 -0
- package/lib/tools/shared/line/__tests__/line-path.test.js.map +1 -0
- package/lib/tools/shared/line/__tests__/with-root-edge.test.js +618 -0
- package/lib/tools/shared/line/__tests__/with-root-edge.test.js.map +1 -0
- package/lib/tools/shared/point/__tests__/arrow-point.test.js +127 -0
- package/lib/tools/shared/point/__tests__/arrow-point.test.js.map +1 -0
- package/lib/tools/shared/point/__tests__/arrow.test.js +619 -0
- package/lib/tools/shared/point/__tests__/arrow.test.js.map +1 -0
- package/lib/tools/shared/point/__tests__/base-point.test.js +122 -0
- package/lib/tools/shared/point/__tests__/base-point.test.js.map +1 -0
- package/package.json +7 -7
- package/LICENSE.md +0 -5
|
@@ -0,0 +1,540 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
5
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
6
|
+
var _testUtils = require("@pie-lib/test-utils");
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _toolMenu = _interopRequireDefault(require("../tool-menu"));
|
|
9
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
10
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
11
|
+
describe('ToolMenu', function () {
|
|
12
|
+
var onChange;
|
|
13
|
+
var tools = ['one', 'two'];
|
|
14
|
+
beforeEach(function () {
|
|
15
|
+
onChange = jest.fn();
|
|
16
|
+
});
|
|
17
|
+
var renderComponent = function renderComponent(extras) {
|
|
18
|
+
var defaults = {
|
|
19
|
+
classes: {},
|
|
20
|
+
className: 'className',
|
|
21
|
+
onChange: onChange,
|
|
22
|
+
currentTool: tools[0],
|
|
23
|
+
tools: tools,
|
|
24
|
+
gssLineData: {
|
|
25
|
+
selectedTool: 'lineA',
|
|
26
|
+
numberOfLines: 2,
|
|
27
|
+
lineA: {
|
|
28
|
+
lineType: 'Solid'
|
|
29
|
+
},
|
|
30
|
+
lineB: {
|
|
31
|
+
lineType: 'Solid'
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
var props = _objectSpread(_objectSpread({}, defaults), extras);
|
|
36
|
+
return (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_toolMenu["default"], props));
|
|
37
|
+
};
|
|
38
|
+
describe('rendering', function () {
|
|
39
|
+
it('renders without crashing', function () {
|
|
40
|
+
var _renderComponent = renderComponent(),
|
|
41
|
+
container = _renderComponent.container;
|
|
42
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
43
|
+
});
|
|
44
|
+
it('renders Line A radio button', function () {
|
|
45
|
+
var _renderComponent2 = renderComponent(),
|
|
46
|
+
getByText = _renderComponent2.getByText;
|
|
47
|
+
expect(getByText('Line A')).toBeInTheDocument();
|
|
48
|
+
});
|
|
49
|
+
it('renders Line B radio button when numberOfLines is 2', function () {
|
|
50
|
+
var _renderComponent3 = renderComponent(),
|
|
51
|
+
getByText = _renderComponent3.getByText;
|
|
52
|
+
expect(getByText('Line B')).toBeInTheDocument();
|
|
53
|
+
});
|
|
54
|
+
it('does not render Line B radio button when numberOfLines is 1', function () {
|
|
55
|
+
var _renderComponent4 = renderComponent({
|
|
56
|
+
gssLineData: {
|
|
57
|
+
selectedTool: 'lineA',
|
|
58
|
+
numberOfLines: 1,
|
|
59
|
+
lineA: {
|
|
60
|
+
lineType: 'Solid'
|
|
61
|
+
},
|
|
62
|
+
lineB: {
|
|
63
|
+
lineType: 'Solid'
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}),
|
|
67
|
+
queryByText = _renderComponent4.queryByText;
|
|
68
|
+
expect(queryByText('Line B')).not.toBeInTheDocument();
|
|
69
|
+
});
|
|
70
|
+
it('renders Solution Set radio button', function () {
|
|
71
|
+
var _renderComponent5 = renderComponent(),
|
|
72
|
+
getByText = _renderComponent5.getByText;
|
|
73
|
+
expect(getByText('Solution Set')).toBeInTheDocument();
|
|
74
|
+
});
|
|
75
|
+
it('renders Solid and Dashed buttons for Line A', function () {
|
|
76
|
+
var _renderComponent6 = renderComponent(),
|
|
77
|
+
getAllByText = _renderComponent6.getAllByText;
|
|
78
|
+
var solidButtons = getAllByText(/Solid/);
|
|
79
|
+
var dashedButtons = getAllByText(/Dashed/);
|
|
80
|
+
expect(solidButtons.length).toBeGreaterThan(0);
|
|
81
|
+
expect(dashedButtons.length).toBeGreaterThan(0);
|
|
82
|
+
});
|
|
83
|
+
it('shows checkmark on selected line type for Line A', function () {
|
|
84
|
+
var _renderComponent7 = renderComponent({
|
|
85
|
+
gssLineData: {
|
|
86
|
+
selectedTool: 'lineA',
|
|
87
|
+
numberOfLines: 2,
|
|
88
|
+
lineA: {
|
|
89
|
+
lineType: 'Solid'
|
|
90
|
+
},
|
|
91
|
+
lineB: {
|
|
92
|
+
lineType: 'Dashed'
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}),
|
|
96
|
+
getAllByText = _renderComponent7.getAllByText;
|
|
97
|
+
var solidButtons = getAllByText(/✔ Solid/);
|
|
98
|
+
expect(solidButtons.length).toBeGreaterThan(0);
|
|
99
|
+
});
|
|
100
|
+
it('disables all controls when disabled prop is true', function () {
|
|
101
|
+
var _renderComponent8 = renderComponent({
|
|
102
|
+
disabled: true
|
|
103
|
+
}),
|
|
104
|
+
getAllByRole = _renderComponent8.getAllByRole;
|
|
105
|
+
var radios = getAllByRole('radio');
|
|
106
|
+
var buttons = getAllByRole('button');
|
|
107
|
+
radios.forEach(function (radio) {
|
|
108
|
+
expect(radio).toBeDisabled();
|
|
109
|
+
});
|
|
110
|
+
buttons.forEach(function (button) {
|
|
111
|
+
expect(button).toBeDisabled();
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe('onChangeRadioValue', function () {
|
|
116
|
+
it('calls onChange with updated selectedTool when lineA radio is clicked', function () {
|
|
117
|
+
var _renderComponent9 = renderComponent({
|
|
118
|
+
gssLineData: {
|
|
119
|
+
selectedTool: 'solutionSet',
|
|
120
|
+
numberOfLines: 2,
|
|
121
|
+
lineA: {
|
|
122
|
+
lineType: 'Solid'
|
|
123
|
+
},
|
|
124
|
+
lineB: {
|
|
125
|
+
lineType: 'Solid'
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}),
|
|
129
|
+
getAllByRole = _renderComponent9.getAllByRole;
|
|
130
|
+
var radios = getAllByRole('radio');
|
|
131
|
+
var lineARadio = radios.find(function (r) {
|
|
132
|
+
return r.value === 'lineA';
|
|
133
|
+
});
|
|
134
|
+
_testUtils.fireEvent.click(lineARadio);
|
|
135
|
+
expect(onChange).toHaveBeenCalledTimes(1);
|
|
136
|
+
var _onChange$mock$calls$ = (0, _slicedToArray2["default"])(onChange.mock.calls[0], 2),
|
|
137
|
+
updatedData = _onChange$mock$calls$[0],
|
|
138
|
+
oldSelectedTool = _onChange$mock$calls$[1];
|
|
139
|
+
expect(updatedData.selectedTool).toBe('lineA');
|
|
140
|
+
expect(oldSelectedTool).toBe('solutionSet');
|
|
141
|
+
});
|
|
142
|
+
it('calls onChange with updated selectedTool when lineB radio is clicked', function () {
|
|
143
|
+
var _renderComponent0 = renderComponent({
|
|
144
|
+
gssLineData: {
|
|
145
|
+
selectedTool: 'lineA',
|
|
146
|
+
numberOfLines: 2,
|
|
147
|
+
lineA: {
|
|
148
|
+
lineType: 'Solid'
|
|
149
|
+
},
|
|
150
|
+
lineB: {
|
|
151
|
+
lineType: 'Solid'
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}),
|
|
155
|
+
getAllByRole = _renderComponent0.getAllByRole;
|
|
156
|
+
var radios = getAllByRole('radio');
|
|
157
|
+
var lineBRadio = radios.find(function (r) {
|
|
158
|
+
return r.value === 'lineB';
|
|
159
|
+
});
|
|
160
|
+
_testUtils.fireEvent.click(lineBRadio);
|
|
161
|
+
expect(onChange).toHaveBeenCalledTimes(1);
|
|
162
|
+
var _onChange$mock$calls$2 = (0, _slicedToArray2["default"])(onChange.mock.calls[0], 2),
|
|
163
|
+
updatedData = _onChange$mock$calls$2[0],
|
|
164
|
+
oldSelectedTool = _onChange$mock$calls$2[1];
|
|
165
|
+
expect(updatedData.selectedTool).toBe('lineB');
|
|
166
|
+
expect(oldSelectedTool).toBe('lineA');
|
|
167
|
+
});
|
|
168
|
+
it('calls onChange with updated selectedTool when solutionSet radio is clicked', function () {
|
|
169
|
+
var _renderComponent1 = renderComponent({
|
|
170
|
+
gssLineData: {
|
|
171
|
+
selectedTool: 'lineA',
|
|
172
|
+
numberOfLines: 2,
|
|
173
|
+
lineA: {
|
|
174
|
+
lineType: 'Solid'
|
|
175
|
+
},
|
|
176
|
+
lineB: {
|
|
177
|
+
lineType: 'Solid'
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}),
|
|
181
|
+
getAllByRole = _renderComponent1.getAllByRole;
|
|
182
|
+
var radios = getAllByRole('radio');
|
|
183
|
+
var solutionSetRadio = radios.find(function (r) {
|
|
184
|
+
return r.value === 'solutionSet';
|
|
185
|
+
});
|
|
186
|
+
_testUtils.fireEvent.click(solutionSetRadio);
|
|
187
|
+
expect(onChange).toHaveBeenCalledTimes(1);
|
|
188
|
+
var _onChange$mock$calls$3 = (0, _slicedToArray2["default"])(onChange.mock.calls[0], 2),
|
|
189
|
+
updatedData = _onChange$mock$calls$3[0],
|
|
190
|
+
oldSelectedTool = _onChange$mock$calls$3[1];
|
|
191
|
+
expect(updatedData.selectedTool).toBe('solutionSet');
|
|
192
|
+
expect(oldSelectedTool).toBe('lineA');
|
|
193
|
+
});
|
|
194
|
+
it('preserves other gssLineData properties when changing selectedTool', function () {
|
|
195
|
+
var _renderComponent10 = renderComponent({
|
|
196
|
+
gssLineData: {
|
|
197
|
+
selectedTool: 'lineA',
|
|
198
|
+
numberOfLines: 2,
|
|
199
|
+
lineA: {
|
|
200
|
+
lineType: 'Dashed'
|
|
201
|
+
},
|
|
202
|
+
lineB: {
|
|
203
|
+
lineType: 'Solid'
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}),
|
|
207
|
+
getAllByRole = _renderComponent10.getAllByRole;
|
|
208
|
+
var radios = getAllByRole('radio');
|
|
209
|
+
var lineBRadio = radios.find(function (r) {
|
|
210
|
+
return r.value === 'lineB';
|
|
211
|
+
});
|
|
212
|
+
_testUtils.fireEvent.click(lineBRadio);
|
|
213
|
+
var _onChange$mock$calls$4 = (0, _slicedToArray2["default"])(onChange.mock.calls[0], 1),
|
|
214
|
+
updatedData = _onChange$mock$calls$4[0];
|
|
215
|
+
expect(updatedData.lineA.lineType).toBe('Dashed');
|
|
216
|
+
expect(updatedData.lineB.lineType).toBe('Solid');
|
|
217
|
+
expect(updatedData.numberOfLines).toBe(2);
|
|
218
|
+
});
|
|
219
|
+
it('does not call onChange when disabled', function () {
|
|
220
|
+
var _renderComponent11 = renderComponent({
|
|
221
|
+
disabled: true,
|
|
222
|
+
gssLineData: {
|
|
223
|
+
selectedTool: 'lineA',
|
|
224
|
+
numberOfLines: 2,
|
|
225
|
+
lineA: {
|
|
226
|
+
lineType: 'Solid'
|
|
227
|
+
},
|
|
228
|
+
lineB: {
|
|
229
|
+
lineType: 'Solid'
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}),
|
|
233
|
+
getAllByRole = _renderComponent11.getAllByRole;
|
|
234
|
+
var radios = getAllByRole('radio');
|
|
235
|
+
var lineBRadio = radios.find(function (r) {
|
|
236
|
+
return r.value === 'lineB';
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
// Disabled radios should not fire change events
|
|
240
|
+
expect(lineBRadio).toBeDisabled();
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
describe('lineTypeChange', function () {
|
|
244
|
+
it('calls onChange with updated lineType for Line A when Solid button is clicked', function () {
|
|
245
|
+
var _renderComponent12 = renderComponent({
|
|
246
|
+
gssLineData: {
|
|
247
|
+
selectedTool: 'lineA',
|
|
248
|
+
numberOfLines: 2,
|
|
249
|
+
lineA: {
|
|
250
|
+
lineType: 'Dashed'
|
|
251
|
+
},
|
|
252
|
+
lineB: {
|
|
253
|
+
lineType: 'Solid'
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}),
|
|
257
|
+
getAllByText = _renderComponent12.getAllByText;
|
|
258
|
+
var solidButtons = getAllByText(/Solid/);
|
|
259
|
+
// First solid button should be for Line A
|
|
260
|
+
_testUtils.fireEvent.click(solidButtons[0]);
|
|
261
|
+
expect(onChange).toHaveBeenCalledTimes(1);
|
|
262
|
+
var _onChange$mock$calls$5 = (0, _slicedToArray2["default"])(onChange.mock.calls[0], 2),
|
|
263
|
+
updatedData = _onChange$mock$calls$5[0],
|
|
264
|
+
oldSelectedTool = _onChange$mock$calls$5[1];
|
|
265
|
+
expect(updatedData.lineA.lineType).toBe('Solid');
|
|
266
|
+
expect(oldSelectedTool).toBe('lineA');
|
|
267
|
+
});
|
|
268
|
+
it('calls onChange with updated lineType for Line A when Dashed button is clicked', function () {
|
|
269
|
+
var _renderComponent13 = renderComponent({
|
|
270
|
+
gssLineData: {
|
|
271
|
+
selectedTool: 'lineA',
|
|
272
|
+
numberOfLines: 2,
|
|
273
|
+
lineA: {
|
|
274
|
+
lineType: 'Solid'
|
|
275
|
+
},
|
|
276
|
+
lineB: {
|
|
277
|
+
lineType: 'Solid'
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}),
|
|
281
|
+
getAllByText = _renderComponent13.getAllByText;
|
|
282
|
+
var dashedButtons = getAllByText(/Dashed/);
|
|
283
|
+
// First dashed button should be for Line A
|
|
284
|
+
_testUtils.fireEvent.click(dashedButtons[0]);
|
|
285
|
+
expect(onChange).toHaveBeenCalledTimes(1);
|
|
286
|
+
var _onChange$mock$calls$6 = (0, _slicedToArray2["default"])(onChange.mock.calls[0], 2),
|
|
287
|
+
updatedData = _onChange$mock$calls$6[0],
|
|
288
|
+
oldSelectedTool = _onChange$mock$calls$6[1];
|
|
289
|
+
expect(updatedData.lineA.lineType).toBe('Dashed');
|
|
290
|
+
expect(oldSelectedTool).toBe('lineA');
|
|
291
|
+
});
|
|
292
|
+
it('calls onChange with updated lineType for Line B when Solid button is clicked', function () {
|
|
293
|
+
var _renderComponent14 = renderComponent({
|
|
294
|
+
gssLineData: {
|
|
295
|
+
selectedTool: 'lineB',
|
|
296
|
+
numberOfLines: 2,
|
|
297
|
+
lineA: {
|
|
298
|
+
lineType: 'Solid'
|
|
299
|
+
},
|
|
300
|
+
lineB: {
|
|
301
|
+
lineType: 'Dashed'
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}),
|
|
305
|
+
getAllByText = _renderComponent14.getAllByText;
|
|
306
|
+
var solidButtons = getAllByText(/Solid/);
|
|
307
|
+
// Second solid button should be for Line B
|
|
308
|
+
_testUtils.fireEvent.click(solidButtons[1]);
|
|
309
|
+
expect(onChange).toHaveBeenCalledTimes(1);
|
|
310
|
+
var _onChange$mock$calls$7 = (0, _slicedToArray2["default"])(onChange.mock.calls[0], 2),
|
|
311
|
+
updatedData = _onChange$mock$calls$7[0],
|
|
312
|
+
oldSelectedTool = _onChange$mock$calls$7[1];
|
|
313
|
+
expect(updatedData.lineB.lineType).toBe('Solid');
|
|
314
|
+
expect(oldSelectedTool).toBe('lineB');
|
|
315
|
+
});
|
|
316
|
+
it('calls onChange with updated lineType for Line B when Dashed button is clicked', function () {
|
|
317
|
+
var _renderComponent15 = renderComponent({
|
|
318
|
+
gssLineData: {
|
|
319
|
+
selectedTool: 'lineB',
|
|
320
|
+
numberOfLines: 2,
|
|
321
|
+
lineA: {
|
|
322
|
+
lineType: 'Solid'
|
|
323
|
+
},
|
|
324
|
+
lineB: {
|
|
325
|
+
lineType: 'Solid'
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}),
|
|
329
|
+
getAllByText = _renderComponent15.getAllByText;
|
|
330
|
+
var dashedButtons = getAllByText(/Dashed/);
|
|
331
|
+
// Second dashed button should be for Line B
|
|
332
|
+
_testUtils.fireEvent.click(dashedButtons[1]);
|
|
333
|
+
expect(onChange).toHaveBeenCalledTimes(1);
|
|
334
|
+
var _onChange$mock$calls$8 = (0, _slicedToArray2["default"])(onChange.mock.calls[0], 2),
|
|
335
|
+
updatedData = _onChange$mock$calls$8[0],
|
|
336
|
+
oldSelectedTool = _onChange$mock$calls$8[1];
|
|
337
|
+
expect(updatedData.lineB.lineType).toBe('Dashed');
|
|
338
|
+
expect(oldSelectedTool).toBe('lineB');
|
|
339
|
+
});
|
|
340
|
+
it('preserves other line properties when changing Line A lineType', function () {
|
|
341
|
+
var _renderComponent16 = renderComponent({
|
|
342
|
+
gssLineData: {
|
|
343
|
+
selectedTool: 'lineA',
|
|
344
|
+
numberOfLines: 2,
|
|
345
|
+
lineA: {
|
|
346
|
+
lineType: 'Solid'
|
|
347
|
+
},
|
|
348
|
+
lineB: {
|
|
349
|
+
lineType: 'Dashed'
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}),
|
|
353
|
+
getAllByText = _renderComponent16.getAllByText;
|
|
354
|
+
var dashedButtons = getAllByText(/Dashed/);
|
|
355
|
+
_testUtils.fireEvent.click(dashedButtons[0]);
|
|
356
|
+
var _onChange$mock$calls$9 = (0, _slicedToArray2["default"])(onChange.mock.calls[0], 1),
|
|
357
|
+
updatedData = _onChange$mock$calls$9[0];
|
|
358
|
+
expect(updatedData.lineA.lineType).toBe('Dashed');
|
|
359
|
+
expect(updatedData.lineB.lineType).toBe('Dashed');
|
|
360
|
+
expect(updatedData.selectedTool).toBe('lineA');
|
|
361
|
+
expect(updatedData.numberOfLines).toBe(2);
|
|
362
|
+
});
|
|
363
|
+
it('preserves other line properties when changing Line B lineType', function () {
|
|
364
|
+
var _renderComponent17 = renderComponent({
|
|
365
|
+
gssLineData: {
|
|
366
|
+
selectedTool: 'lineB',
|
|
367
|
+
numberOfLines: 2,
|
|
368
|
+
lineA: {
|
|
369
|
+
lineType: 'Dashed'
|
|
370
|
+
},
|
|
371
|
+
lineB: {
|
|
372
|
+
lineType: 'Solid'
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}),
|
|
376
|
+
getAllByText = _renderComponent17.getAllByText;
|
|
377
|
+
var dashedButtons = getAllByText(/Dashed/);
|
|
378
|
+
_testUtils.fireEvent.click(dashedButtons[1]);
|
|
379
|
+
var _onChange$mock$calls$0 = (0, _slicedToArray2["default"])(onChange.mock.calls[0], 1),
|
|
380
|
+
updatedData = _onChange$mock$calls$0[0];
|
|
381
|
+
expect(updatedData.lineA.lineType).toBe('Dashed');
|
|
382
|
+
expect(updatedData.lineB.lineType).toBe('Dashed');
|
|
383
|
+
expect(updatedData.selectedTool).toBe('lineB');
|
|
384
|
+
expect(updatedData.numberOfLines).toBe(2);
|
|
385
|
+
});
|
|
386
|
+
it('handles multiple line type changes correctly', function () {
|
|
387
|
+
var _renderComponent18 = renderComponent({
|
|
388
|
+
gssLineData: {
|
|
389
|
+
selectedTool: 'lineA',
|
|
390
|
+
numberOfLines: 2,
|
|
391
|
+
lineA: {
|
|
392
|
+
lineType: 'Solid'
|
|
393
|
+
},
|
|
394
|
+
lineB: {
|
|
395
|
+
lineType: 'Solid'
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}),
|
|
399
|
+
getAllByText = _renderComponent18.getAllByText;
|
|
400
|
+
|
|
401
|
+
// Change Line A to Dashed
|
|
402
|
+
var dashedButtons = getAllByText(/Dashed/);
|
|
403
|
+
_testUtils.fireEvent.click(dashedButtons[0]);
|
|
404
|
+
expect(onChange).toHaveBeenCalledTimes(1);
|
|
405
|
+
var _onChange$mock$calls$1 = (0, _slicedToArray2["default"])(onChange.mock.calls[0], 1),
|
|
406
|
+
updatedData = _onChange$mock$calls$1[0];
|
|
407
|
+
expect(updatedData.lineA.lineType).toBe('Dashed');
|
|
408
|
+
|
|
409
|
+
// Change Line B to Dashed
|
|
410
|
+
dashedButtons = getAllByText(/Dashed/);
|
|
411
|
+
_testUtils.fireEvent.click(dashedButtons[1]);
|
|
412
|
+
expect(onChange).toHaveBeenCalledTimes(2);
|
|
413
|
+
var _onChange$mock$calls$10 = (0, _slicedToArray2["default"])(onChange.mock.calls[1], 1);
|
|
414
|
+
updatedData = _onChange$mock$calls$10[0];
|
|
415
|
+
expect(updatedData.lineB.lineType).toBe('Dashed');
|
|
416
|
+
});
|
|
417
|
+
it('does not call onChange when line type button is disabled', function () {
|
|
418
|
+
var _renderComponent19 = renderComponent({
|
|
419
|
+
disabled: true,
|
|
420
|
+
gssLineData: {
|
|
421
|
+
selectedTool: 'lineA',
|
|
422
|
+
numberOfLines: 2,
|
|
423
|
+
lineA: {
|
|
424
|
+
lineType: 'Solid'
|
|
425
|
+
},
|
|
426
|
+
lineB: {
|
|
427
|
+
lineType: 'Solid'
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}),
|
|
431
|
+
getAllByRole = _renderComponent19.getAllByRole;
|
|
432
|
+
var buttons = getAllByRole('button');
|
|
433
|
+
buttons.forEach(function (button) {
|
|
434
|
+
expect(button).toBeDisabled();
|
|
435
|
+
});
|
|
436
|
+
});
|
|
437
|
+
it('maintains correct state when clicking same line type that is already selected', function () {
|
|
438
|
+
var _renderComponent20 = renderComponent({
|
|
439
|
+
gssLineData: {
|
|
440
|
+
selectedTool: 'lineA',
|
|
441
|
+
numberOfLines: 2,
|
|
442
|
+
lineA: {
|
|
443
|
+
lineType: 'Solid'
|
|
444
|
+
},
|
|
445
|
+
lineB: {
|
|
446
|
+
lineType: 'Solid'
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
}),
|
|
450
|
+
getAllByText = _renderComponent20.getAllByText;
|
|
451
|
+
var solidButtons = getAllByText(/Solid/);
|
|
452
|
+
_testUtils.fireEvent.click(solidButtons[0]); // Click Solid when already Solid
|
|
453
|
+
|
|
454
|
+
expect(onChange).toHaveBeenCalledTimes(1);
|
|
455
|
+
var _onChange$mock$calls$11 = (0, _slicedToArray2["default"])(onChange.mock.calls[0], 1),
|
|
456
|
+
updatedData = _onChange$mock$calls$11[0];
|
|
457
|
+
expect(updatedData.lineA.lineType).toBe('Solid');
|
|
458
|
+
});
|
|
459
|
+
});
|
|
460
|
+
describe('integration tests', function () {
|
|
461
|
+
it('allows switching selected tool and changing line type in sequence', function () {
|
|
462
|
+
var _renderComponent21 = renderComponent({
|
|
463
|
+
gssLineData: {
|
|
464
|
+
selectedTool: 'lineA',
|
|
465
|
+
numberOfLines: 2,
|
|
466
|
+
lineA: {
|
|
467
|
+
lineType: 'Solid'
|
|
468
|
+
},
|
|
469
|
+
lineB: {
|
|
470
|
+
lineType: 'Solid'
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
}),
|
|
474
|
+
getAllByRole = _renderComponent21.getAllByRole,
|
|
475
|
+
getAllByText = _renderComponent21.getAllByText;
|
|
476
|
+
|
|
477
|
+
// Switch to Line B
|
|
478
|
+
var radios = getAllByRole('radio');
|
|
479
|
+
var lineBRadio = radios.find(function (r) {
|
|
480
|
+
return r.value === 'lineB';
|
|
481
|
+
});
|
|
482
|
+
_testUtils.fireEvent.click(lineBRadio);
|
|
483
|
+
expect(onChange).toHaveBeenCalledTimes(1);
|
|
484
|
+
var _onChange$mock$calls$12 = (0, _slicedToArray2["default"])(onChange.mock.calls[0], 1),
|
|
485
|
+
updatedData = _onChange$mock$calls$12[0];
|
|
486
|
+
expect(updatedData.selectedTool).toBe('lineB');
|
|
487
|
+
|
|
488
|
+
// Change Line B to Dashed
|
|
489
|
+
var dashedButtons = getAllByText(/Dashed/);
|
|
490
|
+
_testUtils.fireEvent.click(dashedButtons[1]);
|
|
491
|
+
expect(onChange).toHaveBeenCalledTimes(2);
|
|
492
|
+
var _onChange$mock$calls$13 = (0, _slicedToArray2["default"])(onChange.mock.calls[1], 1);
|
|
493
|
+
updatedData = _onChange$mock$calls$13[0];
|
|
494
|
+
expect(updatedData.lineB.lineType).toBe('Dashed');
|
|
495
|
+
});
|
|
496
|
+
it('handles complete workflow of switching between all tools and changing line types', function () {
|
|
497
|
+
var _renderComponent22 = renderComponent({
|
|
498
|
+
gssLineData: {
|
|
499
|
+
selectedTool: 'lineA',
|
|
500
|
+
numberOfLines: 2,
|
|
501
|
+
lineA: {
|
|
502
|
+
lineType: 'Solid'
|
|
503
|
+
},
|
|
504
|
+
lineB: {
|
|
505
|
+
lineType: 'Solid'
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
}),
|
|
509
|
+
getAllByRole = _renderComponent22.getAllByRole,
|
|
510
|
+
getAllByText = _renderComponent22.getAllByText;
|
|
511
|
+
|
|
512
|
+
// Change Line A to Dashed
|
|
513
|
+
var dashedButtons = getAllByText(/Dashed/);
|
|
514
|
+
_testUtils.fireEvent.click(dashedButtons[0]);
|
|
515
|
+
expect(onChange.mock.calls[0][0].lineA.lineType).toBe('Dashed');
|
|
516
|
+
|
|
517
|
+
// Switch to Line B
|
|
518
|
+
var radios = getAllByRole('radio');
|
|
519
|
+
var lineBRadio = radios.find(function (r) {
|
|
520
|
+
return r.value === 'lineB';
|
|
521
|
+
});
|
|
522
|
+
_testUtils.fireEvent.click(lineBRadio);
|
|
523
|
+
expect(onChange.mock.calls[1][0].selectedTool).toBe('lineB');
|
|
524
|
+
|
|
525
|
+
// Change Line B to Dashed
|
|
526
|
+
dashedButtons = getAllByText(/Dashed/);
|
|
527
|
+
_testUtils.fireEvent.click(dashedButtons[1]);
|
|
528
|
+
expect(onChange.mock.calls[2][0].lineB.lineType).toBe('Dashed');
|
|
529
|
+
|
|
530
|
+
// Switch to Solution Set
|
|
531
|
+
var solutionSetRadio = radios.find(function (r) {
|
|
532
|
+
return r.value === 'solutionSet';
|
|
533
|
+
});
|
|
534
|
+
_testUtils.fireEvent.click(solutionSetRadio);
|
|
535
|
+
expect(onChange.mock.calls[3][0].selectedTool).toBe('solutionSet');
|
|
536
|
+
expect(onChange).toHaveBeenCalledTimes(4);
|
|
537
|
+
});
|
|
538
|
+
});
|
|
539
|
+
});
|
|
540
|
+
//# sourceMappingURL=tool-menu.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-menu.test.js","names":["_testUtils","require","_react","_interopRequireDefault","_toolMenu","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","describe","onChange","tools","beforeEach","jest","fn","renderComponent","extras","defaults","classes","className","currentTool","gssLineData","selectedTool","numberOfLines","lineA","lineType","lineB","props","render","createElement","it","_renderComponent","container","expect","firstChild","toBeInTheDocument","_renderComponent2","getByText","_renderComponent3","_renderComponent4","queryByText","not","_renderComponent5","_renderComponent6","getAllByText","solidButtons","dashedButtons","toBeGreaterThan","_renderComponent7","_renderComponent8","disabled","getAllByRole","radios","buttons","radio","toBeDisabled","button","_renderComponent9","lineARadio","find","value","fireEvent","click","toHaveBeenCalledTimes","_onChange$mock$calls$","_slicedToArray2","mock","calls","updatedData","oldSelectedTool","toBe","_renderComponent0","lineBRadio","_onChange$mock$calls$2","_renderComponent1","solutionSetRadio","_onChange$mock$calls$3","_renderComponent10","_onChange$mock$calls$4","_renderComponent11","_renderComponent12","_onChange$mock$calls$5","_renderComponent13","_onChange$mock$calls$6","_renderComponent14","_onChange$mock$calls$7","_renderComponent15","_onChange$mock$calls$8","_renderComponent16","_onChange$mock$calls$9","_renderComponent17","_onChange$mock$calls$0","_renderComponent18","_onChange$mock$calls$1","_onChange$mock$calls$10","_renderComponent19","_renderComponent20","_onChange$mock$calls$11","_renderComponent21","_onChange$mock$calls$12","_onChange$mock$calls$13","_renderComponent22"],"sources":["../../src/__tests__/tool-menu.test.jsx"],"sourcesContent":["import { fireEvent, render } from '@pie-lib/test-utils';\nimport React from 'react';\n\nimport ToolMenu from '../tool-menu';\n\ndescribe('ToolMenu', () => {\n let onChange;\n const tools = ['one', 'two'];\n\n beforeEach(() => {\n onChange = jest.fn();\n });\n\n const renderComponent = (extras) => {\n const defaults = {\n classes: {},\n className: 'className',\n onChange,\n currentTool: tools[0],\n tools,\n gssLineData: {\n selectedTool: 'lineA',\n numberOfLines: 2,\n lineA: { lineType: 'Solid' },\n lineB: { lineType: 'Solid' },\n },\n };\n const props = { ...defaults, ...extras };\n return render(<ToolMenu {...props} />);\n };\n\n describe('rendering', () => {\n it('renders without crashing', () => {\n const { container } = renderComponent();\n expect(container.firstChild).toBeInTheDocument();\n });\n\n it('renders Line A radio button', () => {\n const { getByText } = renderComponent();\n expect(getByText('Line A')).toBeInTheDocument();\n });\n\n it('renders Line B radio button when numberOfLines is 2', () => {\n const { getByText } = renderComponent();\n expect(getByText('Line B')).toBeInTheDocument();\n });\n\n it('does not render Line B radio button when numberOfLines is 1', () => {\n const { queryByText } = renderComponent({\n gssLineData: {\n selectedTool: 'lineA',\n numberOfLines: 1,\n lineA: { lineType: 'Solid' },\n lineB: { lineType: 'Solid' },\n },\n });\n expect(queryByText('Line B')).not.toBeInTheDocument();\n });\n\n it('renders Solution Set radio button', () => {\n const { getByText } = renderComponent();\n expect(getByText('Solution Set')).toBeInTheDocument();\n });\n\n it('renders Solid and Dashed buttons for Line A', () => {\n const { getAllByText } = renderComponent();\n const solidButtons = getAllByText(/Solid/);\n const dashedButtons = getAllByText(/Dashed/);\n expect(solidButtons.length).toBeGreaterThan(0);\n expect(dashedButtons.length).toBeGreaterThan(0);\n });\n\n it('shows checkmark on selected line type for Line A', () => {\n const { getAllByText } = renderComponent({\n gssLineData: {\n selectedTool: 'lineA',\n numberOfLines: 2,\n lineA: { lineType: 'Solid' },\n lineB: { lineType: 'Dashed' },\n },\n });\n const solidButtons = getAllByText(/✔ Solid/);\n expect(solidButtons.length).toBeGreaterThan(0);\n });\n\n it('disables all controls when disabled prop is true', () => {\n const { getAllByRole } = renderComponent({ disabled: true });\n const radios = getAllByRole('radio');\n const buttons = getAllByRole('button');\n\n radios.forEach((radio) => {\n expect(radio).toBeDisabled();\n });\n\n buttons.forEach((button) => {\n expect(button).toBeDisabled();\n });\n });\n });\n\n describe('onChangeRadioValue', () => {\n it('calls onChange with updated selectedTool when lineA radio is clicked', () => {\n const { getAllByRole } = renderComponent({\n gssLineData: {\n selectedTool: 'solutionSet',\n numberOfLines: 2,\n lineA: { lineType: 'Solid' },\n lineB: { lineType: 'Solid' },\n },\n });\n\n const radios = getAllByRole('radio');\n const lineARadio = radios.find((r) => r.value === 'lineA');\n\n fireEvent.click(lineARadio);\n\n expect(onChange).toHaveBeenCalledTimes(1);\n const [updatedData, oldSelectedTool] = onChange.mock.calls[0];\n expect(updatedData.selectedTool).toBe('lineA');\n expect(oldSelectedTool).toBe('solutionSet');\n });\n\n it('calls onChange with updated selectedTool when lineB radio is clicked', () => {\n const { getAllByRole } = renderComponent({\n gssLineData: {\n selectedTool: 'lineA',\n numberOfLines: 2,\n lineA: { lineType: 'Solid' },\n lineB: { lineType: 'Solid' },\n },\n });\n\n const radios = getAllByRole('radio');\n const lineBRadio = radios.find((r) => r.value === 'lineB');\n\n fireEvent.click(lineBRadio);\n\n expect(onChange).toHaveBeenCalledTimes(1);\n const [updatedData, oldSelectedTool] = onChange.mock.calls[0];\n expect(updatedData.selectedTool).toBe('lineB');\n expect(oldSelectedTool).toBe('lineA');\n });\n\n it('calls onChange with updated selectedTool when solutionSet radio is clicked', () => {\n const { getAllByRole } = renderComponent({\n gssLineData: {\n selectedTool: 'lineA',\n numberOfLines: 2,\n lineA: { lineType: 'Solid' },\n lineB: { lineType: 'Solid' },\n },\n });\n\n const radios = getAllByRole('radio');\n const solutionSetRadio = radios.find((r) => r.value === 'solutionSet');\n\n fireEvent.click(solutionSetRadio);\n\n expect(onChange).toHaveBeenCalledTimes(1);\n const [updatedData, oldSelectedTool] = onChange.mock.calls[0];\n expect(updatedData.selectedTool).toBe('solutionSet');\n expect(oldSelectedTool).toBe('lineA');\n });\n\n it('preserves other gssLineData properties when changing selectedTool', () => {\n const { getAllByRole } = renderComponent({\n gssLineData: {\n selectedTool: 'lineA',\n numberOfLines: 2,\n lineA: { lineType: 'Dashed' },\n lineB: { lineType: 'Solid' },\n },\n });\n\n const radios = getAllByRole('radio');\n const lineBRadio = radios.find((r) => r.value === 'lineB');\n\n fireEvent.click(lineBRadio);\n\n const [updatedData] = onChange.mock.calls[0];\n expect(updatedData.lineA.lineType).toBe('Dashed');\n expect(updatedData.lineB.lineType).toBe('Solid');\n expect(updatedData.numberOfLines).toBe(2);\n });\n\n it('does not call onChange when disabled', () => {\n const { getAllByRole } = renderComponent({\n disabled: true,\n gssLineData: {\n selectedTool: 'lineA',\n numberOfLines: 2,\n lineA: { lineType: 'Solid' },\n lineB: { lineType: 'Solid' },\n },\n });\n\n const radios = getAllByRole('radio');\n const lineBRadio = radios.find((r) => r.value === 'lineB');\n\n // Disabled radios should not fire change events\n expect(lineBRadio).toBeDisabled();\n });\n });\n\n describe('lineTypeChange', () => {\n it('calls onChange with updated lineType for Line A when Solid button is clicked', () => {\n const { getAllByText } = renderComponent({\n gssLineData: {\n selectedTool: 'lineA',\n numberOfLines: 2,\n lineA: { lineType: 'Dashed' },\n lineB: { lineType: 'Solid' },\n },\n });\n\n const solidButtons = getAllByText(/Solid/);\n // First solid button should be for Line A\n fireEvent.click(solidButtons[0]);\n\n expect(onChange).toHaveBeenCalledTimes(1);\n const [updatedData, oldSelectedTool] = onChange.mock.calls[0];\n expect(updatedData.lineA.lineType).toBe('Solid');\n expect(oldSelectedTool).toBe('lineA');\n });\n\n it('calls onChange with updated lineType for Line A when Dashed button is clicked', () => {\n const { getAllByText } = renderComponent({\n gssLineData: {\n selectedTool: 'lineA',\n numberOfLines: 2,\n lineA: { lineType: 'Solid' },\n lineB: { lineType: 'Solid' },\n },\n });\n\n const dashedButtons = getAllByText(/Dashed/);\n // First dashed button should be for Line A\n fireEvent.click(dashedButtons[0]);\n\n expect(onChange).toHaveBeenCalledTimes(1);\n const [updatedData, oldSelectedTool] = onChange.mock.calls[0];\n expect(updatedData.lineA.lineType).toBe('Dashed');\n expect(oldSelectedTool).toBe('lineA');\n });\n\n it('calls onChange with updated lineType for Line B when Solid button is clicked', () => {\n const { getAllByText } = renderComponent({\n gssLineData: {\n selectedTool: 'lineB',\n numberOfLines: 2,\n lineA: { lineType: 'Solid' },\n lineB: { lineType: 'Dashed' },\n },\n });\n\n const solidButtons = getAllByText(/Solid/);\n // Second solid button should be for Line B\n fireEvent.click(solidButtons[1]);\n\n expect(onChange).toHaveBeenCalledTimes(1);\n const [updatedData, oldSelectedTool] = onChange.mock.calls[0];\n expect(updatedData.lineB.lineType).toBe('Solid');\n expect(oldSelectedTool).toBe('lineB');\n });\n\n it('calls onChange with updated lineType for Line B when Dashed button is clicked', () => {\n const { getAllByText } = renderComponent({\n gssLineData: {\n selectedTool: 'lineB',\n numberOfLines: 2,\n lineA: { lineType: 'Solid' },\n lineB: { lineType: 'Solid' },\n },\n });\n\n const dashedButtons = getAllByText(/Dashed/);\n // Second dashed button should be for Line B\n fireEvent.click(dashedButtons[1]);\n\n expect(onChange).toHaveBeenCalledTimes(1);\n const [updatedData, oldSelectedTool] = onChange.mock.calls[0];\n expect(updatedData.lineB.lineType).toBe('Dashed');\n expect(oldSelectedTool).toBe('lineB');\n });\n\n it('preserves other line properties when changing Line A lineType', () => {\n const { getAllByText } = renderComponent({\n gssLineData: {\n selectedTool: 'lineA',\n numberOfLines: 2,\n lineA: { lineType: 'Solid' },\n lineB: { lineType: 'Dashed' },\n },\n });\n\n const dashedButtons = getAllByText(/Dashed/);\n fireEvent.click(dashedButtons[0]);\n\n const [updatedData] = onChange.mock.calls[0];\n expect(updatedData.lineA.lineType).toBe('Dashed');\n expect(updatedData.lineB.lineType).toBe('Dashed');\n expect(updatedData.selectedTool).toBe('lineA');\n expect(updatedData.numberOfLines).toBe(2);\n });\n\n it('preserves other line properties when changing Line B lineType', () => {\n const { getAllByText } = renderComponent({\n gssLineData: {\n selectedTool: 'lineB',\n numberOfLines: 2,\n lineA: { lineType: 'Dashed' },\n lineB: { lineType: 'Solid' },\n },\n });\n\n const dashedButtons = getAllByText(/Dashed/);\n fireEvent.click(dashedButtons[1]);\n\n const [updatedData] = onChange.mock.calls[0];\n expect(updatedData.lineA.lineType).toBe('Dashed');\n expect(updatedData.lineB.lineType).toBe('Dashed');\n expect(updatedData.selectedTool).toBe('lineB');\n expect(updatedData.numberOfLines).toBe(2);\n });\n\n it('handles multiple line type changes correctly', () => {\n const { getAllByText } = renderComponent({\n gssLineData: {\n selectedTool: 'lineA',\n numberOfLines: 2,\n lineA: { lineType: 'Solid' },\n lineB: { lineType: 'Solid' },\n },\n });\n\n // Change Line A to Dashed\n let dashedButtons = getAllByText(/Dashed/);\n fireEvent.click(dashedButtons[0]);\n\n expect(onChange).toHaveBeenCalledTimes(1);\n let [updatedData] = onChange.mock.calls[0];\n expect(updatedData.lineA.lineType).toBe('Dashed');\n\n // Change Line B to Dashed\n dashedButtons = getAllByText(/Dashed/);\n fireEvent.click(dashedButtons[1]);\n\n expect(onChange).toHaveBeenCalledTimes(2);\n [updatedData] = onChange.mock.calls[1];\n expect(updatedData.lineB.lineType).toBe('Dashed');\n });\n\n it('does not call onChange when line type button is disabled', () => {\n const { getAllByRole } = renderComponent({\n disabled: true,\n gssLineData: {\n selectedTool: 'lineA',\n numberOfLines: 2,\n lineA: { lineType: 'Solid' },\n lineB: { lineType: 'Solid' },\n },\n });\n\n const buttons = getAllByRole('button');\n\n buttons.forEach((button) => {\n expect(button).toBeDisabled();\n });\n });\n\n it('maintains correct state when clicking same line type that is already selected', () => {\n const { getAllByText } = renderComponent({\n gssLineData: {\n selectedTool: 'lineA',\n numberOfLines: 2,\n lineA: { lineType: 'Solid' },\n lineB: { lineType: 'Solid' },\n },\n });\n\n const solidButtons = getAllByText(/Solid/);\n fireEvent.click(solidButtons[0]); // Click Solid when already Solid\n\n expect(onChange).toHaveBeenCalledTimes(1);\n const [updatedData] = onChange.mock.calls[0];\n expect(updatedData.lineA.lineType).toBe('Solid');\n });\n });\n\n describe('integration tests', () => {\n it('allows switching selected tool and changing line type in sequence', () => {\n const { getAllByRole, getAllByText } = renderComponent({\n gssLineData: {\n selectedTool: 'lineA',\n numberOfLines: 2,\n lineA: { lineType: 'Solid' },\n lineB: { lineType: 'Solid' },\n },\n });\n\n // Switch to Line B\n const radios = getAllByRole('radio');\n const lineBRadio = radios.find((r) => r.value === 'lineB');\n fireEvent.click(lineBRadio);\n\n expect(onChange).toHaveBeenCalledTimes(1);\n let [updatedData] = onChange.mock.calls[0];\n expect(updatedData.selectedTool).toBe('lineB');\n\n // Change Line B to Dashed\n const dashedButtons = getAllByText(/Dashed/);\n fireEvent.click(dashedButtons[1]);\n\n expect(onChange).toHaveBeenCalledTimes(2);\n [updatedData] = onChange.mock.calls[1];\n expect(updatedData.lineB.lineType).toBe('Dashed');\n });\n\n it('handles complete workflow of switching between all tools and changing line types', () => {\n const { getAllByRole, getAllByText } = renderComponent({\n gssLineData: {\n selectedTool: 'lineA',\n numberOfLines: 2,\n lineA: { lineType: 'Solid' },\n lineB: { lineType: 'Solid' },\n },\n });\n\n // Change Line A to Dashed\n let dashedButtons = getAllByText(/Dashed/);\n fireEvent.click(dashedButtons[0]);\n expect(onChange.mock.calls[0][0].lineA.lineType).toBe('Dashed');\n\n // Switch to Line B\n const radios = getAllByRole('radio');\n const lineBRadio = radios.find((r) => r.value === 'lineB');\n fireEvent.click(lineBRadio);\n expect(onChange.mock.calls[1][0].selectedTool).toBe('lineB');\n\n // Change Line B to Dashed\n dashedButtons = getAllByText(/Dashed/);\n fireEvent.click(dashedButtons[1]);\n expect(onChange.mock.calls[2][0].lineB.lineType).toBe('Dashed');\n\n // Switch to Solution Set\n const solutionSetRadio = radios.find((r) => r.value === 'solutionSet');\n fireEvent.click(solutionSetRadio);\n expect(onChange.mock.calls[3][0].selectedTool).toBe('solutionSet');\n\n expect(onChange).toHaveBeenCalledTimes(4);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
5
|
+
var _testUtils = require("@pie-lib/test-utils");
|
|
6
|
+
var _react = _interopRequireDefault(require("react"));
|
|
7
|
+
var _undoRedo = _interopRequireDefault(require("../undo-redo"));
|
|
8
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
9
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
10
|
+
describe('UndoRedo', function () {
|
|
11
|
+
var onUndo = jest.fn();
|
|
12
|
+
var onRedo = jest.fn();
|
|
13
|
+
var onReset = jest.fn();
|
|
14
|
+
var renderComponent = function renderComponent(extras) {
|
|
15
|
+
var defaults = {
|
|
16
|
+
onUndo: onUndo,
|
|
17
|
+
onRedo: onRedo,
|
|
18
|
+
onReset: onReset
|
|
19
|
+
};
|
|
20
|
+
var props = _objectSpread(_objectSpread({}, defaults), extras);
|
|
21
|
+
return (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_undoRedo["default"], props));
|
|
22
|
+
};
|
|
23
|
+
describe('rendering', function () {
|
|
24
|
+
it('renders without crashing', function () {
|
|
25
|
+
var _renderComponent = renderComponent(),
|
|
26
|
+
container = _renderComponent.container;
|
|
27
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=undo-redo.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"undo-redo.test.js","names":["_testUtils","require","_react","_interopRequireDefault","_undoRedo","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","describe","onUndo","jest","fn","onRedo","onReset","renderComponent","extras","defaults","props","render","createElement","it","_renderComponent","container","expect","firstChild","toBeInTheDocument"],"sources":["../../src/__tests__/undo-redo.test.jsx"],"sourcesContent":["import { render } from '@pie-lib/test-utils';\nimport React from 'react';\nimport UndoRedo from '../undo-redo';\n\ndescribe('UndoRedo', () => {\n let onUndo = jest.fn();\n let onRedo = jest.fn();\n let onReset = jest.fn();\n\n const renderComponent = (extras) => {\n const defaults = {\n onUndo,\n onRedo,\n onReset,\n };\n const props = { ...defaults, ...extras };\n return render(<UndoRedo {...props} />);\n };\n\n describe('rendering', () => {\n it('renders without crashing', () => {\n const { container } = renderComponent();\n expect(container.firstChild).toBeInTheDocument();\n });\n });\n});\n"],"mappings":";;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,SAAA,GAAAD,sBAAA,CAAAF,OAAA;AAAoC,SAAAI,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,OAAAG,MAAA,CAAAE,qBAAA,QAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,GAAAC,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAN,CAAA,WAAAE,MAAA,CAAAK,wBAAA,CAAAR,CAAA,EAAAC,CAAA,EAAAQ,UAAA,OAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAU,cAAAZ,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,UAAAC,CAAA,WAAAW,SAAA,CAAAZ,CAAA,IAAAY,SAAA,CAAAZ,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,aAAAhB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,EAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,EAAAC,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAEpCoB,QAAQ,CAAC,UAAU,EAAE,YAAM;EACzB,IAAIC,MAAM,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC;EACtB,IAAIC,MAAM,GAAGF,IAAI,CAACC,EAAE,CAAC,CAAC;EACtB,IAAIE,OAAO,GAAGH,IAAI,CAACC,EAAE,CAAC,CAAC;EAEvB,IAAMG,eAAe,GAAG,SAAlBA,eAAeA,CAAIC,MAAM,EAAK;IAClC,IAAMC,QAAQ,GAAG;MACfP,MAAM,EAANA,MAAM;MACNG,MAAM,EAANA,MAAM;MACNC,OAAO,EAAPA;IACF,CAAC;IACD,IAAMI,KAAK,GAAAjB,aAAA,CAAAA,aAAA,KAAQgB,QAAQ,GAAKD,MAAM,CAAE;IACxC,OAAO,IAAAG,iBAAM,eAAClC,MAAA,YAAAmC,aAAA,CAACjC,SAAA,WAAQ,EAAK+B,KAAQ,CAAC,CAAC;EACxC,CAAC;EAEDT,QAAQ,CAAC,WAAW,EAAE,YAAM;IAC1BY,EAAE,CAAC,0BAA0B,EAAE,YAAM;MACnC,IAAAC,gBAAA,GAAsBP,eAAe,CAAC,CAAC;QAA/BQ,SAAS,GAAAD,gBAAA,CAATC,SAAS;MACjBC,MAAM,CAACD,SAAS,CAACE,UAAU,CAAC,CAACC,iBAAiB,CAAC,CAAC;IAClD,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|