@pie-lib/charting 7.0.13 → 7.1.0-beta

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 (63) hide show
  1. package/CHANGELOG.md +0 -44
  2. package/lib/__tests__/actions-button.test.js +332 -0
  3. package/lib/__tests__/actions-button.test.js.map +1 -0
  4. package/lib/__tests__/axes.test.js +746 -0
  5. package/lib/__tests__/axes.test.js.map +1 -0
  6. package/lib/__tests__/chart-setup.test.js +796 -0
  7. package/lib/__tests__/chart-setup.test.js.map +1 -0
  8. package/lib/__tests__/chart-type.test.js +25 -0
  9. package/lib/__tests__/chart-type.test.js.map +1 -0
  10. package/lib/__tests__/chart.test.js +103 -0
  11. package/lib/__tests__/chart.test.js.map +1 -0
  12. package/lib/__tests__/grid.test.js +39 -0
  13. package/lib/__tests__/grid.test.js.map +1 -0
  14. package/lib/__tests__/key-legend.test.js +235 -0
  15. package/lib/__tests__/key-legend.test.js.map +1 -0
  16. package/lib/__tests__/mark-label.test.js +46 -0
  17. package/lib/__tests__/mark-label.test.js.map +1 -0
  18. package/lib/__tests__/tool-menu.test.js +627 -0
  19. package/lib/__tests__/tool-menu.test.js.map +1 -0
  20. package/lib/__tests__/utils.js +56 -0
  21. package/lib/__tests__/utils.js.map +1 -0
  22. package/lib/__tests__/utils.test.js +186 -0
  23. package/lib/__tests__/utils.test.js.map +1 -0
  24. package/lib/bars/__tests__/bar.test.js +53 -0
  25. package/lib/bars/__tests__/bar.test.js.map +1 -0
  26. package/lib/bars/__tests__/histogram.test.js +53 -0
  27. package/lib/bars/__tests__/histogram.test.js.map +1 -0
  28. package/lib/bars/__tests__/utils.js +50 -0
  29. package/lib/bars/__tests__/utils.js.map +1 -0
  30. package/lib/bars/common/__tests__/bars.test.js +76 -0
  31. package/lib/bars/common/__tests__/bars.test.js.map +1 -0
  32. package/lib/bars/common/__tests__/utils.js +50 -0
  33. package/lib/bars/common/__tests__/utils.js.map +1 -0
  34. package/lib/common/__tests__/correctness-indicators.test.js +887 -0
  35. package/lib/common/__tests__/correctness-indicators.test.js.map +1 -0
  36. package/lib/common/__tests__/drag-handle.test.js +73 -0
  37. package/lib/common/__tests__/drag-handle.test.js.map +1 -0
  38. package/lib/common/__tests__/utils.js +50 -0
  39. package/lib/common/__tests__/utils.js.map +1 -0
  40. package/lib/line/__tests__/line-cross.test.js +617 -0
  41. package/lib/line/__tests__/line-cross.test.js.map +1 -0
  42. package/lib/line/__tests__/line-dot.test.js +47 -0
  43. package/lib/line/__tests__/line-dot.test.js.map +1 -0
  44. package/lib/line/__tests__/utils.js +56 -0
  45. package/lib/line/__tests__/utils.js.map +1 -0
  46. package/lib/line/common/__tests__/drag-handle.test.js +73 -0
  47. package/lib/line/common/__tests__/drag-handle.test.js.map +1 -0
  48. package/lib/line/common/__tests__/line.test.js +92 -0
  49. package/lib/line/common/__tests__/line.test.js.map +1 -0
  50. package/lib/line/common/__tests__/utils.js +50 -0
  51. package/lib/line/common/__tests__/utils.js.map +1 -0
  52. package/lib/plot/__tests__/dot.test.js +513 -0
  53. package/lib/plot/__tests__/dot.test.js.map +1 -0
  54. package/lib/plot/__tests__/line.test.js +566 -0
  55. package/lib/plot/__tests__/line.test.js.map +1 -0
  56. package/lib/plot/__tests__/utils.js +50 -0
  57. package/lib/plot/__tests__/utils.js.map +1 -0
  58. package/lib/plot/common/__tests__/plot.test.js +79 -0
  59. package/lib/plot/common/__tests__/plot.test.js.map +1 -0
  60. package/lib/plot/common/__tests__/utils.js +50 -0
  61. package/lib/plot/common/__tests__/utils.js.map +1 -0
  62. package/package.json +5 -5
  63. package/LICENSE.md +0 -5
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
5
+ var _react = _interopRequireDefault(require("react"));
6
+ var _testUtils = require("@pie-lib/test-utils");
7
+ var _markLabel = require("../mark-label");
8
+ var _utils = require("./utils");
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('MarkLabel', function () {
12
+ var onChange = jest.fn();
13
+ var renderComponent = function renderComponent(extras) {
14
+ var defaults = {
15
+ classes: {},
16
+ defineChart: false,
17
+ className: 'className',
18
+ onChange: onChange,
19
+ mark: {
20
+ x: 1,
21
+ y: 1
22
+ },
23
+ graphProps: (0, _utils.graphProps)(0, 10, 0, 10)
24
+ };
25
+ var props = _objectSpread(_objectSpread({}, defaults), extras);
26
+ return (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_markLabel.MarkLabel, props));
27
+ };
28
+ describe('rendering', function () {
29
+ it('renders mark label', function () {
30
+ var _renderComponent = renderComponent(),
31
+ container = _renderComponent.container;
32
+ expect(container.firstChild).toBeInTheDocument();
33
+ });
34
+ it('renders mark label at different positions', function () {
35
+ var _renderComponent2 = renderComponent({
36
+ mark: {
37
+ x: 10,
38
+ y: 10
39
+ }
40
+ }),
41
+ container = _renderComponent2.container;
42
+ expect(container.firstChild).toBeInTheDocument();
43
+ });
44
+ });
45
+ });
46
+ //# sourceMappingURL=mark-label.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mark-label.test.js","names":["_react","_interopRequireDefault","require","_testUtils","_markLabel","_utils","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","describe","onChange","jest","fn","renderComponent","extras","defaults","classes","defineChart","className","mark","x","y","graphProps","getGraphProps","props","render","createElement","MarkLabel","it","_renderComponent","container","expect","firstChild","toBeInTheDocument","_renderComponent2"],"sources":["../../src/__tests__/mark-label.test.jsx"],"sourcesContent":["import React from 'react';\nimport { render } from '@pie-lib/test-utils';\nimport { MarkLabel } from '../mark-label';\nimport { graphProps as getGraphProps } from './utils';\n\ndescribe('MarkLabel', () => {\n let onChange = jest.fn();\n\n const renderComponent = (extras) => {\n const defaults = {\n classes: {},\n defineChart: false,\n className: 'className',\n onChange,\n mark: { x: 1, y: 1 },\n graphProps: getGraphProps(0, 10, 0, 10),\n };\n const props = { ...defaults, ...extras };\n return render(<MarkLabel {...props} />);\n };\n\n describe('rendering', () => {\n it('renders mark label', () => {\n const { container } = renderComponent();\n expect(container.firstChild).toBeInTheDocument();\n });\n\n it('renders mark label at different positions', () => {\n const { container } = renderComponent({ mark: { x: 10, y: 10 } });\n expect(container.firstChild).toBeInTheDocument();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,627 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
5
+ var _react = _interopRequireDefault(require("react"));
6
+ var _react2 = require("@testing-library/react");
7
+ var _styles = require("@mui/material/styles");
8
+ var _toolMenu = 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
+ jest.mock('@pie-lib/translator', function () {
12
+ return {
13
+ __esModule: true,
14
+ "default": {
15
+ translator: {
16
+ t: jest.fn(function (key, options) {
17
+ var translations = {
18
+ 'charting.addCategory': 'Add Category'
19
+ };
20
+ return translations[key] || key;
21
+ })
22
+ }
23
+ }
24
+ };
25
+ });
26
+ jest.mock('@pie-lib/render-ui', function () {
27
+ return {
28
+ color: {
29
+ text: function text() {
30
+ return '#000000';
31
+ },
32
+ secondary: function secondary() {
33
+ return '#cccccc';
34
+ },
35
+ background: function background() {
36
+ return '#ffffff';
37
+ },
38
+ primary: function primary() {
39
+ return '#0000ff';
40
+ },
41
+ primaryDark: function primaryDark() {
42
+ return '#000080';
43
+ },
44
+ disabled: function disabled() {
45
+ return '#f0f0f0';
46
+ }
47
+ }
48
+ };
49
+ });
50
+ var theme;
51
+ beforeAll(function () {
52
+ theme = (0, _styles.createTheme)();
53
+ });
54
+ describe('MiniButton', function () {
55
+ var onClick = jest.fn();
56
+ beforeEach(function () {
57
+ jest.clearAllMocks();
58
+ });
59
+ var renderComponent = function renderComponent() {
60
+ var extras = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
61
+ var defaults = {
62
+ value: 'Test Button',
63
+ onClick: onClick,
64
+ disabled: false,
65
+ selected: false
66
+ };
67
+ var props = _objectSpread(_objectSpread({}, defaults), extras);
68
+ return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_styles.ThemeProvider, {
69
+ theme: theme
70
+ }, /*#__PURE__*/_react["default"].createElement(_toolMenu.MiniButton, props)));
71
+ };
72
+ describe('rendering', function () {
73
+ it('should render with value text', function () {
74
+ var _renderComponent = renderComponent({
75
+ value: 'Click Me'
76
+ }),
77
+ getByText = _renderComponent.getByText;
78
+ expect(getByText('Click Me')).toBeInTheDocument();
79
+ });
80
+ it('should render as a button element', function () {
81
+ var _renderComponent2 = renderComponent(),
82
+ getByRole = _renderComponent2.getByRole;
83
+ expect(getByRole('button')).toBeInTheDocument();
84
+ });
85
+ it('should have correct button attributes', function () {
86
+ var _renderComponent3 = renderComponent({
87
+ value: 'Test'
88
+ }),
89
+ getByRole = _renderComponent3.getByRole;
90
+ var button = getByRole('button');
91
+ expect(button).toHaveAttribute('value', 'Test');
92
+ });
93
+ it('should render with variant outlined', function () {
94
+ var _renderComponent4 = renderComponent(),
95
+ getByRole = _renderComponent4.getByRole;
96
+ var button = getByRole('button');
97
+ expect(button).toHaveClass('MuiButton-outlined');
98
+ });
99
+ it('should render with size small', function () {
100
+ var _renderComponent5 = renderComponent(),
101
+ getByRole = _renderComponent5.getByRole;
102
+ var button = getByRole('button');
103
+ expect(button).toHaveClass('MuiButton-sizeSmall');
104
+ });
105
+ });
106
+ describe('disabled state', function () {
107
+ it('should render as disabled when disabled prop is true', function () {
108
+ var _renderComponent6 = renderComponent({
109
+ disabled: true
110
+ }),
111
+ getByRole = _renderComponent6.getByRole;
112
+ expect(getByRole('button')).toBeDisabled();
113
+ });
114
+ it('should not render as disabled when disabled prop is false', function () {
115
+ var _renderComponent7 = renderComponent({
116
+ disabled: false
117
+ }),
118
+ getByRole = _renderComponent7.getByRole;
119
+ expect(getByRole('button')).not.toBeDisabled();
120
+ });
121
+ it('should not trigger onClick when disabled', function () {
122
+ var _renderComponent8 = renderComponent({
123
+ disabled: true
124
+ }),
125
+ getByRole = _renderComponent8.getByRole;
126
+ _react2.fireEvent.click(getByRole('button'));
127
+ expect(onClick).not.toHaveBeenCalled();
128
+ });
129
+ });
130
+ describe('selected state', function () {
131
+ it('should apply selected styling when selected is true', function () {
132
+ var _renderComponent9 = renderComponent({
133
+ selected: true
134
+ }),
135
+ getByRole = _renderComponent9.getByRole;
136
+ var button = getByRole('button');
137
+ expect(button.className).toContain('MuiButton-colorSecondary');
138
+ });
139
+ it('should apply default color when selected is false', function () {
140
+ var _renderComponent0 = renderComponent({
141
+ selected: false
142
+ }),
143
+ getByRole = _renderComponent0.getByRole;
144
+ var button = getByRole('button');
145
+ expect(button.className).toContain('MuiButton-colorDefault');
146
+ });
147
+ it('should render correctly with both selected and disabled', function () {
148
+ var _renderComponent1 = renderComponent({
149
+ selected: true,
150
+ disabled: true
151
+ }),
152
+ getByRole = _renderComponent1.getByRole;
153
+ var button = getByRole('button');
154
+ expect(button).toBeDisabled();
155
+ expect(button.className).toContain('MuiButton-colorSecondary');
156
+ });
157
+ });
158
+ describe('interactions', function () {
159
+ it('should call onClick when clicked', function () {
160
+ var _renderComponent10 = renderComponent(),
161
+ getByRole = _renderComponent10.getByRole;
162
+ _react2.fireEvent.click(getByRole('button'));
163
+ expect(onClick).toHaveBeenCalledTimes(1);
164
+ });
165
+ it('should call onClick with correct event when clicked', function () {
166
+ var _renderComponent11 = renderComponent(),
167
+ getByRole = _renderComponent11.getByRole;
168
+ var button = getByRole('button');
169
+ _react2.fireEvent.click(button);
170
+ expect(onClick).toHaveBeenCalled();
171
+ expect(onClick.mock.calls[0][0]).toBeTruthy();
172
+ });
173
+ it('should handle multiple clicks', function () {
174
+ var _renderComponent12 = renderComponent(),
175
+ getByRole = _renderComponent12.getByRole;
176
+ var button = getByRole('button');
177
+ _react2.fireEvent.click(button);
178
+ _react2.fireEvent.click(button);
179
+ _react2.fireEvent.click(button);
180
+ expect(onClick).toHaveBeenCalledTimes(3);
181
+ });
182
+ it('should handle rapid clicks', function () {
183
+ var _renderComponent13 = renderComponent(),
184
+ getByRole = _renderComponent13.getByRole;
185
+ var button = getByRole('button');
186
+ for (var i = 0; i < 10; i++) {
187
+ _react2.fireEvent.click(button);
188
+ }
189
+ expect(onClick).toHaveBeenCalledTimes(10);
190
+ });
191
+ });
192
+ describe('edge cases', function () {
193
+ it('should render with empty string value', function () {
194
+ var _renderComponent14 = renderComponent({
195
+ value: ''
196
+ }),
197
+ getByRole = _renderComponent14.getByRole;
198
+ expect(getByRole('button')).toBeInTheDocument();
199
+ });
200
+ it('should render with undefined onClick', function () {
201
+ var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_styles.ThemeProvider, {
202
+ theme: theme
203
+ }, /*#__PURE__*/_react["default"].createElement(_toolMenu.MiniButton, {
204
+ value: "Test",
205
+ onClick: undefined
206
+ }))),
207
+ getByRole = _render.getByRole;
208
+ expect(getByRole('button')).toBeInTheDocument();
209
+ });
210
+ it('should render with null onClick', function () {
211
+ var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_styles.ThemeProvider, {
212
+ theme: theme
213
+ }, /*#__PURE__*/_react["default"].createElement(_toolMenu.MiniButton, {
214
+ value: "Test",
215
+ onClick: null
216
+ }))),
217
+ getByRole = _render2.getByRole;
218
+ expect(getByRole('button')).toBeInTheDocument();
219
+ });
220
+ it('should render with very long value text', function () {
221
+ var longText = 'This is a very long button text that might cause layout issues';
222
+ var _renderComponent15 = renderComponent({
223
+ value: longText
224
+ }),
225
+ getByText = _renderComponent15.getByText;
226
+ expect(getByText(longText)).toBeInTheDocument();
227
+ });
228
+ it('should render with special characters in value', function () {
229
+ var specialText = 'Test <>&"\'';
230
+ var _renderComponent16 = renderComponent({
231
+ value: specialText
232
+ }),
233
+ getByText = _renderComponent16.getByText;
234
+ expect(getByText(specialText)).toBeInTheDocument();
235
+ });
236
+ it('should render with unicode characters in value', function () {
237
+ var unicodeText = 'Test 你好 🎉';
238
+ var _renderComponent17 = renderComponent({
239
+ value: unicodeText
240
+ }),
241
+ getByText = _renderComponent17.getByText;
242
+ expect(getByText(unicodeText)).toBeInTheDocument();
243
+ });
244
+ });
245
+ describe('className prop', function () {
246
+ it('should accept className prop without error', function () {
247
+ var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_styles.ThemeProvider, {
248
+ theme: theme
249
+ }, /*#__PURE__*/_react["default"].createElement(_toolMenu.MiniButton, {
250
+ value: "Test",
251
+ onClick: onClick,
252
+ className: "custom-class"
253
+ }))),
254
+ getByRole = _render3.getByRole;
255
+ expect(getByRole('button')).toBeInTheDocument();
256
+ });
257
+ });
258
+ });
259
+ describe('ToolMenu', function () {
260
+ var addCategory = jest.fn();
261
+ beforeEach(function () {
262
+ jest.clearAllMocks();
263
+ });
264
+ var renderComponent = function renderComponent() {
265
+ var extras = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
266
+ var defaults = {
267
+ addCategory: addCategory,
268
+ disabled: false,
269
+ language: 'en'
270
+ };
271
+ var props = _objectSpread(_objectSpread({}, defaults), extras);
272
+ return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_styles.ThemeProvider, {
273
+ theme: theme
274
+ }, /*#__PURE__*/_react["default"].createElement(_toolMenu.ToolMenu, props)));
275
+ };
276
+ describe('rendering', function () {
277
+ it('should render without crashing', function () {
278
+ var _renderComponent18 = renderComponent(),
279
+ container = _renderComponent18.container;
280
+ expect(container).toBeInTheDocument();
281
+ });
282
+ it('should render a div container', function () {
283
+ var _renderComponent19 = renderComponent(),
284
+ container = _renderComponent19.container;
285
+ expect(container.firstChild).toBeInstanceOf(HTMLDivElement);
286
+ });
287
+ it('should render MiniButton when not disabled', function () {
288
+ var _renderComponent20 = renderComponent({
289
+ disabled: false
290
+ }),
291
+ getByRole = _renderComponent20.getByRole;
292
+ expect(getByRole('button')).toBeInTheDocument();
293
+ });
294
+ it('should not render MiniButton when disabled', function () {
295
+ var _renderComponent21 = renderComponent({
296
+ disabled: true
297
+ }),
298
+ queryByRole = _renderComponent21.queryByRole;
299
+ expect(queryByRole('button')).not.toBeInTheDocument();
300
+ });
301
+ it('should render translated button text', function () {
302
+ var _renderComponent22 = renderComponent(),
303
+ getByText = _renderComponent22.getByText;
304
+ expect(getByText('Add Category')).toBeInTheDocument();
305
+ });
306
+ it('should use language prop for translation', function () {
307
+ var Translator = require('@pie-lib/translator')["default"];
308
+ var _renderComponent23 = renderComponent({
309
+ language: 'es'
310
+ }),
311
+ getByRole = _renderComponent23.getByRole;
312
+ expect(getByRole('button')).toBeInTheDocument();
313
+ expect(Translator.translator.t).toHaveBeenCalledWith('charting.addCategory', {
314
+ lng: 'es'
315
+ });
316
+ });
317
+ });
318
+ describe('className prop', function () {
319
+ it('should apply custom className to container', function () {
320
+ var _renderComponent24 = renderComponent({
321
+ className: 'custom-tool-menu'
322
+ }),
323
+ container = _renderComponent24.container;
324
+ expect(container.firstChild).toHaveClass('custom-tool-menu');
325
+ });
326
+ it('should render without className', function () {
327
+ var _renderComponent25 = renderComponent({
328
+ className: undefined
329
+ }),
330
+ container = _renderComponent25.container;
331
+ expect(container.firstChild).toBeInTheDocument();
332
+ });
333
+ it('should handle empty string className', function () {
334
+ var _renderComponent26 = renderComponent({
335
+ className: ''
336
+ }),
337
+ container = _renderComponent26.container;
338
+ expect(container.firstChild).toBeInTheDocument();
339
+ });
340
+ });
341
+ describe('disabled state', function () {
342
+ it('should hide button when disabled is true', function () {
343
+ var _renderComponent27 = renderComponent({
344
+ disabled: true
345
+ }),
346
+ queryByRole = _renderComponent27.queryByRole;
347
+ expect(queryByRole('button')).not.toBeInTheDocument();
348
+ });
349
+ it('should show button when disabled is false', function () {
350
+ var _renderComponent28 = renderComponent({
351
+ disabled: false
352
+ }),
353
+ getByRole = _renderComponent28.getByRole;
354
+ expect(getByRole('button')).toBeInTheDocument();
355
+ });
356
+ it('should show button when disabled is undefined', function () {
357
+ var _renderComponent29 = renderComponent({
358
+ disabled: undefined
359
+ }),
360
+ getByRole = _renderComponent29.getByRole;
361
+ expect(getByRole('button')).toBeInTheDocument();
362
+ });
363
+ it('should hide button when disabled is explicitly true', function () {
364
+ var _renderComponent30 = renderComponent({
365
+ disabled: true
366
+ }),
367
+ queryByRole = _renderComponent30.queryByRole;
368
+ expect(queryByRole('button')).toBeNull();
369
+ });
370
+ });
371
+ describe('addCategory functionality', function () {
372
+ it('should call addCategory when button is clicked', function () {
373
+ var _renderComponent31 = renderComponent(),
374
+ getByRole = _renderComponent31.getByRole;
375
+ _react2.fireEvent.click(getByRole('button'));
376
+ expect(addCategory).toHaveBeenCalledTimes(1);
377
+ });
378
+ it('should not call addCategory when disabled', function () {
379
+ var _renderComponent32 = renderComponent({
380
+ disabled: true
381
+ }),
382
+ queryByRole = _renderComponent32.queryByRole;
383
+ expect(queryByRole('button')).not.toBeInTheDocument();
384
+ expect(addCategory).not.toHaveBeenCalled();
385
+ });
386
+ it('should handle multiple clicks on add category button', function () {
387
+ var _renderComponent33 = renderComponent(),
388
+ getByRole = _renderComponent33.getByRole;
389
+ var button = getByRole('button');
390
+ _react2.fireEvent.click(button);
391
+ _react2.fireEvent.click(button);
392
+ _react2.fireEvent.click(button);
393
+ expect(addCategory).toHaveBeenCalledTimes(3);
394
+ });
395
+ it('should render with undefined addCategory without crashing', function () {
396
+ var _render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_styles.ThemeProvider, {
397
+ theme: theme
398
+ }, /*#__PURE__*/_react["default"].createElement(_toolMenu.ToolMenu, {
399
+ addCategory: undefined,
400
+ language: "en"
401
+ }))),
402
+ container = _render4.container;
403
+ expect(container).toBeInTheDocument();
404
+ });
405
+ });
406
+ describe('language prop', function () {
407
+ it('should pass language to translator', function () {
408
+ var Translator = require('@pie-lib/translator')["default"];
409
+ renderComponent({
410
+ language: 'fr'
411
+ });
412
+ expect(Translator.translator.t).toHaveBeenCalledWith('charting.addCategory', {
413
+ lng: 'fr'
414
+ });
415
+ });
416
+ it('should handle default english language', function () {
417
+ var Translator = require('@pie-lib/translator')["default"];
418
+ renderComponent({
419
+ language: 'en'
420
+ });
421
+ expect(Translator.translator.t).toHaveBeenCalledWith('charting.addCategory', {
422
+ lng: 'en'
423
+ });
424
+ });
425
+ it('should handle undefined language', function () {
426
+ var Translator = require('@pie-lib/translator')["default"];
427
+ renderComponent({
428
+ language: undefined
429
+ });
430
+ expect(Translator.translator.t).toHaveBeenCalledWith('charting.addCategory', {
431
+ lng: undefined
432
+ });
433
+ });
434
+ it('should handle empty string language', function () {
435
+ var Translator = require('@pie-lib/translator')["default"];
436
+ renderComponent({
437
+ language: ''
438
+ });
439
+ expect(Translator.translator.t).toHaveBeenCalledWith('charting.addCategory', {
440
+ lng: ''
441
+ });
442
+ });
443
+ it('should handle non-standard language codes', function () {
444
+ var Translator = require('@pie-lib/translator')["default"];
445
+ renderComponent({
446
+ language: 'zh-CN'
447
+ });
448
+ expect(Translator.translator.t).toHaveBeenCalledWith('charting.addCategory', {
449
+ lng: 'zh-CN'
450
+ });
451
+ });
452
+ });
453
+ describe('edge cases', function () {
454
+ it('should render with all props undefined', function () {
455
+ var _render5 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_styles.ThemeProvider, {
456
+ theme: theme
457
+ }, /*#__PURE__*/_react["default"].createElement(_toolMenu.ToolMenu, null))),
458
+ container = _render5.container;
459
+ expect(container).toBeInTheDocument();
460
+ });
461
+ it('should render with null props', function () {
462
+ var _render6 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_styles.ThemeProvider, {
463
+ theme: theme
464
+ }, /*#__PURE__*/_react["default"].createElement(_toolMenu.ToolMenu, {
465
+ addCategory: null,
466
+ disabled: null,
467
+ language: null
468
+ }))),
469
+ container = _render6.container;
470
+ expect(container).toBeInTheDocument();
471
+ });
472
+ it('should handle component unmounting', function () {
473
+ var _renderComponent34 = renderComponent(),
474
+ unmount = _renderComponent34.unmount;
475
+ expect(function () {
476
+ return unmount();
477
+ }).not.toThrow();
478
+ });
479
+ it('should handle re-rendering with different props', function () {
480
+ var _renderComponent35 = renderComponent({
481
+ disabled: false
482
+ }),
483
+ rerender = _renderComponent35.rerender,
484
+ getByRole = _renderComponent35.getByRole,
485
+ queryByRole = _renderComponent35.queryByRole;
486
+ expect(getByRole('button')).toBeInTheDocument();
487
+ rerender(/*#__PURE__*/_react["default"].createElement(_styles.ThemeProvider, {
488
+ theme: theme
489
+ }, /*#__PURE__*/_react["default"].createElement(_toolMenu.ToolMenu, {
490
+ addCategory: addCategory,
491
+ disabled: true,
492
+ language: "en"
493
+ })));
494
+ expect(queryByRole('button')).not.toBeInTheDocument();
495
+ rerender(/*#__PURE__*/_react["default"].createElement(_styles.ThemeProvider, {
496
+ theme: theme
497
+ }, /*#__PURE__*/_react["default"].createElement(_toolMenu.ToolMenu, {
498
+ addCategory: addCategory,
499
+ disabled: false,
500
+ language: "es"
501
+ })));
502
+ expect(getByRole('button')).toBeInTheDocument();
503
+ });
504
+ it('should handle rapid prop changes', function () {
505
+ var _renderComponent36 = renderComponent({
506
+ disabled: false
507
+ }),
508
+ rerender = _renderComponent36.rerender,
509
+ getByRole = _renderComponent36.getByRole;
510
+ expect(getByRole('button')).toBeInTheDocument();
511
+ for (var i = 0; i < 10; i++) {
512
+ rerender(/*#__PURE__*/_react["default"].createElement(_styles.ThemeProvider, {
513
+ theme: theme
514
+ }, /*#__PURE__*/_react["default"].createElement(_toolMenu.ToolMenu, {
515
+ addCategory: addCategory,
516
+ disabled: i % 2 === 0,
517
+ language: "en"
518
+ })));
519
+ }
520
+ expect(getByRole('button')).toBeInTheDocument();
521
+ });
522
+ });
523
+ describe('component lifecycle', function () {
524
+ it('should render as class component', function () {
525
+ var _renderComponent37 = renderComponent(),
526
+ container = _renderComponent37.container;
527
+ expect(container).toBeInTheDocument();
528
+ });
529
+ it('should handle updates correctly', function () {
530
+ var _renderComponent38 = renderComponent({
531
+ language: 'en'
532
+ }),
533
+ rerender = _renderComponent38.rerender,
534
+ getByRole = _renderComponent38.getByRole;
535
+ expect(getByRole('button')).toBeInTheDocument();
536
+ rerender(/*#__PURE__*/_react["default"].createElement(_styles.ThemeProvider, {
537
+ theme: theme
538
+ }, /*#__PURE__*/_react["default"].createElement(_toolMenu.ToolMenu, {
539
+ addCategory: addCategory,
540
+ disabled: false,
541
+ language: "fr"
542
+ })));
543
+ expect(getByRole('button')).toBeInTheDocument();
544
+ });
545
+ it('should cleanup properly on unmount', function () {
546
+ var _renderComponent39 = renderComponent(),
547
+ unmount = _renderComponent39.unmount;
548
+ expect(function () {
549
+ return unmount();
550
+ }).not.toThrow();
551
+ });
552
+ });
553
+ describe('accessibility', function () {
554
+ it('should have accessible button element', function () {
555
+ var _renderComponent40 = renderComponent(),
556
+ getByRole = _renderComponent40.getByRole;
557
+ var button = getByRole('button');
558
+ expect(button).toBeInTheDocument();
559
+ });
560
+ it('should have button with text content', function () {
561
+ var _renderComponent41 = renderComponent(),
562
+ getByRole = _renderComponent41.getByRole;
563
+ var button = getByRole('button');
564
+ expect(button).toHaveTextContent('Add Category');
565
+ });
566
+ it('should maintain button accessibility when enabled', function () {
567
+ var _renderComponent42 = renderComponent({
568
+ disabled: false
569
+ }),
570
+ getByRole = _renderComponent42.getByRole;
571
+ var button = getByRole('button');
572
+ expect(button).not.toBeDisabled();
573
+ expect(button).toHaveTextContent('Add Category');
574
+ });
575
+ });
576
+ describe('integration', function () {
577
+ it('should work correctly with all props provided', function () {
578
+ var customAddCategory = jest.fn();
579
+ var _renderComponent43 = renderComponent({
580
+ addCategory: customAddCategory,
581
+ disabled: false,
582
+ language: 'de',
583
+ className: 'test-class'
584
+ }),
585
+ getByRole = _renderComponent43.getByRole;
586
+ var button = getByRole('button');
587
+ expect(button).toBeInTheDocument();
588
+ _react2.fireEvent.click(button);
589
+ expect(customAddCategory).toHaveBeenCalledTimes(1);
590
+ });
591
+ it('should toggle between enabled and disabled states', function () {
592
+ var _renderComponent44 = renderComponent({
593
+ disabled: false
594
+ }),
595
+ rerender = _renderComponent44.rerender,
596
+ getByRole = _renderComponent44.getByRole,
597
+ queryByRole = _renderComponent44.queryByRole;
598
+ expect(getByRole('button')).toBeInTheDocument();
599
+ rerender(/*#__PURE__*/_react["default"].createElement(_styles.ThemeProvider, {
600
+ theme: theme
601
+ }, /*#__PURE__*/_react["default"].createElement(_toolMenu.ToolMenu, {
602
+ addCategory: addCategory,
603
+ disabled: true,
604
+ language: "en"
605
+ })));
606
+ expect(queryByRole('button')).not.toBeInTheDocument();
607
+ });
608
+ it('should handle language switching', function () {
609
+ var Translator = require('@pie-lib/translator')["default"];
610
+ var _renderComponent45 = renderComponent({
611
+ language: 'en'
612
+ }),
613
+ rerender = _renderComponent45.rerender;
614
+ rerender(/*#__PURE__*/_react["default"].createElement(_styles.ThemeProvider, {
615
+ theme: theme
616
+ }, /*#__PURE__*/_react["default"].createElement(_toolMenu.ToolMenu, {
617
+ addCategory: addCategory,
618
+ disabled: false,
619
+ language: "es"
620
+ })));
621
+ expect(Translator.translator.t).toHaveBeenCalledWith('charting.addCategory', {
622
+ lng: 'es'
623
+ });
624
+ });
625
+ });
626
+ });
627
+ //# sourceMappingURL=tool-menu.test.js.map