@pie-lib/config-ui 13.0.13 → 13.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.
- package/CHANGELOG.md +0 -42
- package/lib/__tests__/alert-dialog.test.js +262 -0
- package/lib/__tests__/alert-dialog.test.js.map +1 -0
- package/lib/__tests__/checkbox.test.js +227 -0
- package/lib/__tests__/checkbox.test.js.map +1 -0
- package/lib/__tests__/choice-utils.test.js +14 -0
- package/lib/__tests__/choice-utils.test.js.map +1 -0
- package/lib/__tests__/form-section.test.js +252 -0
- package/lib/__tests__/form-section.test.js.map +1 -0
- package/lib/__tests__/help.test.js +270 -0
- package/lib/__tests__/help.test.js.map +1 -0
- package/lib/__tests__/input.test.js +268 -0
- package/lib/__tests__/input.test.js.map +1 -0
- package/lib/__tests__/langs.test.js +541 -0
- package/lib/__tests__/langs.test.js.map +1 -0
- package/lib/__tests__/number-text-field-custom.test.js +362 -0
- package/lib/__tests__/number-text-field-custom.test.js.map +1 -0
- package/lib/__tests__/number-text-field.test.js +421 -0
- package/lib/__tests__/number-text-field.test.js.map +1 -0
- package/lib/__tests__/radio-with-label.test.js +233 -0
- package/lib/__tests__/radio-with-label.test.js.map +1 -0
- package/lib/__tests__/settings-panel.test.js +184 -0
- package/lib/__tests__/settings-panel.test.js.map +1 -0
- package/lib/__tests__/settings.test.js +653 -0
- package/lib/__tests__/settings.test.js.map +1 -0
- package/lib/__tests__/tabs.test.js +211 -0
- package/lib/__tests__/tabs.test.js.map +1 -0
- package/lib/__tests__/two-choice.test.js +124 -0
- package/lib/__tests__/two-choice.test.js.map +1 -0
- package/lib/__tests__/with-stateful-model.test.js +221 -0
- package/lib/__tests__/with-stateful-model.test.js.map +1 -0
- package/lib/choice-configuration/__tests__/feedback-menu.test.js +287 -0
- package/lib/choice-configuration/__tests__/feedback-menu.test.js.map +1 -0
- package/lib/choice-configuration/__tests__/index.test.js +253 -0
- package/lib/choice-configuration/__tests__/index.test.js.map +1 -0
- package/lib/feedback-config/__tests__/feedback-config.test.js +201 -0
- package/lib/feedback-config/__tests__/feedback-config.test.js.map +1 -0
- package/lib/feedback-config/__tests__/feedback-selector.test.js +177 -0
- package/lib/feedback-config/__tests__/feedback-selector.test.js.map +1 -0
- package/lib/layout/__tests__/config.layout.test.js +70 -0
- package/lib/layout/__tests__/config.layout.test.js.map +1 -0
- package/lib/layout/__tests__/layout-content.test.js +6 -0
- package/lib/layout/__tests__/layout-content.test.js.map +1 -0
- package/lib/tags-input/__tests__/index.test.js +183 -0
- package/lib/tags-input/__tests__/index.test.js.map +1 -0
- package/package.json +5 -5
- package/LICENSE.md +0 -5
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
5
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
6
|
+
var _react = require("@testing-library/react");
|
|
7
|
+
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
8
|
+
var _react2 = _interopRequireDefault(require("react"));
|
|
9
|
+
var _feedbackSelector = require("../feedback-selector");
|
|
10
|
+
// Mock the editable-html component to avoid window dependencies in tests
|
|
11
|
+
jest.mock('@pie-lib/editable-html-tip-tap', function () {
|
|
12
|
+
return {
|
|
13
|
+
__esModule: true,
|
|
14
|
+
"default": function _default(_ref) {
|
|
15
|
+
var markup = _ref.markup,
|
|
16
|
+
_onChange = _ref.onChange;
|
|
17
|
+
return /*#__PURE__*/_react2["default"].createElement("textarea", {
|
|
18
|
+
"data-testid": "editable-html",
|
|
19
|
+
defaultValue: markup || '',
|
|
20
|
+
onChange: function onChange(e) {
|
|
21
|
+
return _onChange(e.target.value);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
describe('feedback-selector', function () {
|
|
28
|
+
var onChange;
|
|
29
|
+
var renderComponent = function renderComponent() {
|
|
30
|
+
var feedback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
|
31
|
+
type: 'default',
|
|
32
|
+
"default": 'hi'
|
|
33
|
+
};
|
|
34
|
+
return (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_feedbackSelector.FeedbackSelector, {
|
|
35
|
+
label: 'Feedback',
|
|
36
|
+
onChange: onChange,
|
|
37
|
+
feedback: feedback
|
|
38
|
+
}));
|
|
39
|
+
};
|
|
40
|
+
beforeEach(function () {
|
|
41
|
+
onChange = jest.fn();
|
|
42
|
+
});
|
|
43
|
+
describe('rendering', function () {
|
|
44
|
+
it('renders feedback type selector', function () {
|
|
45
|
+
renderComponent();
|
|
46
|
+
expect(_react.screen.getByText('Simple Feedback')).toBeInTheDocument();
|
|
47
|
+
expect(_react.screen.getByText('No Feedback')).toBeInTheDocument();
|
|
48
|
+
expect(_react.screen.getByText('Customized Feedback')).toBeInTheDocument();
|
|
49
|
+
});
|
|
50
|
+
it('shows default feedback text when type is default', function () {
|
|
51
|
+
renderComponent({
|
|
52
|
+
type: 'default',
|
|
53
|
+
"default": 'hi'
|
|
54
|
+
});
|
|
55
|
+
expect(_react.screen.getByText('hi')).toBeInTheDocument();
|
|
56
|
+
});
|
|
57
|
+
it('shows editable html when type is custom', function () {
|
|
58
|
+
renderComponent({
|
|
59
|
+
type: 'custom',
|
|
60
|
+
"default": 'hi',
|
|
61
|
+
custom: 'custom text'
|
|
62
|
+
});
|
|
63
|
+
expect(_react.screen.getByTestId('editable-html')).toBeInTheDocument();
|
|
64
|
+
expect(_react.screen.getByTestId('editable-html')).toHaveValue('custom text');
|
|
65
|
+
});
|
|
66
|
+
it('does not show default feedback when type is none', function () {
|
|
67
|
+
renderComponent({
|
|
68
|
+
type: 'none',
|
|
69
|
+
"default": 'hi'
|
|
70
|
+
});
|
|
71
|
+
expect(_react.screen.queryByText('hi')).not.toBeInTheDocument();
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe('user interactions', function () {
|
|
75
|
+
it('calls onChange when switching to default feedback', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
76
|
+
var user;
|
|
77
|
+
return _regenerator["default"].wrap(function (_context) {
|
|
78
|
+
while (1) switch (_context.prev = _context.next) {
|
|
79
|
+
case 0:
|
|
80
|
+
user = _userEvent["default"].setup();
|
|
81
|
+
renderComponent({
|
|
82
|
+
type: 'custom',
|
|
83
|
+
"default": 'hi'
|
|
84
|
+
});
|
|
85
|
+
_context.next = 1;
|
|
86
|
+
return user.click(_react.screen.getByLabelText('Simple Feedback'));
|
|
87
|
+
case 1:
|
|
88
|
+
expect(onChange).toHaveBeenCalledWith({
|
|
89
|
+
type: 'default',
|
|
90
|
+
"default": 'hi'
|
|
91
|
+
});
|
|
92
|
+
case 2:
|
|
93
|
+
case "end":
|
|
94
|
+
return _context.stop();
|
|
95
|
+
}
|
|
96
|
+
}, _callee);
|
|
97
|
+
})));
|
|
98
|
+
it('calls onChange when switching to custom feedback', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
99
|
+
var user;
|
|
100
|
+
return _regenerator["default"].wrap(function (_context2) {
|
|
101
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
102
|
+
case 0:
|
|
103
|
+
user = _userEvent["default"].setup();
|
|
104
|
+
renderComponent({
|
|
105
|
+
type: 'default',
|
|
106
|
+
"default": 'hi'
|
|
107
|
+
});
|
|
108
|
+
_context2.next = 1;
|
|
109
|
+
return user.click(_react.screen.getByLabelText('Customized Feedback'));
|
|
110
|
+
case 1:
|
|
111
|
+
expect(onChange).toHaveBeenCalledWith({
|
|
112
|
+
type: 'custom',
|
|
113
|
+
"default": 'hi'
|
|
114
|
+
});
|
|
115
|
+
case 2:
|
|
116
|
+
case "end":
|
|
117
|
+
return _context2.stop();
|
|
118
|
+
}
|
|
119
|
+
}, _callee2);
|
|
120
|
+
})));
|
|
121
|
+
it('calls onChange when switching to no feedback', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
122
|
+
var user;
|
|
123
|
+
return _regenerator["default"].wrap(function (_context3) {
|
|
124
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
125
|
+
case 0:
|
|
126
|
+
user = _userEvent["default"].setup();
|
|
127
|
+
renderComponent({
|
|
128
|
+
type: 'default',
|
|
129
|
+
"default": 'hi'
|
|
130
|
+
});
|
|
131
|
+
_context3.next = 1;
|
|
132
|
+
return user.click(_react.screen.getByLabelText('No Feedback'));
|
|
133
|
+
case 1:
|
|
134
|
+
expect(onChange).toHaveBeenCalledWith({
|
|
135
|
+
type: 'none',
|
|
136
|
+
"default": 'hi'
|
|
137
|
+
});
|
|
138
|
+
case 2:
|
|
139
|
+
case "end":
|
|
140
|
+
return _context3.stop();
|
|
141
|
+
}
|
|
142
|
+
}, _callee3);
|
|
143
|
+
})));
|
|
144
|
+
it('calls onChange with custom text when editing custom feedback', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
|
145
|
+
var user, editor, lastCall;
|
|
146
|
+
return _regenerator["default"].wrap(function (_context4) {
|
|
147
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
148
|
+
case 0:
|
|
149
|
+
user = _userEvent["default"].setup();
|
|
150
|
+
renderComponent({
|
|
151
|
+
type: 'custom',
|
|
152
|
+
"default": 'hi',
|
|
153
|
+
custom: ''
|
|
154
|
+
});
|
|
155
|
+
editor = _react.screen.getByTestId('editable-html');
|
|
156
|
+
_context4.next = 1;
|
|
157
|
+
return user.clear(editor);
|
|
158
|
+
case 1:
|
|
159
|
+
_context4.next = 2;
|
|
160
|
+
return user.type(editor, 'text');
|
|
161
|
+
case 2:
|
|
162
|
+
// user.type triggers onChange for each character, so check that onChange was called
|
|
163
|
+
// and that the last call has 'text' in custom field
|
|
164
|
+
expect(onChange).toHaveBeenCalled();
|
|
165
|
+
lastCall = onChange.mock.calls[onChange.mock.calls.length - 1][0];
|
|
166
|
+
expect(lastCall.type).toBe('custom');
|
|
167
|
+
expect(lastCall.custom).toBe('text');
|
|
168
|
+
expect(lastCall["default"]).toBe('hi');
|
|
169
|
+
case 3:
|
|
170
|
+
case "end":
|
|
171
|
+
return _context4.stop();
|
|
172
|
+
}
|
|
173
|
+
}, _callee4);
|
|
174
|
+
})));
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
//# sourceMappingURL=feedback-selector.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-selector.test.js","names":["_react","require","_userEvent","_interopRequireDefault","_react2","_feedbackSelector","jest","mock","__esModule","default","_ref","markup","onChange","createElement","defaultValue","e","target","value","describe","renderComponent","feedback","arguments","length","undefined","type","render","FeedbackSelector","label","beforeEach","fn","it","expect","screen","getByText","toBeInTheDocument","custom","getByTestId","toHaveValue","queryByText","not","_asyncToGenerator2","_regenerator","mark","_callee","user","wrap","_context","prev","next","userEvent","setup","click","getByLabelText","toHaveBeenCalledWith","stop","_callee2","_context2","_callee3","_context3","_callee4","editor","lastCall","_context4","clear","toHaveBeenCalled","calls","toBe"],"sources":["../../../src/feedback-config/__tests__/feedback-selector.test.jsx"],"sourcesContent":["import { render, screen } from '@testing-library/react';\nimport userEvent from '@testing-library/user-event';\nimport React from 'react';\nimport { FeedbackSelector } from '../feedback-selector';\n\n// Mock the editable-html component to avoid window dependencies in tests\njest.mock('@pie-lib/editable-html-tip-tap', () => {\n return {\n __esModule: true,\n default: ({ markup, onChange }) => (\n <textarea data-testid=\"editable-html\" defaultValue={markup || ''} onChange={(e) => onChange(e.target.value)} />\n ),\n };\n});\n\ndescribe('feedback-selector', () => {\n let onChange;\n\n const renderComponent = (feedback = { type: 'default', default: 'hi' }) => {\n return render(<FeedbackSelector label={'Feedback'} onChange={onChange} feedback={feedback} />);\n };\n\n beforeEach(() => {\n onChange = jest.fn();\n });\n\n describe('rendering', () => {\n it('renders feedback type selector', () => {\n renderComponent();\n expect(screen.getByText('Simple Feedback')).toBeInTheDocument();\n expect(screen.getByText('No Feedback')).toBeInTheDocument();\n expect(screen.getByText('Customized Feedback')).toBeInTheDocument();\n });\n\n it('shows default feedback text when type is default', () => {\n renderComponent({ type: 'default', default: 'hi' });\n expect(screen.getByText('hi')).toBeInTheDocument();\n });\n\n it('shows editable html when type is custom', () => {\n renderComponent({ type: 'custom', default: 'hi', custom: 'custom text' });\n expect(screen.getByTestId('editable-html')).toBeInTheDocument();\n expect(screen.getByTestId('editable-html')).toHaveValue('custom text');\n });\n\n it('does not show default feedback when type is none', () => {\n renderComponent({ type: 'none', default: 'hi' });\n expect(screen.queryByText('hi')).not.toBeInTheDocument();\n });\n });\n\n describe('user interactions', () => {\n it('calls onChange when switching to default feedback', async () => {\n const user = userEvent.setup();\n renderComponent({ type: 'custom', default: 'hi' });\n\n await user.click(screen.getByLabelText('Simple Feedback'));\n\n expect(onChange).toHaveBeenCalledWith({ type: 'default', default: 'hi' });\n });\n\n it('calls onChange when switching to custom feedback', async () => {\n const user = userEvent.setup();\n renderComponent({ type: 'default', default: 'hi' });\n\n await user.click(screen.getByLabelText('Customized Feedback'));\n\n expect(onChange).toHaveBeenCalledWith({ type: 'custom', default: 'hi' });\n });\n\n it('calls onChange when switching to no feedback', async () => {\n const user = userEvent.setup();\n renderComponent({ type: 'default', default: 'hi' });\n\n await user.click(screen.getByLabelText('No Feedback'));\n\n expect(onChange).toHaveBeenCalledWith({ type: 'none', default: 'hi' });\n });\n\n it('calls onChange with custom text when editing custom feedback', async () => {\n const user = userEvent.setup();\n renderComponent({ type: 'custom', default: 'hi', custom: '' });\n\n const editor = screen.getByTestId('editable-html');\n await user.clear(editor);\n await user.type(editor, 'text');\n\n // user.type triggers onChange for each character, so check that onChange was called\n // and that the last call has 'text' in custom field\n expect(onChange).toHaveBeenCalled();\n const lastCall = onChange.mock.calls[onChange.mock.calls.length - 1][0];\n expect(lastCall.type).toBe('custom');\n expect(lastCall.custom).toBe('text');\n expect(lastCall.default).toBe('hi');\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
5
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
6
|
+
var _react = _interopRequireDefault(require("react"));
|
|
7
|
+
var _react2 = require("@testing-library/react");
|
|
8
|
+
var _configLayout = _interopRequireDefault(require("../config-layout"));
|
|
9
|
+
describe('ConfigLayout', function () {
|
|
10
|
+
var settingsPanel = /*#__PURE__*/_react["default"].createElement("div", {
|
|
11
|
+
"data-testid": "settings-panel"
|
|
12
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
13
|
+
key: 0
|
|
14
|
+
}, "Foo"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
15
|
+
key: 1
|
|
16
|
+
}, "Bar"));
|
|
17
|
+
var children = /*#__PURE__*/_react["default"].createElement("div", {
|
|
18
|
+
"data-testid": "main-content"
|
|
19
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "Foo"), /*#__PURE__*/_react["default"].createElement("div", null, "Bar"));
|
|
20
|
+
describe('rendering', function () {
|
|
21
|
+
it('renders correctly with settings panel', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
22
|
+
return _regenerator["default"].wrap(function (_context) {
|
|
23
|
+
while (1) switch (_context.prev = _context.next) {
|
|
24
|
+
case 0:
|
|
25
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_configLayout["default"], {
|
|
26
|
+
settings: settingsPanel
|
|
27
|
+
}, children));
|
|
28
|
+
|
|
29
|
+
// Main content should render immediately
|
|
30
|
+
expect(_react2.screen.getByTestId('main-content')).toBeInTheDocument();
|
|
31
|
+
|
|
32
|
+
// Settings panel may render after layout calculation
|
|
33
|
+
// In test environment, react-measure may not provide dimensions,
|
|
34
|
+
// so we check if it exists but don't require it
|
|
35
|
+
_context.next = 1;
|
|
36
|
+
return (0, _react2.waitFor)(function () {
|
|
37
|
+
expect(_react2.screen.getByText('Foo')).toBeInTheDocument();
|
|
38
|
+
});
|
|
39
|
+
case 1:
|
|
40
|
+
case "end":
|
|
41
|
+
return _context.stop();
|
|
42
|
+
}
|
|
43
|
+
}, _callee);
|
|
44
|
+
})));
|
|
45
|
+
it('renders main content when provided', function () {
|
|
46
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_configLayout["default"], {
|
|
47
|
+
settings: settingsPanel
|
|
48
|
+
}, children));
|
|
49
|
+
expect(_react2.screen.getByTestId('main-content')).toBeInTheDocument();
|
|
50
|
+
expect(_react2.screen.getByText('Foo')).toBeInTheDocument();
|
|
51
|
+
// Only check that Bar appears at least once (in main content)
|
|
52
|
+
expect(_react2.screen.getAllByText('Bar').length).toBeGreaterThanOrEqual(1);
|
|
53
|
+
});
|
|
54
|
+
it('renders settings panel content', function () {
|
|
55
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_configLayout["default"], {
|
|
56
|
+
settings: settingsPanel
|
|
57
|
+
}, children));
|
|
58
|
+
|
|
59
|
+
// Settings panel might not render in test environment due to react-measure
|
|
60
|
+
// Just verify the component renders without crashing
|
|
61
|
+
expect(_react2.screen.getByTestId('main-content')).toBeInTheDocument();
|
|
62
|
+
});
|
|
63
|
+
it('renders without settings panel when not provided', function () {
|
|
64
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_configLayout["default"], null, children));
|
|
65
|
+
expect(_react2.screen.queryByTestId('settings-panel')).not.toBeInTheDocument();
|
|
66
|
+
expect(_react2.screen.getByTestId('main-content')).toBeInTheDocument();
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=config.layout.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.layout.test.js","names":["_react","_interopRequireDefault","require","_react2","_configLayout","describe","settingsPanel","createElement","key","children","it","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_context","prev","next","render","settings","expect","screen","getByTestId","toBeInTheDocument","waitFor","getByText","stop","getAllByText","length","toBeGreaterThanOrEqual","queryByTestId","not"],"sources":["../../../src/layout/__tests__/config.layout.test.jsx"],"sourcesContent":["import React from 'react';\nimport { render, screen, waitFor } from '@testing-library/react';\nimport ConfigLayout from '../config-layout';\n\ndescribe('ConfigLayout', () => {\n const settingsPanel = (\n <div data-testid=\"settings-panel\">\n <div key={0}>Foo</div>\n <div key={1}>Bar</div>\n </div>\n );\n\n const children = (\n <div data-testid=\"main-content\">\n <div>Foo</div>\n <div>Bar</div>\n </div>\n );\n\n describe('rendering', () => {\n it('renders correctly with settings panel', async () => {\n render(<ConfigLayout settings={settingsPanel}>{children}</ConfigLayout>);\n\n // Main content should render immediately\n expect(screen.getByTestId('main-content')).toBeInTheDocument();\n\n // Settings panel may render after layout calculation\n // In test environment, react-measure may not provide dimensions,\n // so we check if it exists but don't require it\n await waitFor(() => {\n expect(screen.getByText('Foo')).toBeInTheDocument();\n });\n });\n\n it('renders main content when provided', () => {\n render(<ConfigLayout settings={settingsPanel}>{children}</ConfigLayout>);\n\n expect(screen.getByTestId('main-content')).toBeInTheDocument();\n expect(screen.getByText('Foo')).toBeInTheDocument();\n // Only check that Bar appears at least once (in main content)\n expect(screen.getAllByText('Bar').length).toBeGreaterThanOrEqual(1);\n });\n\n it('renders settings panel content', () => {\n render(<ConfigLayout settings={settingsPanel}>{children}</ConfigLayout>);\n\n // Settings panel might not render in test environment due to react-measure\n // Just verify the component renders without crashing\n expect(screen.getByTestId('main-content')).toBeInTheDocument();\n });\n\n it('renders without settings panel when not provided', () => {\n render(<ConfigLayout>{children}</ConfigLayout>);\n\n expect(screen.queryByTestId('settings-panel')).not.toBeInTheDocument();\n expect(screen.getByTestId('main-content')).toBeInTheDocument();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-content.test.js","names":["describe","it","todo"],"sources":["../../../src/layout/__tests__/layout-content.test.jsx"],"sourcesContent":["describe('layout-content', () => {\n it.todo('add tests!');\n});\n"],"mappings":";;AAAAA,QAAQ,CAAC,gBAAgB,EAAE,YAAM;EAC/BC,EAAE,CAACC,IAAI,CAAC,YAAY,CAAC;AACvB,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
5
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
6
|
+
var _index = require("../index");
|
|
7
|
+
var _testUtils = require("@pie-lib/test-utils");
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
describe('TagsInput', function () {
|
|
10
|
+
describe('rendering', function () {
|
|
11
|
+
it('renders existing tags as chips', function () {
|
|
12
|
+
(0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_index.TagsInput, {
|
|
13
|
+
tags: ['foo', 'bar'],
|
|
14
|
+
onChange: jest.fn()
|
|
15
|
+
}));
|
|
16
|
+
expect(_testUtils.screen.getByText('foo')).toBeInTheDocument();
|
|
17
|
+
expect(_testUtils.screen.getByText('bar')).toBeInTheDocument();
|
|
18
|
+
});
|
|
19
|
+
it('renders input field', function () {
|
|
20
|
+
(0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_index.TagsInput, {
|
|
21
|
+
tags: ['foo'],
|
|
22
|
+
onChange: jest.fn()
|
|
23
|
+
}));
|
|
24
|
+
var input = _testUtils.screen.getByRole('textbox');
|
|
25
|
+
expect(input).toBeInTheDocument();
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
describe('user interactions', function () {
|
|
29
|
+
var onChange;
|
|
30
|
+
var renderComponent = function renderComponent() {
|
|
31
|
+
var tags = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['foo'];
|
|
32
|
+
onChange = jest.fn();
|
|
33
|
+
return (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_index.TagsInput, {
|
|
34
|
+
onChange: onChange,
|
|
35
|
+
tags: tags
|
|
36
|
+
}));
|
|
37
|
+
};
|
|
38
|
+
describe('focus behavior', function () {
|
|
39
|
+
it('allows user to focus the input', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
40
|
+
var user, input;
|
|
41
|
+
return _regenerator["default"].wrap(function (_context) {
|
|
42
|
+
while (1) switch (_context.prev = _context.next) {
|
|
43
|
+
case 0:
|
|
44
|
+
user = _testUtils.userEvent.setup();
|
|
45
|
+
renderComponent();
|
|
46
|
+
input = _testUtils.screen.getByRole('textbox');
|
|
47
|
+
_context.next = 1;
|
|
48
|
+
return user.click(input);
|
|
49
|
+
case 1:
|
|
50
|
+
expect(input).toHaveFocus();
|
|
51
|
+
case 2:
|
|
52
|
+
case "end":
|
|
53
|
+
return _context.stop();
|
|
54
|
+
}
|
|
55
|
+
}, _callee);
|
|
56
|
+
})));
|
|
57
|
+
it('allows user to blur the input', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
58
|
+
var user, input;
|
|
59
|
+
return _regenerator["default"].wrap(function (_context2) {
|
|
60
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
61
|
+
case 0:
|
|
62
|
+
user = _testUtils.userEvent.setup();
|
|
63
|
+
renderComponent();
|
|
64
|
+
input = _testUtils.screen.getByRole('textbox');
|
|
65
|
+
_context2.next = 1;
|
|
66
|
+
return user.click(input);
|
|
67
|
+
case 1:
|
|
68
|
+
expect(input).toHaveFocus();
|
|
69
|
+
_context2.next = 2;
|
|
70
|
+
return user.tab();
|
|
71
|
+
case 2:
|
|
72
|
+
expect(input).not.toHaveFocus();
|
|
73
|
+
case 3:
|
|
74
|
+
case "end":
|
|
75
|
+
return _context2.stop();
|
|
76
|
+
}
|
|
77
|
+
}, _callee2);
|
|
78
|
+
})));
|
|
79
|
+
});
|
|
80
|
+
describe('typing in input', function () {
|
|
81
|
+
it('updates input value when user types', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
82
|
+
var user, input;
|
|
83
|
+
return _regenerator["default"].wrap(function (_context3) {
|
|
84
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
85
|
+
case 0:
|
|
86
|
+
user = _testUtils.userEvent.setup();
|
|
87
|
+
renderComponent();
|
|
88
|
+
input = _testUtils.screen.getByRole('textbox');
|
|
89
|
+
_context3.next = 1;
|
|
90
|
+
return user.type(input, 'boo');
|
|
91
|
+
case 1:
|
|
92
|
+
expect(input).toHaveValue('boo');
|
|
93
|
+
case 2:
|
|
94
|
+
case "end":
|
|
95
|
+
return _context3.stop();
|
|
96
|
+
}
|
|
97
|
+
}, _callee3);
|
|
98
|
+
})));
|
|
99
|
+
});
|
|
100
|
+
describe('adding tags', function () {
|
|
101
|
+
it('adds new tag when user presses Enter', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
|
102
|
+
var user, input;
|
|
103
|
+
return _regenerator["default"].wrap(function (_context4) {
|
|
104
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
105
|
+
case 0:
|
|
106
|
+
user = _testUtils.userEvent.setup();
|
|
107
|
+
renderComponent();
|
|
108
|
+
input = _testUtils.screen.getByRole('textbox');
|
|
109
|
+
_context4.next = 1;
|
|
110
|
+
return user.type(input, 'banana');
|
|
111
|
+
case 1:
|
|
112
|
+
(0, _testUtils.pressKey)(input, _testUtils.Keys.ENTER);
|
|
113
|
+
expect(onChange).toHaveBeenCalledWith(['foo', 'banana']);
|
|
114
|
+
case 2:
|
|
115
|
+
case "end":
|
|
116
|
+
return _context4.stop();
|
|
117
|
+
}
|
|
118
|
+
}, _callee4);
|
|
119
|
+
})));
|
|
120
|
+
it('does not add duplicate tags', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5() {
|
|
121
|
+
var user, input;
|
|
122
|
+
return _regenerator["default"].wrap(function (_context5) {
|
|
123
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
124
|
+
case 0:
|
|
125
|
+
user = _testUtils.userEvent.setup();
|
|
126
|
+
renderComponent();
|
|
127
|
+
input = _testUtils.screen.getByRole('textbox');
|
|
128
|
+
_context5.next = 1;
|
|
129
|
+
return user.type(input, 'foo');
|
|
130
|
+
case 1:
|
|
131
|
+
(0, _testUtils.pressKey)(input, _testUtils.Keys.ENTER);
|
|
132
|
+
expect(onChange).not.toHaveBeenCalled();
|
|
133
|
+
case 2:
|
|
134
|
+
case "end":
|
|
135
|
+
return _context5.stop();
|
|
136
|
+
}
|
|
137
|
+
}, _callee5);
|
|
138
|
+
})));
|
|
139
|
+
it('clears input after adding tag', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee6() {
|
|
140
|
+
var user, input;
|
|
141
|
+
return _regenerator["default"].wrap(function (_context6) {
|
|
142
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
143
|
+
case 0:
|
|
144
|
+
user = _testUtils.userEvent.setup();
|
|
145
|
+
renderComponent();
|
|
146
|
+
input = _testUtils.screen.getByRole('textbox');
|
|
147
|
+
_context6.next = 1;
|
|
148
|
+
return user.type(input, 'banana');
|
|
149
|
+
case 1:
|
|
150
|
+
(0, _testUtils.pressKey)(input, _testUtils.Keys.ENTER);
|
|
151
|
+
expect(input).toHaveValue('');
|
|
152
|
+
case 2:
|
|
153
|
+
case "end":
|
|
154
|
+
return _context6.stop();
|
|
155
|
+
}
|
|
156
|
+
}, _callee6);
|
|
157
|
+
})));
|
|
158
|
+
});
|
|
159
|
+
describe('deleting tags', function () {
|
|
160
|
+
it('removes tag when user clicks delete button', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee7() {
|
|
161
|
+
var user, deleteButtons;
|
|
162
|
+
return _regenerator["default"].wrap(function (_context7) {
|
|
163
|
+
while (1) switch (_context7.prev = _context7.next) {
|
|
164
|
+
case 0:
|
|
165
|
+
user = _testUtils.userEvent.setup();
|
|
166
|
+
renderComponent(['foo', 'bar']);
|
|
167
|
+
|
|
168
|
+
// Find the delete button for 'foo' tag
|
|
169
|
+
deleteButtons = _testUtils.screen.getAllByTestId('CancelIcon');
|
|
170
|
+
_context7.next = 1;
|
|
171
|
+
return user.click(deleteButtons[0]);
|
|
172
|
+
case 1:
|
|
173
|
+
expect(onChange).toHaveBeenCalledWith(['bar']);
|
|
174
|
+
case 2:
|
|
175
|
+
case "end":
|
|
176
|
+
return _context7.stop();
|
|
177
|
+
}
|
|
178
|
+
}, _callee7);
|
|
179
|
+
})));
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","names":["_index","require","_testUtils","_react","_interopRequireDefault","describe","it","render","createElement","TagsInput","tags","onChange","jest","fn","expect","screen","getByText","toBeInTheDocument","input","getByRole","renderComponent","arguments","length","undefined","_asyncToGenerator2","_regenerator","mark","_callee","user","wrap","_context","prev","next","userEvent","setup","click","toHaveFocus","stop","_callee2","_context2","tab","not","_callee3","_context3","type","toHaveValue","_callee4","_context4","pressKey","Keys","ENTER","toHaveBeenCalledWith","_callee5","_context5","toHaveBeenCalled","_callee6","_context6","_callee7","deleteButtons","_context7","getAllByTestId"],"sources":["../../../src/tags-input/__tests__/index.test.jsx"],"sourcesContent":["import { TagsInput } from '../index';\nimport { Keys, pressKey, render, screen, userEvent } from '@pie-lib/test-utils';\nimport React from 'react';\n\ndescribe('TagsInput', () => {\n describe('rendering', () => {\n it('renders existing tags as chips', () => {\n render(<TagsInput tags={['foo', 'bar']} onChange={jest.fn()} />);\n\n expect(screen.getByText('foo')).toBeInTheDocument();\n expect(screen.getByText('bar')).toBeInTheDocument();\n });\n\n it('renders input field', () => {\n render(<TagsInput tags={['foo']} onChange={jest.fn()} />);\n\n const input = screen.getByRole('textbox');\n expect(input).toBeInTheDocument();\n });\n });\n\n describe('user interactions', () => {\n let onChange;\n const renderComponent = (tags = ['foo']) => {\n onChange = jest.fn();\n return render(<TagsInput onChange={onChange} tags={tags} />);\n };\n\n describe('focus behavior', () => {\n it('allows user to focus the input', async () => {\n const user = userEvent.setup();\n renderComponent();\n\n const input = screen.getByRole('textbox');\n await user.click(input);\n\n expect(input).toHaveFocus();\n });\n\n it('allows user to blur the input', async () => {\n const user = userEvent.setup();\n renderComponent();\n\n const input = screen.getByRole('textbox');\n await user.click(input);\n expect(input).toHaveFocus();\n\n await user.tab();\n expect(input).not.toHaveFocus();\n });\n });\n\n describe('typing in input', () => {\n it('updates input value when user types', async () => {\n const user = userEvent.setup();\n renderComponent();\n\n const input = screen.getByRole('textbox');\n await user.type(input, 'boo');\n\n expect(input).toHaveValue('boo');\n });\n });\n\n describe('adding tags', () => {\n it('adds new tag when user presses Enter', async () => {\n const user = userEvent.setup();\n renderComponent();\n\n const input = screen.getByRole('textbox');\n await user.type(input, 'banana');\n pressKey(input, Keys.ENTER);\n\n expect(onChange).toHaveBeenCalledWith(['foo', 'banana']);\n });\n\n it('does not add duplicate tags', async () => {\n const user = userEvent.setup();\n renderComponent();\n\n const input = screen.getByRole('textbox');\n await user.type(input, 'foo');\n pressKey(input, Keys.ENTER);\n\n expect(onChange).not.toHaveBeenCalled();\n });\n\n it('clears input after adding tag', async () => {\n const user = userEvent.setup();\n renderComponent();\n\n const input = screen.getByRole('textbox');\n await user.type(input, 'banana');\n pressKey(input, Keys.ENTER);\n\n expect(input).toHaveValue('');\n });\n });\n\n describe('deleting tags', () => {\n it('removes tag when user clicks delete button', async () => {\n const user = userEvent.setup();\n renderComponent(['foo', 'bar']);\n\n // Find the delete button for 'foo' tag\n const deleteButtons = screen.getAllByTestId('CancelIcon');\n await user.click(deleteButtons[0]);\n\n expect(onChange).toHaveBeenCalledWith(['bar']);\n });\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-lib/config-ui",
|
|
3
|
-
"version": "13.0
|
|
3
|
+
"version": "13.1.0-beta",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"module": "src/index.js",
|
|
6
6
|
"publishConfig": {
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
"@emotion/styled": "^11.14.1",
|
|
14
14
|
"@mui/icons-material": "^7.3.4",
|
|
15
15
|
"@mui/material": "^7.3.4",
|
|
16
|
-
"@pie-lib/editable-html-tip-tap": "^2.
|
|
17
|
-
"@pie-lib/icons": "^4.0.
|
|
18
|
-
"@pie-lib/render-ui": "^6.1.
|
|
16
|
+
"@pie-lib/editable-html-tip-tap": "^2.2.0-beta",
|
|
17
|
+
"@pie-lib/icons": "^4.0.2",
|
|
18
|
+
"@pie-lib/render-ui": "^6.1.0",
|
|
19
19
|
"assert": "^1.4.1",
|
|
20
20
|
"debug": "^4.1.1",
|
|
21
21
|
"lodash-es": "^4.17.23",
|
|
@@ -30,5 +30,5 @@
|
|
|
30
30
|
"peerDependencies": {
|
|
31
31
|
"react": "^18.2.0"
|
|
32
32
|
},
|
|
33
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "433bcb776c2975739e7417f133d31cd996164116"
|
|
34
34
|
}
|
package/LICENSE.md
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
Copyright 2019 CoreSpring Inc
|
|
2
|
-
|
|
3
|
-
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
|
|
4
|
-
|
|
5
|
-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|