@pie-element/categorize 11.3.4-next.3 → 12.0.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 -11
- package/configure/CHANGELOG.md +0 -11
- package/configure/lib/__tests__/main.test.js +100 -0
- package/configure/lib/__tests__/utils.js +39 -0
- package/configure/lib/defaults.js +3 -6
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/design/__tests__/builder.test.js +34 -0
- package/configure/lib/design/__tests__/buttons.test.js +36 -0
- package/configure/lib/design/__tests__/header.test.js +37 -0
- package/configure/lib/design/__tests__/index.test.js +125 -0
- package/configure/lib/design/__tests__/input-header.test.js +41 -0
- package/configure/lib/design/builder.js +16 -34
- package/configure/lib/design/builder.js.map +1 -1
- package/configure/lib/design/buttons.js +42 -96
- package/configure/lib/design/buttons.js.map +1 -1
- package/configure/lib/design/categories/RowLabel.js +34 -47
- package/configure/lib/design/categories/RowLabel.js.map +1 -1
- package/configure/lib/design/categories/__tests__/alternateResponses.test.js +93 -0
- package/configure/lib/design/categories/__tests__/category.test.js +65 -0
- package/configure/lib/design/categories/__tests__/choice-preview.test.js +52 -0
- package/configure/lib/design/categories/__tests__/droppable-placeholder.test.js +63 -0
- package/configure/lib/design/categories/__tests__/index.test.js +91 -0
- package/configure/lib/design/categories/alternateResponses.js +97 -252
- package/configure/lib/design/categories/alternateResponses.js.map +1 -1
- package/configure/lib/design/categories/category.js +136 -209
- package/configure/lib/design/categories/category.js.map +1 -1
- package/configure/lib/design/categories/choice-preview.js +62 -127
- package/configure/lib/design/categories/choice-preview.js.map +1 -1
- package/configure/lib/design/categories/droppable-placeholder.js +74 -166
- package/configure/lib/design/categories/droppable-placeholder.js.map +1 -1
- package/configure/lib/design/categories/index.js +196 -385
- package/configure/lib/design/categories/index.js.map +1 -1
- package/configure/lib/design/choices/__tests__/choice.test.js +62 -0
- package/configure/lib/design/choices/__tests__/config.test.js +66 -0
- package/configure/lib/design/choices/__tests__/index.test.js +70 -0
- package/configure/lib/design/choices/choice.js +156 -265
- package/configure/lib/design/choices/choice.js.map +1 -1
- package/configure/lib/design/choices/config.js +43 -99
- package/configure/lib/design/choices/config.js.map +1 -1
- package/configure/lib/design/choices/index.js +149 -237
- package/configure/lib/design/choices/index.js.map +1 -1
- package/configure/lib/design/header.js +58 -112
- package/configure/lib/design/header.js.map +1 -1
- package/configure/lib/design/index.js +633 -478
- package/configure/lib/design/index.js.map +1 -1
- package/configure/lib/design/input-header.js +95 -151
- package/configure/lib/design/input-header.js.map +1 -1
- package/configure/lib/design/utils.js +5 -16
- package/configure/lib/design/utils.js.map +1 -1
- package/configure/lib/index.js +121 -184
- package/configure/lib/index.js.map +1 -1
- package/configure/lib/main.js +31 -75
- package/configure/lib/main.js.map +1 -1
- package/configure/lib/utils.js +23 -33
- package/configure/lib/utils.js.map +1 -1
- package/configure/package.json +15 -15
- package/controller/CHANGELOG.md +0 -11
- package/controller/lib/__tests__/index.test.js +526 -0
- package/controller/lib/defaults.js +3 -6
- package/controller/lib/defaults.js.map +1 -1
- package/controller/lib/index.js +238 -319
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js +29 -66
- package/controller/lib/utils.js.map +1 -1
- package/controller/package.json +5 -5
- package/docs/demo/.pie/.configure/package.json +10 -0
- package/docs/demo/.pie/.configure/yarn.lock +2181 -0
- package/docs/demo/.pie/.controllers/package.json +10 -0
- package/docs/demo/.pie/.controllers/yarn.lock +110 -0
- package/docs/demo/.pie/info.entry.js +89 -0
- package/docs/demo/.pie/info.webpack.config.js +119 -0
- package/docs/demo/.pie/package.json +10 -0
- package/docs/demo/.pie/yarn.lock +2190 -0
- package/docs/demo/pie.manifest.json +11 -0
- package/lib/__tests__/index.test.js +197 -0
- package/lib/categorize/__tests__/categories.test.js +138 -0
- package/lib/categorize/__tests__/category.test.js +137 -0
- package/lib/categorize/__tests__/choice.test.js +88 -0
- package/lib/categorize/__tests__/choices.test.js +118 -0
- package/lib/categorize/__tests__/droppable-placeholder.test.js +96 -0
- package/lib/categorize/__tests__/grid-content.test.js +48 -0
- package/lib/categorize/__tests__/index.test.js +152 -0
- package/lib/categorize/categories.js +107 -165
- package/lib/categorize/categories.js.map +1 -1
- package/lib/categorize/category.js +74 -124
- package/lib/categorize/category.js.map +1 -1
- package/lib/categorize/choice.js +119 -246
- package/lib/categorize/choice.js.map +1 -1
- package/lib/categorize/choices.js +67 -132
- package/lib/categorize/choices.js.map +1 -1
- package/lib/categorize/droppable-placeholder.js +47 -104
- package/lib/categorize/droppable-placeholder.js.map +1 -1
- package/lib/categorize/grid-content.js +40 -88
- package/lib/categorize/grid-content.js.map +1 -1
- package/lib/categorize/index.js +342 -318
- package/lib/categorize/index.js.map +1 -1
- package/lib/index.js +286 -307
- package/lib/index.js.map +1 -1
- package/package.json +16 -14
- package/esm/configure.js +0 -34401
- package/esm/configure.js.map +0 -1
- package/esm/controller.js +0 -1468
- package/esm/controller.js.map +0 -1
- package/esm/element.js +0 -13134
- package/esm/element.js.map +0 -1
- package/esm/package.json +0 -3
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _react = _interopRequireDefault(require("react"));
|
|
5
|
+
var _index = _interopRequireDefault(require("../index"));
|
|
6
|
+
var _react2 = require("@testing-library/react");
|
|
7
|
+
var _styles = require("@mui/material/styles");
|
|
8
|
+
var _piePlayerEvents = require("@pie-framework/pie-player-events");
|
|
9
|
+
var _index2 = require("../categorize/index");
|
|
10
|
+
jest.mock('@pie-lib/math-rendering', () => ({
|
|
11
|
+
renderMath: jest.fn()
|
|
12
|
+
}));
|
|
13
|
+
const mockRender = jest.fn();
|
|
14
|
+
const mockUnmount = jest.fn();
|
|
15
|
+
jest.mock('react-dom/client', () => ({
|
|
16
|
+
createRoot: jest.fn(() => ({
|
|
17
|
+
render: mockRender,
|
|
18
|
+
unmount: mockUnmount
|
|
19
|
+
}))
|
|
20
|
+
}));
|
|
21
|
+
const theme = (0, _styles.createTheme)();
|
|
22
|
+
describe('categorize', () => {
|
|
23
|
+
describe('renders', () => {
|
|
24
|
+
const renderCategorize = props => {
|
|
25
|
+
const defaultProps = {
|
|
26
|
+
model: {
|
|
27
|
+
categories: [],
|
|
28
|
+
choices: [],
|
|
29
|
+
correctResponse: [],
|
|
30
|
+
...props
|
|
31
|
+
},
|
|
32
|
+
session: {},
|
|
33
|
+
classes: {},
|
|
34
|
+
onAnswersChange: jest.fn(),
|
|
35
|
+
onShowCorrectToggle: jest.fn()
|
|
36
|
+
};
|
|
37
|
+
return (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_styles.ThemeProvider, {
|
|
38
|
+
theme: theme
|
|
39
|
+
}, /*#__PURE__*/_react.default.createElement(_index2.Categorize, defaultProps)));
|
|
40
|
+
};
|
|
41
|
+
it('renders without crashing', () => {
|
|
42
|
+
const {
|
|
43
|
+
container
|
|
44
|
+
} = renderCategorize();
|
|
45
|
+
expect(container).toBeInTheDocument();
|
|
46
|
+
});
|
|
47
|
+
it('renders with rationale', () => {
|
|
48
|
+
const {
|
|
49
|
+
container
|
|
50
|
+
} = renderCategorize({
|
|
51
|
+
rationale: 'This is rationale'
|
|
52
|
+
});
|
|
53
|
+
expect(container).toBeInTheDocument();
|
|
54
|
+
});
|
|
55
|
+
it('renders with teacherInstructions', () => {
|
|
56
|
+
const {
|
|
57
|
+
container
|
|
58
|
+
} = renderCategorize({
|
|
59
|
+
teacherInstructions: 'These are teacher instructions'
|
|
60
|
+
});
|
|
61
|
+
expect(container).toBeInTheDocument();
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
describe('events', () => {
|
|
65
|
+
let el;
|
|
66
|
+
beforeEach(() => {
|
|
67
|
+
// Register custom element if not already registered
|
|
68
|
+
if (!customElements.get('categorize-el')) {
|
|
69
|
+
customElements.define('categorize-el', _index.default);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Create element via createElement to properly initialize it
|
|
73
|
+
el = document.createElement('categorize-el');
|
|
74
|
+
|
|
75
|
+
// Mock dispatchEvent
|
|
76
|
+
el.dispatchEvent = jest.fn();
|
|
77
|
+
});
|
|
78
|
+
describe('model', () => {
|
|
79
|
+
it('dispatches model set event', () => {
|
|
80
|
+
el.model = {};
|
|
81
|
+
expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.ModelSetEvent('categorize-el', false, true));
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
describe('changeAnswers', () => {
|
|
85
|
+
it('dispatches session changed event - add answer', () => {
|
|
86
|
+
el.model = {
|
|
87
|
+
responseAreasToBeFilled: 2,
|
|
88
|
+
hasUnplacedChoices: true
|
|
89
|
+
};
|
|
90
|
+
el.session = {
|
|
91
|
+
answers: []
|
|
92
|
+
};
|
|
93
|
+
el.changeAnswers([{
|
|
94
|
+
category: 'id-fruits',
|
|
95
|
+
choices: ['apple']
|
|
96
|
+
}]);
|
|
97
|
+
expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent('categorize-el', false));
|
|
98
|
+
el.changeAnswers([{
|
|
99
|
+
category: 'id-fruits',
|
|
100
|
+
choices: ['apple']
|
|
101
|
+
}, {
|
|
102
|
+
category: 'id-vegetables',
|
|
103
|
+
choices: ['carrot']
|
|
104
|
+
}]);
|
|
105
|
+
expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent('categorize-el', true));
|
|
106
|
+
});
|
|
107
|
+
it('dispatches session changed event - remove answer', () => {
|
|
108
|
+
el.model = {
|
|
109
|
+
responseAreasToBeFilled: 1
|
|
110
|
+
};
|
|
111
|
+
el.session = {
|
|
112
|
+
answers: [{
|
|
113
|
+
category: 'id-fruits',
|
|
114
|
+
choices: ['apple']
|
|
115
|
+
}]
|
|
116
|
+
};
|
|
117
|
+
el.changeAnswers([{
|
|
118
|
+
category: 'id-fruits',
|
|
119
|
+
choices: []
|
|
120
|
+
}]);
|
|
121
|
+
expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent('categorize-el', false));
|
|
122
|
+
});
|
|
123
|
+
it('dispatches session changed event - add/remove answer', () => {
|
|
124
|
+
el.model = {
|
|
125
|
+
responseAreasToBeFilled: 2,
|
|
126
|
+
hasUnplacedChoices: true
|
|
127
|
+
};
|
|
128
|
+
el.session = {
|
|
129
|
+
answers: [{
|
|
130
|
+
category: 'id-fruits',
|
|
131
|
+
choices: ['apple']
|
|
132
|
+
}, {
|
|
133
|
+
category: 'id-vegetables',
|
|
134
|
+
choices: ['carrot', 'onion']
|
|
135
|
+
}]
|
|
136
|
+
};
|
|
137
|
+
el.changeAnswers([{
|
|
138
|
+
category: 'id-fruits',
|
|
139
|
+
choices: ['apple']
|
|
140
|
+
}, {
|
|
141
|
+
category: 'id-vegetables',
|
|
142
|
+
choices: ['carrot']
|
|
143
|
+
}]);
|
|
144
|
+
expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent('categorize-el', true));
|
|
145
|
+
el.changeAnswers([{
|
|
146
|
+
category: 'id-fruits',
|
|
147
|
+
choices: ['apple']
|
|
148
|
+
}, {
|
|
149
|
+
category: 'id-vegetables',
|
|
150
|
+
choices: []
|
|
151
|
+
}]);
|
|
152
|
+
expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent('categorize-el', false));
|
|
153
|
+
el.changeAnswers([{
|
|
154
|
+
category: 'id-fruits',
|
|
155
|
+
choices: []
|
|
156
|
+
}, {
|
|
157
|
+
category: 'id-vegetables',
|
|
158
|
+
choices: []
|
|
159
|
+
}]);
|
|
160
|
+
expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent('categorize-el', false));
|
|
161
|
+
});
|
|
162
|
+
it('dispatches session changed event - add/remove answer - no unplaced choices', () => {
|
|
163
|
+
el.model = {
|
|
164
|
+
responseAreasToBeFilled: 2,
|
|
165
|
+
hasUnplacedChoices: false,
|
|
166
|
+
possibleResponses: [['apple', 'carrot', 'onion']]
|
|
167
|
+
};
|
|
168
|
+
el.session = {
|
|
169
|
+
answers: [{
|
|
170
|
+
category: 'id-fruits',
|
|
171
|
+
choices: ['apple']
|
|
172
|
+
}, {
|
|
173
|
+
category: 'id-vegetables',
|
|
174
|
+
choices: []
|
|
175
|
+
}]
|
|
176
|
+
};
|
|
177
|
+
el.changeAnswers([{
|
|
178
|
+
category: 'id-fruits',
|
|
179
|
+
choices: ['apple']
|
|
180
|
+
}, {
|
|
181
|
+
category: 'id-vegetables',
|
|
182
|
+
choices: ['carrot']
|
|
183
|
+
}]);
|
|
184
|
+
expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent('categorize-el', false));
|
|
185
|
+
el.changeAnswers([{
|
|
186
|
+
category: 'id-fruits',
|
|
187
|
+
choices: ['apple']
|
|
188
|
+
}, {
|
|
189
|
+
category: 'id-vegetables',
|
|
190
|
+
choices: ['carrot', 'onion']
|
|
191
|
+
}]);
|
|
192
|
+
expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent('categorize-el', true));
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9pbmRleCIsIl9yZWFjdDIiLCJfc3R5bGVzIiwiX3BpZVBsYXllckV2ZW50cyIsIl9pbmRleDIiLCJqZXN0IiwibW9jayIsInJlbmRlck1hdGgiLCJmbiIsIm1vY2tSZW5kZXIiLCJtb2NrVW5tb3VudCIsImNyZWF0ZVJvb3QiLCJyZW5kZXIiLCJ1bm1vdW50IiwidGhlbWUiLCJjcmVhdGVUaGVtZSIsImRlc2NyaWJlIiwicmVuZGVyQ2F0ZWdvcml6ZSIsInByb3BzIiwiZGVmYXVsdFByb3BzIiwibW9kZWwiLCJjYXRlZ29yaWVzIiwiY2hvaWNlcyIsImNvcnJlY3RSZXNwb25zZSIsInNlc3Npb24iLCJjbGFzc2VzIiwib25BbnN3ZXJzQ2hhbmdlIiwib25TaG93Q29ycmVjdFRvZ2dsZSIsImRlZmF1bHQiLCJjcmVhdGVFbGVtZW50IiwiVGhlbWVQcm92aWRlciIsIkNhdGVnb3JpemUiLCJpdCIsImNvbnRhaW5lciIsImV4cGVjdCIsInRvQmVJblRoZURvY3VtZW50IiwicmF0aW9uYWxlIiwidGVhY2hlckluc3RydWN0aW9ucyIsImVsIiwiYmVmb3JlRWFjaCIsImN1c3RvbUVsZW1lbnRzIiwiZ2V0IiwiZGVmaW5lIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwidG9CZUNhbGxlZFdpdGgiLCJNb2RlbFNldEV2ZW50IiwicmVzcG9uc2VBcmVhc1RvQmVGaWxsZWQiLCJoYXNVbnBsYWNlZENob2ljZXMiLCJhbnN3ZXJzIiwiY2hhbmdlQW5zd2VycyIsImNhdGVnb3J5IiwiU2Vzc2lvbkNoYW5nZWRFdmVudCIsInBvc3NpYmxlUmVzcG9uc2VzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9pbmRleC50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ2F0ZWdvcml6ZSBmcm9tICcuLi9pbmRleCc7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcbmltcG9ydCB7IFRoZW1lUHJvdmlkZXIsIGNyZWF0ZVRoZW1lIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnO1xuaW1wb3J0IHsgTW9kZWxTZXRFdmVudCwgU2Vzc2lvbkNoYW5nZWRFdmVudCB9IGZyb20gJ0BwaWUtZnJhbWV3b3JrL3BpZS1wbGF5ZXItZXZlbnRzJztcbmltcG9ydCB7IENhdGVnb3JpemUgYXMgVW5TdHlsZWRDYXRlZ29yaXplIH0gZnJvbSAnLi4vY2F0ZWdvcml6ZS9pbmRleCc7XG5cbmplc3QubW9jaygnQHBpZS1saWIvbWF0aC1yZW5kZXJpbmcnLCAoKSA9PiAoeyByZW5kZXJNYXRoOiBqZXN0LmZuKCkgfSkpO1xuY29uc3QgbW9ja1JlbmRlciA9IGplc3QuZm4oKTtcbmNvbnN0IG1vY2tVbm1vdW50ID0gamVzdC5mbigpO1xuamVzdC5tb2NrKCdyZWFjdC1kb20vY2xpZW50JywgKCkgPT4gKHtcbiAgY3JlYXRlUm9vdDogamVzdC5mbigoKSA9PiAoe1xuICAgIHJlbmRlcjogbW9ja1JlbmRlcixcbiAgICB1bm1vdW50OiBtb2NrVW5tb3VudCxcbiAgfSkpLFxufSkpO1xuXG5jb25zdCB0aGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5cbmRlc2NyaWJlKCdjYXRlZ29yaXplJywgKCkgPT4ge1xuICBkZXNjcmliZSgncmVuZGVycycsICgpID0+IHtcbiAgICBjb25zdCByZW5kZXJDYXRlZ29yaXplID0gKHByb3BzKSA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgY2F0ZWdvcmllczogW10sXG4gICAgICAgICAgY2hvaWNlczogW10sXG4gICAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbXSxcbiAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvbjoge30sXG4gICAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgICBvbkFuc3dlcnNDaGFuZ2U6IGplc3QuZm4oKSxcbiAgICAgICAgb25TaG93Q29ycmVjdFRvZ2dsZTogamVzdC5mbigpLFxuICAgICAgfTtcbiAgICAgIHJldHVybiByZW5kZXIoXG4gICAgICAgIDxUaGVtZVByb3ZpZGVyIHRoZW1lPXt0aGVtZX0+XG4gICAgICAgICAgPFVuU3R5bGVkQ2F0ZWdvcml6ZSB7Li4uZGVmYXVsdFByb3BzfSAvPlxuICAgICAgICA8L1RoZW1lUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH07XG5cbiAgICBpdCgncmVuZGVycyB3aXRob3V0IGNyYXNoaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNhdGVnb3JpemUoKTtcbiAgICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIHJhdGlvbmFsZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyfSA9IHJlbmRlckNhdGVnb3JpemUoeyByYXRpb25hbGU6ICdUaGlzIGlzIHJhdGlvbmFsZScgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aCB0ZWFjaGVySW5zdHJ1Y3Rpb25zJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNhdGVnb3JpemUoeyB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnVGhlc2UgYXJlIHRlYWNoZXIgaW5zdHJ1Y3Rpb25zJyB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdldmVudHMnLCAoKSA9PiB7XG4gICAgbGV0IGVsO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAvLyBSZWdpc3RlciBjdXN0b20gZWxlbWVudCBpZiBub3QgYWxyZWFkeSByZWdpc3RlcmVkXG4gICAgICBpZiAoIWN1c3RvbUVsZW1lbnRzLmdldCgnY2F0ZWdvcml6ZS1lbCcpKSB7XG4gICAgICAgIGN1c3RvbUVsZW1lbnRzLmRlZmluZSgnY2F0ZWdvcml6ZS1lbCcsIENhdGVnb3JpemUpO1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgZWxlbWVudCB2aWEgY3JlYXRlRWxlbWVudCB0byBwcm9wZXJseSBpbml0aWFsaXplIGl0XG4gICAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhdGVnb3JpemUtZWwnKTtcblxuICAgICAgLy8gTW9jayBkaXNwYXRjaEV2ZW50XG4gICAgICBlbC5kaXNwYXRjaEV2ZW50ID0gamVzdC5mbigpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ21vZGVsJywgKCkgPT4ge1xuICAgICAgaXQoJ2Rpc3BhdGNoZXMgbW9kZWwgc2V0IGV2ZW50JywgKCkgPT4ge1xuICAgICAgICBlbC5tb2RlbCA9IHt9O1xuICAgICAgICBleHBlY3QoZWwuZGlzcGF0Y2hFdmVudCkudG9CZUNhbGxlZFdpdGgobmV3IE1vZGVsU2V0RXZlbnQoJ2NhdGVnb3JpemUtZWwnLCBmYWxzZSwgdHJ1ZSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY2hhbmdlQW5zd2VycycsICgpID0+IHtcbiAgICAgIGl0KCdkaXNwYXRjaGVzIHNlc3Npb24gY2hhbmdlZCBldmVudCAtIGFkZCBhbnN3ZXInLCAoKSA9PiB7XG4gICAgICAgIGVsLm1vZGVsID0ge1xuICAgICAgICAgIHJlc3BvbnNlQXJlYXNUb0JlRmlsbGVkOiAyLFxuICAgICAgICAgIGhhc1VucGxhY2VkQ2hvaWNlczogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgZWwuc2Vzc2lvbiA9IHsgYW5zd2VyczogW10gfTtcbiAgICAgICAgZWwuY2hhbmdlQW5zd2VycyhbeyBjYXRlZ29yeTogJ2lkLWZydWl0cycsIGNob2ljZXM6IFsnYXBwbGUnXSB9XSk7XG4gICAgICAgIGV4cGVjdChlbC5kaXNwYXRjaEV2ZW50KS50b0JlQ2FsbGVkV2l0aChuZXcgU2Vzc2lvbkNoYW5nZWRFdmVudCgnY2F0ZWdvcml6ZS1lbCcsIGZhbHNlKSk7XG4gICAgICAgIGVsLmNoYW5nZUFuc3dlcnMoW1xuICAgICAgICAgIHsgY2F0ZWdvcnk6ICdpZC1mcnVpdHMnLCBjaG9pY2VzOiBbJ2FwcGxlJ10gfSxcbiAgICAgICAgICB7IGNhdGVnb3J5OiAnaWQtdmVnZXRhYmxlcycsIGNob2ljZXM6IFsnY2Fycm90J10gfSxcbiAgICAgICAgXSk7XG4gICAgICAgIGV4cGVjdChlbC5kaXNwYXRjaEV2ZW50KS50b0JlQ2FsbGVkV2l0aChuZXcgU2Vzc2lvbkNoYW5nZWRFdmVudCgnY2F0ZWdvcml6ZS1lbCcsIHRydWUpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZGlzcGF0Y2hlcyBzZXNzaW9uIGNoYW5nZWQgZXZlbnQgLSByZW1vdmUgYW5zd2VyJywgKCkgPT4ge1xuICAgICAgICBlbC5tb2RlbCA9IHtcbiAgICAgICAgICByZXNwb25zZUFyZWFzVG9CZUZpbGxlZDogMSxcbiAgICAgICAgfTtcbiAgICAgICAgZWwuc2Vzc2lvbiA9IHsgYW5zd2VyczogW3sgY2F0ZWdvcnk6ICdpZC1mcnVpdHMnLCBjaG9pY2VzOiBbJ2FwcGxlJ10gfV0gfTtcbiAgICAgICAgZWwuY2hhbmdlQW5zd2VycyhbeyBjYXRlZ29yeTogJ2lkLWZydWl0cycsIGNob2ljZXM6IFtdIH1dKTtcbiAgICAgICAgZXhwZWN0KGVsLmRpc3BhdGNoRXZlbnQpLnRvQmVDYWxsZWRXaXRoKG5ldyBTZXNzaW9uQ2hhbmdlZEV2ZW50KCdjYXRlZ29yaXplLWVsJywgZmFsc2UpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZGlzcGF0Y2hlcyBzZXNzaW9uIGNoYW5nZWQgZXZlbnQgLSBhZGQvcmVtb3ZlIGFuc3dlcicsICgpID0+IHtcbiAgICAgICAgZWwubW9kZWwgPSB7XG4gICAgICAgICAgcmVzcG9uc2VBcmVhc1RvQmVGaWxsZWQ6IDIsXG4gICAgICAgICAgaGFzVW5wbGFjZWRDaG9pY2VzOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICBlbC5zZXNzaW9uID0ge1xuICAgICAgICAgIGFuc3dlcnM6IFtcbiAgICAgICAgICAgIHsgY2F0ZWdvcnk6ICdpZC1mcnVpdHMnLCBjaG9pY2VzOiBbJ2FwcGxlJ10gfSxcbiAgICAgICAgICAgIHsgY2F0ZWdvcnk6ICdpZC12ZWdldGFibGVzJywgY2hvaWNlczogWydjYXJyb3QnLCAnb25pb24nXSB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICAgIGVsLmNoYW5nZUFuc3dlcnMoW1xuICAgICAgICAgIHsgY2F0ZWdvcnk6ICdpZC1mcnVpdHMnLCBjaG9pY2VzOiBbJ2FwcGxlJ10gfSxcbiAgICAgICAgICB7IGNhdGVnb3J5OiAnaWQtdmVnZXRhYmxlcycsIGNob2ljZXM6IFsnY2Fycm90J10gfSxcbiAgICAgICAgXSk7XG4gICAgICAgIGV4cGVjdChlbC5kaXNwYXRjaEV2ZW50KS50b0JlQ2FsbGVkV2l0aChuZXcgU2Vzc2lvbkNoYW5nZWRFdmVudCgnY2F0ZWdvcml6ZS1lbCcsIHRydWUpKTtcblxuICAgICAgICBlbC5jaGFuZ2VBbnN3ZXJzKFtcbiAgICAgICAgICB7IGNhdGVnb3J5OiAnaWQtZnJ1aXRzJywgY2hvaWNlczogWydhcHBsZSddIH0sXG4gICAgICAgICAgeyBjYXRlZ29yeTogJ2lkLXZlZ2V0YWJsZXMnLCBjaG9pY2VzOiBbXSB9LFxuICAgICAgICBdKTtcbiAgICAgICAgZXhwZWN0KGVsLmRpc3BhdGNoRXZlbnQpLnRvQmVDYWxsZWRXaXRoKG5ldyBTZXNzaW9uQ2hhbmdlZEV2ZW50KCdjYXRlZ29yaXplLWVsJywgZmFsc2UpKTtcblxuICAgICAgICBlbC5jaGFuZ2VBbnN3ZXJzKFtcbiAgICAgICAgICB7IGNhdGVnb3J5OiAnaWQtZnJ1aXRzJywgY2hvaWNlczogW10gfSxcbiAgICAgICAgICB7IGNhdGVnb3J5OiAnaWQtdmVnZXRhYmxlcycsIGNob2ljZXM6IFtdIH0sXG4gICAgICAgIF0pO1xuICAgICAgICBleHBlY3QoZWwuZGlzcGF0Y2hFdmVudCkudG9CZUNhbGxlZFdpdGgobmV3IFNlc3Npb25DaGFuZ2VkRXZlbnQoJ2NhdGVnb3JpemUtZWwnLCBmYWxzZSkpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkaXNwYXRjaGVzIHNlc3Npb24gY2hhbmdlZCBldmVudCAtIGFkZC9yZW1vdmUgYW5zd2VyIC0gbm8gdW5wbGFjZWQgY2hvaWNlcycsICgpID0+IHtcbiAgICAgICAgZWwubW9kZWwgPSB7XG4gICAgICAgICAgcmVzcG9uc2VBcmVhc1RvQmVGaWxsZWQ6IDIsXG4gICAgICAgICAgaGFzVW5wbGFjZWRDaG9pY2VzOiBmYWxzZSxcbiAgICAgICAgICBwb3NzaWJsZVJlc3BvbnNlczogW1snYXBwbGUnLCAnY2Fycm90JywgJ29uaW9uJ11dLFxuICAgICAgICB9O1xuICAgICAgICBlbC5zZXNzaW9uID0ge1xuICAgICAgICAgIGFuc3dlcnM6IFtcbiAgICAgICAgICAgIHsgY2F0ZWdvcnk6ICdpZC1mcnVpdHMnLCBjaG9pY2VzOiBbJ2FwcGxlJ10gfSxcbiAgICAgICAgICAgIHsgY2F0ZWdvcnk6ICdpZC12ZWdldGFibGVzJywgY2hvaWNlczogW10gfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuXG4gICAgICAgIGVsLmNoYW5nZUFuc3dlcnMoW1xuICAgICAgICAgIHsgY2F0ZWdvcnk6ICdpZC1mcnVpdHMnLCBjaG9pY2VzOiBbJ2FwcGxlJ10gfSxcbiAgICAgICAgICB7IGNhdGVnb3J5OiAnaWQtdmVnZXRhYmxlcycsIGNob2ljZXM6IFsnY2Fycm90J10gfSxcbiAgICAgICAgXSk7XG4gICAgICAgIGV4cGVjdChlbC5kaXNwYXRjaEV2ZW50KS50b0JlQ2FsbGVkV2l0aChuZXcgU2Vzc2lvbkNoYW5nZWRFdmVudCgnY2F0ZWdvcml6ZS1lbCcsIGZhbHNlKSk7XG5cbiAgICAgICAgZWwuY2hhbmdlQW5zd2VycyhbXG4gICAgICAgICAgeyBjYXRlZ29yeTogJ2lkLWZydWl0cycsIGNob2ljZXM6IFsnYXBwbGUnXSB9LFxuICAgICAgICAgIHsgY2F0ZWdvcnk6ICdpZC12ZWdldGFibGVzJywgY2hvaWNlczogWydjYXJyb3QnLCAnb25pb24nXSB9LFxuICAgICAgICBdKTtcbiAgICAgICAgZXhwZWN0KGVsLmRpc3BhdGNoRXZlbnQpLnRvQmVDYWxsZWRXaXRoKG5ldyBTZXNzaW9uQ2hhbmdlZEV2ZW50KCdjYXRlZ29yaXplLWVsJywgdHJ1ZSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLGdCQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFMLE9BQUE7QUFFQU0sSUFBSSxDQUFDQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsT0FBTztFQUFFQyxVQUFVLEVBQUVGLElBQUksQ0FBQ0csRUFBRSxDQUFDO0FBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkUsTUFBTUMsVUFBVSxHQUFHSixJQUFJLENBQUNHLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLE1BQU1FLFdBQVcsR0FBR0wsSUFBSSxDQUFDRyxFQUFFLENBQUMsQ0FBQztBQUM3QkgsSUFBSSxDQUFDQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsT0FBTztFQUNuQ0ssVUFBVSxFQUFFTixJQUFJLENBQUNHLEVBQUUsQ0FBQyxPQUFPO0lBQ3pCSSxNQUFNLEVBQUVILFVBQVU7SUFDbEJJLE9BQU8sRUFBRUg7RUFDWCxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQztBQUVILE1BQU1JLEtBQUssR0FBRyxJQUFBQyxtQkFBVyxFQUFDLENBQUM7QUFF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
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _react = _interopRequireDefault(require("react"));
|
|
5
|
+
var _react2 = require("@testing-library/react");
|
|
6
|
+
var _styles = require("@mui/material/styles");
|
|
7
|
+
var _categories = require("../categories");
|
|
8
|
+
jest.mock('../category', () => ({
|
|
9
|
+
__esModule: true,
|
|
10
|
+
default: ({
|
|
11
|
+
id,
|
|
12
|
+
label
|
|
13
|
+
}) => /*#__PURE__*/_react.default.createElement("div", {
|
|
14
|
+
"data-testid": `category-${id}`
|
|
15
|
+
}, label),
|
|
16
|
+
CategoryType: {}
|
|
17
|
+
}));
|
|
18
|
+
jest.mock('../grid-content', () => ({
|
|
19
|
+
__esModule: true,
|
|
20
|
+
default: ({
|
|
21
|
+
children,
|
|
22
|
+
columns
|
|
23
|
+
}) => /*#__PURE__*/_react.default.createElement("div", {
|
|
24
|
+
"data-testid": "grid-content",
|
|
25
|
+
"data-columns": columns
|
|
26
|
+
}, children)
|
|
27
|
+
}));
|
|
28
|
+
const theme = (0, _styles.createTheme)();
|
|
29
|
+
describe('Categories', () => {
|
|
30
|
+
const renderCategories = extras => {
|
|
31
|
+
const defaults = {
|
|
32
|
+
classes: {},
|
|
33
|
+
categories: [{
|
|
34
|
+
choices: [],
|
|
35
|
+
id: '1',
|
|
36
|
+
label: 'Category One'
|
|
37
|
+
}],
|
|
38
|
+
onDropChoice: jest.fn(),
|
|
39
|
+
onRemoveChoice: jest.fn(),
|
|
40
|
+
id: '1',
|
|
41
|
+
label: 'Category Label',
|
|
42
|
+
grid: {
|
|
43
|
+
columns: 1,
|
|
44
|
+
rows: 1
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
const props = {
|
|
48
|
+
...defaults,
|
|
49
|
+
...extras
|
|
50
|
+
};
|
|
51
|
+
return (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_styles.ThemeProvider, {
|
|
52
|
+
theme: theme
|
|
53
|
+
}, /*#__PURE__*/_react.default.createElement(_categories.Categories, props)));
|
|
54
|
+
};
|
|
55
|
+
describe('rendering', () => {
|
|
56
|
+
it('renders without crashing', () => {
|
|
57
|
+
const {
|
|
58
|
+
container
|
|
59
|
+
} = renderCategories();
|
|
60
|
+
expect(container).toBeInTheDocument();
|
|
61
|
+
});
|
|
62
|
+
it('renders when disabled', () => {
|
|
63
|
+
const {
|
|
64
|
+
container
|
|
65
|
+
} = renderCategories({
|
|
66
|
+
disabled: true
|
|
67
|
+
});
|
|
68
|
+
expect(container).toBeInTheDocument();
|
|
69
|
+
});
|
|
70
|
+
it('renders the grid content wrapper', () => {
|
|
71
|
+
renderCategories();
|
|
72
|
+
expect(_react2.screen.getByTestId('grid-content')).toBeInTheDocument();
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
describe('category labels', () => {
|
|
76
|
+
it('displays category labels', () => {
|
|
77
|
+
renderCategories({
|
|
78
|
+
categories: [{
|
|
79
|
+
id: '1',
|
|
80
|
+
label: 'First Category',
|
|
81
|
+
choices: []
|
|
82
|
+
}, {
|
|
83
|
+
id: '2',
|
|
84
|
+
label: 'Second Category',
|
|
85
|
+
choices: []
|
|
86
|
+
}]
|
|
87
|
+
});
|
|
88
|
+
// Multiple elements may contain the same text (label + category mock)
|
|
89
|
+
expect(_react2.screen.getAllByText('First Category').length).toBeGreaterThan(0);
|
|
90
|
+
expect(_react2.screen.getAllByText('Second Category').length).toBeGreaterThan(0);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
describe('categories per row', () => {
|
|
94
|
+
it('respects categoriesPerRow setting', () => {
|
|
95
|
+
renderCategories({
|
|
96
|
+
categories: [{
|
|
97
|
+
id: '1',
|
|
98
|
+
label: 'Cat 1',
|
|
99
|
+
choices: []
|
|
100
|
+
}, {
|
|
101
|
+
id: '2',
|
|
102
|
+
label: 'Cat 2',
|
|
103
|
+
choices: []
|
|
104
|
+
}],
|
|
105
|
+
model: {
|
|
106
|
+
categoriesPerRow: 2
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
const grid = _react2.screen.getByTestId('grid-content');
|
|
110
|
+
expect(grid).toHaveAttribute('data-columns', '2');
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
describe('row labels', () => {
|
|
114
|
+
it('renders row labels when provided', () => {
|
|
115
|
+
renderCategories({
|
|
116
|
+
categories: [{
|
|
117
|
+
id: '1',
|
|
118
|
+
label: 'Category',
|
|
119
|
+
choices: []
|
|
120
|
+
}],
|
|
121
|
+
rowLabels: ['Row 1 Label']
|
|
122
|
+
});
|
|
123
|
+
expect(_react2.screen.getByText('Row 1 Label')).toBeInTheDocument();
|
|
124
|
+
});
|
|
125
|
+
it('does not render row labels when empty', () => {
|
|
126
|
+
renderCategories({
|
|
127
|
+
categories: [{
|
|
128
|
+
id: '1',
|
|
129
|
+
label: 'Category',
|
|
130
|
+
choices: []
|
|
131
|
+
}],
|
|
132
|
+
rowLabels: []
|
|
133
|
+
});
|
|
134
|
+
expect(_react2.screen.queryByText('Row 1 Label')).not.toBeInTheDocument();
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfc3R5bGVzIiwiX2NhdGVnb3JpZXMiLCJqZXN0IiwibW9jayIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaWQiLCJsYWJlbCIsImNyZWF0ZUVsZW1lbnQiLCJDYXRlZ29yeVR5cGUiLCJjaGlsZHJlbiIsImNvbHVtbnMiLCJ0aGVtZSIsImNyZWF0ZVRoZW1lIiwiZGVzY3JpYmUiLCJyZW5kZXJDYXRlZ29yaWVzIiwiZXh0cmFzIiwiZGVmYXVsdHMiLCJjbGFzc2VzIiwiY2F0ZWdvcmllcyIsImNob2ljZXMiLCJvbkRyb3BDaG9pY2UiLCJmbiIsIm9uUmVtb3ZlQ2hvaWNlIiwiZ3JpZCIsInJvd3MiLCJwcm9wcyIsInJlbmRlciIsIlRoZW1lUHJvdmlkZXIiLCJDYXRlZ29yaWVzIiwiaXQiLCJjb250YWluZXIiLCJleHBlY3QiLCJ0b0JlSW5UaGVEb2N1bWVudCIsImRpc2FibGVkIiwic2NyZWVuIiwiZ2V0QnlUZXN0SWQiLCJnZXRBbGxCeVRleHQiLCJsZW5ndGgiLCJ0b0JlR3JlYXRlclRoYW4iLCJtb2RlbCIsImNhdGVnb3JpZXNQZXJSb3ciLCJ0b0hhdmVBdHRyaWJ1dGUiLCJyb3dMYWJlbHMiLCJnZXRCeVRleHQiLCJxdWVyeUJ5VGV4dCIsIm5vdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jYXRlZ29yaXplL19fdGVzdHNfXy9jYXRlZ29yaWVzLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIsIHNjcmVlbiB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuaW1wb3J0IHsgVGhlbWVQcm92aWRlciwgY3JlYXRlVGhlbWUgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcyc7XG5pbXBvcnQgeyBDYXRlZ29yaWVzIH0gZnJvbSAnLi4vY2F0ZWdvcmllcyc7XG5cbmplc3QubW9jaygnLi4vY2F0ZWdvcnknLCAoKSA9PiAoe1xuICBfX2VzTW9kdWxlOiB0cnVlLFxuICBkZWZhdWx0OiAoeyBpZCwgbGFiZWwgfSkgPT4gPGRpdiBkYXRhLXRlc3RpZD17YGNhdGVnb3J5LSR7aWR9YH0+e2xhYmVsfTwvZGl2PixcbiAgQ2F0ZWdvcnlUeXBlOiB7fSxcbn0pKTtcblxuamVzdC5tb2NrKCcuLi9ncmlkLWNvbnRlbnQnLCAoKSA9PiAoe1xuICBfX2VzTW9kdWxlOiB0cnVlLFxuICBkZWZhdWx0OiAoeyBjaGlsZHJlbiwgY29sdW1ucyB9KSA9PiAoXG4gICAgPGRpdiBkYXRhLXRlc3RpZD1cImdyaWQtY29udGVudFwiIGRhdGEtY29sdW1ucz17Y29sdW1uc30+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICksXG59KSk7XG5cbmNvbnN0IHRoZW1lID0gY3JlYXRlVGhlbWUoKTtcblxuZGVzY3JpYmUoJ0NhdGVnb3JpZXMnLCAoKSA9PiB7XG4gIGNvbnN0IHJlbmRlckNhdGVnb3JpZXMgPSAoZXh0cmFzKSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICBjbGFzc2VzOiB7fSxcbiAgICAgIGNhdGVnb3JpZXM6IFt7IGNob2ljZXM6IFtdLCBpZDogJzEnLCBsYWJlbDogJ0NhdGVnb3J5IE9uZScgfV0sXG4gICAgICBvbkRyb3BDaG9pY2U6IGplc3QuZm4oKSxcbiAgICAgIG9uUmVtb3ZlQ2hvaWNlOiBqZXN0LmZuKCksXG4gICAgICBpZDogJzEnLFxuICAgICAgbGFiZWw6ICdDYXRlZ29yeSBMYWJlbCcsXG4gICAgICBncmlkOiB7IGNvbHVtbnM6IDEsIHJvd3M6IDEgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcHJvcHMgPSB7IC4uLmRlZmF1bHRzLCAuLi5leHRyYXMgfTtcbiAgICByZXR1cm4gcmVuZGVyKFxuICAgICAgPFRoZW1lUHJvdmlkZXIgdGhlbWU9e3RoZW1lfT5cbiAgICAgICAgPENhdGVnb3JpZXMgey4uLnByb3BzfSAvPlxuICAgICAgPC9UaGVtZVByb3ZpZGVyPlxuICAgICk7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ3JlbmRlcmluZycsICgpID0+IHtcbiAgICBpdCgncmVuZGVycyB3aXRob3V0IGNyYXNoaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNhdGVnb3JpZXMoKTtcbiAgICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aGVuIGRpc2FibGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNhdGVnb3JpZXMoeyBkaXNhYmxlZDogdHJ1ZSB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB0aGUgZ3JpZCBjb250ZW50IHdyYXBwZXInLCAoKSA9PiB7XG4gICAgICByZW5kZXJDYXRlZ29yaWVzKCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGVzdElkKCdncmlkLWNvbnRlbnQnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NhdGVnb3J5IGxhYmVscycsICgpID0+IHtcbiAgICBpdCgnZGlzcGxheXMgY2F0ZWdvcnkgbGFiZWxzJywgKCkgPT4ge1xuICAgICAgcmVuZGVyQ2F0ZWdvcmllcyh7XG4gICAgICAgIGNhdGVnb3JpZXM6IFtcbiAgICAgICAgICB7IGlkOiAnMScsIGxhYmVsOiAnRmlyc3QgQ2F0ZWdvcnknLCBjaG9pY2VzOiBbXSB9LFxuICAgICAgICAgIHsgaWQ6ICcyJywgbGFiZWw6ICdTZWNvbmQgQ2F0ZWdvcnknLCBjaG9pY2VzOiBbXSB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgICAvLyBNdWx0aXBsZSBlbGVtZW50cyBtYXkgY29udGFpbiB0aGUgc2FtZSB0ZXh0IChsYWJlbCArIGNhdGVnb3J5IG1vY2spXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEFsbEJ5VGV4dCgnRmlyc3QgQ2F0ZWdvcnknKS5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QWxsQnlUZXh0KCdTZWNvbmQgQ2F0ZWdvcnknKS5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NhdGVnb3JpZXMgcGVyIHJvdycsICgpID0+IHtcbiAgICBpdCgncmVzcGVjdHMgY2F0ZWdvcmllc1BlclJvdyBzZXR0aW5nJywgKCkgPT4ge1xuICAgICAgcmVuZGVyQ2F0ZWdvcmllcyh7XG4gICAgICAgIGNhdGVnb3JpZXM6IFtcbiAgICAgICAgICB7IGlkOiAnMScsIGxhYmVsOiAnQ2F0IDEnLCBjaG9pY2VzOiBbXSB9LFxuICAgICAgICAgIHsgaWQ6ICcyJywgbGFiZWw6ICdDYXQgMicsIGNob2ljZXM6IFtdIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG1vZGVsOiB7IGNhdGVnb3JpZXNQZXJSb3c6IDIgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZ3JpZCA9IHNjcmVlbi5nZXRCeVRlc3RJZCgnZ3JpZC1jb250ZW50Jyk7XG4gICAgICBleHBlY3QoZ3JpZCkudG9IYXZlQXR0cmlidXRlKCdkYXRhLWNvbHVtbnMnLCAnMicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncm93IGxhYmVscycsICgpID0+IHtcbiAgICBpdCgncmVuZGVycyByb3cgbGFiZWxzIHdoZW4gcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICByZW5kZXJDYXRlZ29yaWVzKHtcbiAgICAgICAgY2F0ZWdvcmllczogW3sgaWQ6ICcxJywgbGFiZWw6ICdDYXRlZ29yeScsIGNob2ljZXM6IFtdIH1dLFxuICAgICAgICByb3dMYWJlbHM6IFsnUm93IDEgTGFiZWwnXSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ1JvdyAxIExhYmVsJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgcmVuZGVyIHJvdyBsYWJlbHMgd2hlbiBlbXB0eScsICgpID0+IHtcbiAgICAgIHJlbmRlckNhdGVnb3JpZXMoe1xuICAgICAgICBjYXRlZ29yaWVzOiBbeyBpZDogJzEnLCBsYWJlbDogJ0NhdGVnb3J5JywgY2hvaWNlczogW10gfV0sXG4gICAgICAgIHJvd0xhYmVsczogW10sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChzY3JlZW4ucXVlcnlCeVRleHQoJ1JvdyAxIExhYmVsJykpLm5vdC50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxXQUFBLEdBQUFILE9BQUE7QUFFQUksSUFBSSxDQUFDQyxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU87RUFDOUJDLFVBQVUsRUFBRSxJQUFJO0VBQ2hCQyxPQUFPLEVBQUVBLENBQUM7SUFBRUMsRUFBRTtJQUFFQztFQUFNLENBQUMsa0JBQUtYLE1BQUEsQ0FBQVMsT0FBQSxDQUFBRyxhQUFBO0lBQUssZUFBYSxZQUFZRixFQUFFO0VBQUcsR0FBRUMsS0FBVyxDQUFDO0VBQzdFRSxZQUFZLEVBQUUsQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQztBQUVIUCxJQUFJLENBQUNDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxPQUFPO0VBQ2xDQyxVQUFVLEVBQUUsSUFBSTtFQUNoQkMsT0FBTyxFQUFFQSxDQUFDO0lBQUVLLFFBQVE7SUFBRUM7RUFBUSxDQUFDLGtCQUM3QmYsTUFBQSxDQUFBUyxPQUFBLENBQUFHLGFBQUE7SUFBSyxlQUFZLGNBQWM7SUFBQyxnQkFBY0c7RUFBUSxHQUNuREQsUUFDRTtBQUVULENB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QUMsbUNBQW1DLEVBQUUsTUFBTTtNQUM1Q2YsZ0JBQWdCLENBQUM7UUFDZkksVUFBVSxFQUFFLENBQ1Y7VUFBRWIsRUFBRSxFQUFFLEdBQUc7VUFBRUMsS0FBSyxFQUFFLE9BQU87VUFBRWEsT0FBTyxFQUFFO1FBQUcsQ0FBQyxFQUN4QztVQUFFZCxFQUFFLEVBQUUsR0FBRztVQUFFQyxLQUFLLEVBQUUsT0FBTztVQUFFYSxPQUFPLEVBQUU7UUFBRyxDQUFDLENBQ3pDO1FBQ0RvQixLQUFLLEVBQUU7VUFBRUMsZ0JBQWdCLEVBQUU7UUFBRTtNQUMvQixDQUFDLENBQUM7TUFDRixNQUFNakIsSUFBSSxHQUFHVyxjQUFNLENBQUNDLFdBQVcsQ0FBQyxjQUFjLENBQUM7TUFDL0NKLE1BQU0sQ0FBQ1IsSUFBSSxDQUFDLENBQUNrQixlQUFlLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQztJQUNuRCxDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7RUFFRjVCLFFBQVEsQ0FBQyxZQUFZLEVBQUUsTUFBTTtJQUMzQmdCLEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxNQUFNO01BQzNDZixnQkFBZ0IsQ0FBQztRQUNmSSxVQUFVLEVBQUUsQ0FBQztVQUFFYixFQUFFLEVBQUUsR0FBRztVQUFFQyxLQUFLLEVBQUUsVUFBVTtVQUFFYSxPQUFPLEVBQUU7UUFBRyxDQUFDLENBQUM7UUFDekR1QixTQUFTLEVBQUUsQ0FBQyxhQUFhO01BQzNCLENBQUMsQ0FBQztNQUNGWCxNQUFNLENBQUNHLGNBQU0sQ0FBQ1MsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUNYLGlCQUFpQixDQUFDLENBQUM7SUFDN0QsQ0FBQyxDQUFDO0lBRUZILEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxNQUFNO01BQ2hEZixnQkFBZ0IsQ0FBQztRQUNmSSxVQUFVLEVBQUUsQ0FBQztVQUFFYixFQUFFLEVBQUUsR0FBRztVQUFFQyxLQUFLLEVBQUUsVUFBVTtVQUFFYSxPQUFPLEVBQUU7UUFBRyxDQUFDLENBQUM7UUFDekR1QixTQUFTLEVBQUU7TUFDYixDQUFDLENBQUM7TUFDRlgsTUFBTSxDQUFDRyxjQUFNLENBQUNVLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDQyxHQUFHLENBQUNiLGlCQUFpQixDQUFDLENBQUM7SUFDbkUsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _react = _interopRequireDefault(require("react"));
|
|
5
|
+
var _react2 = require("@testing-library/react");
|
|
6
|
+
var _styles = require("@mui/material/styles");
|
|
7
|
+
var _category = require("../category");
|
|
8
|
+
jest.mock('../droppable-placeholder', () => ({
|
|
9
|
+
__esModule: true,
|
|
10
|
+
default: ({
|
|
11
|
+
children,
|
|
12
|
+
id,
|
|
13
|
+
correct
|
|
14
|
+
}) => /*#__PURE__*/_react.default.createElement("div", {
|
|
15
|
+
"data-testid": `placeholder-${id}`,
|
|
16
|
+
"data-correct": correct !== undefined ? String(correct) : undefined
|
|
17
|
+
}, children)
|
|
18
|
+
}));
|
|
19
|
+
jest.mock('../choice', () => ({
|
|
20
|
+
__esModule: true,
|
|
21
|
+
default: ({
|
|
22
|
+
id,
|
|
23
|
+
label,
|
|
24
|
+
categoryId
|
|
25
|
+
}) => /*#__PURE__*/_react.default.createElement("div", {
|
|
26
|
+
"data-testid": `choice-${id}`,
|
|
27
|
+
"data-category": categoryId
|
|
28
|
+
}, label)
|
|
29
|
+
}));
|
|
30
|
+
const theme = (0, _styles.createTheme)();
|
|
31
|
+
describe('Category', () => {
|
|
32
|
+
const renderCategory = extras => {
|
|
33
|
+
const defaults = {
|
|
34
|
+
classes: {
|
|
35
|
+
label: 'label',
|
|
36
|
+
incorrect: 'incorrect',
|
|
37
|
+
placeholder: 'placeholder',
|
|
38
|
+
category: 'category'
|
|
39
|
+
},
|
|
40
|
+
choices: [],
|
|
41
|
+
id: 'category-1',
|
|
42
|
+
label: 'Category Label',
|
|
43
|
+
grid: {
|
|
44
|
+
columns: 1,
|
|
45
|
+
rows: 1
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const props = {
|
|
49
|
+
...defaults,
|
|
50
|
+
...extras
|
|
51
|
+
};
|
|
52
|
+
return (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_styles.ThemeProvider, {
|
|
53
|
+
theme: theme
|
|
54
|
+
}, /*#__PURE__*/_react.default.createElement(_category.Category, props)));
|
|
55
|
+
};
|
|
56
|
+
describe('rendering', () => {
|
|
57
|
+
it('renders without crashing', () => {
|
|
58
|
+
const {
|
|
59
|
+
container
|
|
60
|
+
} = renderCategory();
|
|
61
|
+
expect(container).toBeInTheDocument();
|
|
62
|
+
});
|
|
63
|
+
it('renders the placeholder with correct id', () => {
|
|
64
|
+
renderCategory({
|
|
65
|
+
id: 'test-category'
|
|
66
|
+
});
|
|
67
|
+
expect(_react2.screen.getByTestId('placeholder-test-category')).toBeInTheDocument();
|
|
68
|
+
});
|
|
69
|
+
it('renders when disabled', () => {
|
|
70
|
+
const {
|
|
71
|
+
container
|
|
72
|
+
} = renderCategory({
|
|
73
|
+
disabled: true
|
|
74
|
+
});
|
|
75
|
+
expect(container).toBeInTheDocument();
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe('choices rendering', () => {
|
|
79
|
+
it('renders choices within the category', () => {
|
|
80
|
+
renderCategory({
|
|
81
|
+
id: 'cat-1',
|
|
82
|
+
choices: [{
|
|
83
|
+
id: 'choice-1',
|
|
84
|
+
label: 'First Choice'
|
|
85
|
+
}, {
|
|
86
|
+
id: 'choice-2',
|
|
87
|
+
label: 'Second Choice'
|
|
88
|
+
}]
|
|
89
|
+
});
|
|
90
|
+
expect(_react2.screen.getByTestId('choice-choice-1')).toBeInTheDocument();
|
|
91
|
+
expect(_react2.screen.getByTestId('choice-choice-2')).toBeInTheDocument();
|
|
92
|
+
expect(_react2.screen.getByText('First Choice')).toBeInTheDocument();
|
|
93
|
+
expect(_react2.screen.getByText('Second Choice')).toBeInTheDocument();
|
|
94
|
+
});
|
|
95
|
+
it('renders empty category when no choices', () => {
|
|
96
|
+
renderCategory({
|
|
97
|
+
choices: []
|
|
98
|
+
});
|
|
99
|
+
expect(_react2.screen.queryByTestId(/^choice-/)).not.toBeInTheDocument();
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
describe('correctness state', () => {
|
|
103
|
+
// Note: StyledPlaceHolder uses shouldForwardProp to prevent 'correct' from being
|
|
104
|
+
// forwarded to the underlying component - it's only used for styling.
|
|
105
|
+
// We test that rendering doesn't crash with different correctness values.
|
|
106
|
+
it('renders correctly when correct=false (incorrect answer)', () => {
|
|
107
|
+
const {
|
|
108
|
+
container
|
|
109
|
+
} = renderCategory({
|
|
110
|
+
id: 'cat-1',
|
|
111
|
+
correct: false
|
|
112
|
+
});
|
|
113
|
+
expect(container).toBeInTheDocument();
|
|
114
|
+
expect(_react2.screen.getByTestId('placeholder-cat-1')).toBeInTheDocument();
|
|
115
|
+
});
|
|
116
|
+
it('renders correctly when correct=true (correct answer)', () => {
|
|
117
|
+
const {
|
|
118
|
+
container
|
|
119
|
+
} = renderCategory({
|
|
120
|
+
id: 'cat-1',
|
|
121
|
+
correct: true
|
|
122
|
+
});
|
|
123
|
+
expect(container).toBeInTheDocument();
|
|
124
|
+
expect(_react2.screen.getByTestId('placeholder-cat-1')).toBeInTheDocument();
|
|
125
|
+
});
|
|
126
|
+
it('renders correctly when correct is undefined', () => {
|
|
127
|
+
const {
|
|
128
|
+
container
|
|
129
|
+
} = renderCategory({
|
|
130
|
+
id: 'cat-1'
|
|
131
|
+
});
|
|
132
|
+
expect(container).toBeInTheDocument();
|
|
133
|
+
expect(_react2.screen.getByTestId('placeholder-cat-1')).toBeInTheDocument();
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfc3R5bGVzIiwiX2NhdGVnb3J5IiwiamVzdCIsIm1vY2siLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNoaWxkcmVuIiwiaWQiLCJjb3JyZWN0IiwiY3JlYXRlRWxlbWVudCIsInVuZGVmaW5lZCIsIlN0cmluZyIsImxhYmVsIiwiY2F0ZWdvcnlJZCIsInRoZW1lIiwiY3JlYXRlVGhlbWUiLCJkZXNjcmliZSIsInJlbmRlckNhdGVnb3J5IiwiZXh0cmFzIiwiZGVmYXVsdHMiLCJjbGFzc2VzIiwiaW5jb3JyZWN0IiwicGxhY2Vob2xkZXIiLCJjYXRlZ29yeSIsImNob2ljZXMiLCJncmlkIiwiY29sdW1ucyIsInJvd3MiLCJwcm9wcyIsInJlbmRlciIsIlRoZW1lUHJvdmlkZXIiLCJDYXRlZ29yeSIsIml0IiwiY29udGFpbmVyIiwiZXhwZWN0IiwidG9CZUluVGhlRG9jdW1lbnQiLCJzY3JlZW4iLCJnZXRCeVRlc3RJZCIsImRpc2FibGVkIiwiZ2V0QnlUZXh0IiwicXVlcnlCeVRlc3RJZCIsIm5vdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jYXRlZ29yaXplL19fdGVzdHNfXy9jYXRlZ29yeS50ZXN0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVuZGVyLCBzY3JlZW4gfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcbmltcG9ydCB7IFRoZW1lUHJvdmlkZXIsIGNyZWF0ZVRoZW1lIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnO1xuaW1wb3J0IHsgQ2F0ZWdvcnkgfSBmcm9tICcuLi9jYXRlZ29yeSc7XG5cbmplc3QubW9jaygnLi4vZHJvcHBhYmxlLXBsYWNlaG9sZGVyJywgKCkgPT4gKHtcbiAgX19lc01vZHVsZTogdHJ1ZSxcbiAgZGVmYXVsdDogKHsgY2hpbGRyZW4sIGlkLCBjb3JyZWN0IH0pID0+IChcbiAgICA8ZGl2IFxuICAgICAgZGF0YS10ZXN0aWQ9e2BwbGFjZWhvbGRlci0ke2lkfWB9IFxuICAgICAgZGF0YS1jb3JyZWN0PXtjb3JyZWN0ICE9PSB1bmRlZmluZWQgPyBTdHJpbmcoY29ycmVjdCkgOiB1bmRlZmluZWR9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApLFxufSkpO1xuamVzdC5tb2NrKCcuLi9jaG9pY2UnLCAoKSA9PiAoe1xuICBfX2VzTW9kdWxlOiB0cnVlLFxuICBkZWZhdWx0OiAoeyBpZCwgbGFiZWwsIGNhdGVnb3J5SWQgfSkgPT4gKFxuICAgIDxkaXYgZGF0YS10ZXN0aWQ9e2BjaG9pY2UtJHtpZH1gfSBkYXRhLWNhdGVnb3J5PXtjYXRlZ29yeUlkfT5cbiAgICAgIHtsYWJlbH1cbiAgICA8L2Rpdj5cbiAgKSxcbn0pKTtcblxuY29uc3QgdGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuXG5kZXNjcmliZSgnQ2F0ZWdvcnknLCAoKSA9PiB7XG4gIGNvbnN0IHJlbmRlckNhdGVnb3J5ID0gKGV4dHJhcykgPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgICAgY2xhc3Nlczoge1xuICAgICAgICBsYWJlbDogJ2xhYmVsJyxcbiAgICAgICAgaW5jb3JyZWN0OiAnaW5jb3JyZWN0JyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdwbGFjZWhvbGRlcicsXG4gICAgICAgIGNhdGVnb3J5OiAnY2F0ZWdvcnknLFxuICAgICAgfSxcbiAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgaWQ6ICdjYXRlZ29yeS0xJyxcbiAgICAgIGxhYmVsOiAnQ2F0ZWdvcnkgTGFiZWwnLFxuICAgICAgZ3JpZDogeyBjb2x1bW5zOiAxLCByb3dzOiAxIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHByb3BzID0geyAuLi5kZWZhdWx0cywgLi4uZXh0cmFzIH07XG4gICAgcmV0dXJuIHJlbmRlcihcbiAgICAgIDxUaGVtZVByb3ZpZGVyIHRoZW1lPXt0aGVtZX0+XG4gICAgICAgIDxDYXRlZ29yeSB7Li4ucHJvcHN9IC8+XG4gICAgICA8L1RoZW1lUHJvdmlkZXI+XG4gICAgKTtcbiAgfTtcblxuICBkZXNjcmliZSgncmVuZGVyaW5nJywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIHdpdGhvdXQgY3Jhc2hpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ2F0ZWdvcnkoKTtcbiAgICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB0aGUgcGxhY2Vob2xkZXIgd2l0aCBjb3JyZWN0IGlkJywgKCkgPT4ge1xuICAgICAgcmVuZGVyQ2F0ZWdvcnkoeyBpZDogJ3Rlc3QtY2F0ZWdvcnknIH0pO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRlc3RJZCgncGxhY2Vob2xkZXItdGVzdC1jYXRlZ29yeScpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2hlbiBkaXNhYmxlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDYXRlZ29yeSh7IGRpc2FibGVkOiB0cnVlIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lcikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Nob2ljZXMgcmVuZGVyaW5nJywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIGNob2ljZXMgd2l0aGluIHRoZSBjYXRlZ29yeScsICgpID0+IHtcbiAgICAgIHJlbmRlckNhdGVnb3J5KHtcbiAgICAgICAgaWQ6ICdjYXQtMScsXG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICB7IGlkOiAnY2hvaWNlLTEnLCBsYWJlbDogJ0ZpcnN0IENob2ljZScgfSxcbiAgICAgICAgICB7IGlkOiAnY2hvaWNlLTInLCBsYWJlbDogJ1NlY29uZCBDaG9pY2UnIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXN0SWQoJ2Nob2ljZS1jaG9pY2UtMScpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRlc3RJZCgnY2hvaWNlLWNob2ljZS0yJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnRmlyc3QgQ2hvaWNlJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnU2Vjb25kIENob2ljZScpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgZW1wdHkgY2F0ZWdvcnkgd2hlbiBubyBjaG9pY2VzJywgKCkgPT4ge1xuICAgICAgcmVuZGVyQ2F0ZWdvcnkoeyBjaG9pY2VzOiBbXSB9KTtcbiAgICAgIGV4cGVjdChzY3JlZW4ucXVlcnlCeVRlc3RJZCgvXmNob2ljZS0vKSkubm90LnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjb3JyZWN0bmVzcyBzdGF0ZScsICgpID0+IHtcbiAgICAvLyBOb3RlOiBTdHlsZWRQbGFjZUhvbGRlciB1c2VzIHNob3VsZEZvcndhcmRQcm9wIHRvIHByZXZlbnQgJ2NvcnJlY3QnIGZyb20gYmVpbmdcbiAgICAvLyBmb3J3YXJkZWQgdG8gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50IC0gaXQncyBvbmx5IHVzZWQgZm9yIHN0eWxpbmcuXG4gICAgLy8gV2UgdGVzdCB0aGF0IHJlbmRlcmluZyBkb2Vzbid0IGNyYXNoIHdpdGggZGlmZmVyZW50IGNvcnJlY3RuZXNzIHZhbHVlcy5cbiAgICBpdCgncmVuZGVycyBjb3JyZWN0bHkgd2hlbiBjb3JyZWN0PWZhbHNlIChpbmNvcnJlY3QgYW5zd2VyKScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDYXRlZ29yeSh7IGlkOiAnY2F0LTEnLCBjb3JyZWN0OiBmYWxzZSB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGVzdElkKCdwbGFjZWhvbGRlci1jYXQtMScpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgY29ycmVjdGx5IHdoZW4gY29ycmVjdD10cnVlIChjb3JyZWN0IGFuc3dlciknLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ2F0ZWdvcnkoeyBpZDogJ2NhdC0xJywgY29ycmVjdDogdHJ1ZSB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGVzdElkKCdwbGFjZWhvbGRlci1jYXQtMScpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgY29ycmVjdGx5IHdoZW4gY29ycmVjdCBpcyB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ2F0ZWdvcnkoeyBpZDogJ2NhdC0xJyB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGVzdElkKCdwbGFjZWhvbGRlci1jYXQtMScpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxTQUFBLEdBQUFILE9BQUE7QUFFQUksSUFBSSxDQUFDQyxJ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
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _react = _interopRequireDefault(require("react"));
|
|
5
|
+
var _react2 = require("@testing-library/react");
|
|
6
|
+
var _styles = require("@mui/material/styles");
|
|
7
|
+
var _choice = require("../choice");
|
|
8
|
+
jest.mock('@pie-lib/render-ui', () => ({
|
|
9
|
+
HtmlAndMath: props => /*#__PURE__*/_react.default.createElement("div", null, props.text),
|
|
10
|
+
color: {
|
|
11
|
+
text: () => '#000',
|
|
12
|
+
background: () => '#fff',
|
|
13
|
+
white: () => '#fff',
|
|
14
|
+
correct: () => '#00ff00',
|
|
15
|
+
incorrect: () => '#ff0000'
|
|
16
|
+
}
|
|
17
|
+
}));
|
|
18
|
+
const theme = (0, _styles.createTheme)();
|
|
19
|
+
describe('Layout', () => {
|
|
20
|
+
const renderLayout = extras => {
|
|
21
|
+
const defaults = {
|
|
22
|
+
classes: {},
|
|
23
|
+
content: 'Choice Content'
|
|
24
|
+
};
|
|
25
|
+
const props = {
|
|
26
|
+
...defaults,
|
|
27
|
+
...extras
|
|
28
|
+
};
|
|
29
|
+
return (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_styles.ThemeProvider, {
|
|
30
|
+
theme: theme
|
|
31
|
+
}, /*#__PURE__*/_react.default.createElement(_choice.Layout, props)));
|
|
32
|
+
};
|
|
33
|
+
describe('rendering', () => {
|
|
34
|
+
it('renders without crashing', () => {
|
|
35
|
+
const {
|
|
36
|
+
container
|
|
37
|
+
} = renderLayout();
|
|
38
|
+
expect(container).toBeInTheDocument();
|
|
39
|
+
});
|
|
40
|
+
it('renders the choice content', () => {
|
|
41
|
+
renderLayout({
|
|
42
|
+
content: 'Test Choice Text'
|
|
43
|
+
});
|
|
44
|
+
expect(_react2.screen.getByText('Test Choice Text')).toBeInTheDocument();
|
|
45
|
+
});
|
|
46
|
+
it('renders HTML content', () => {
|
|
47
|
+
renderLayout({
|
|
48
|
+
content: '<strong>Bold Text</strong>'
|
|
49
|
+
});
|
|
50
|
+
expect(_react2.screen.getByText('Bold Text')).toBeInTheDocument();
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
describe('states', () => {
|
|
54
|
+
it('renders when disabled', () => {
|
|
55
|
+
const {
|
|
56
|
+
container
|
|
57
|
+
} = renderLayout({
|
|
58
|
+
disabled: true
|
|
59
|
+
});
|
|
60
|
+
expect(container).toBeInTheDocument();
|
|
61
|
+
});
|
|
62
|
+
it('renders when correct', () => {
|
|
63
|
+
const {
|
|
64
|
+
container
|
|
65
|
+
} = renderLayout({
|
|
66
|
+
correct: true
|
|
67
|
+
});
|
|
68
|
+
expect(container).toBeInTheDocument();
|
|
69
|
+
});
|
|
70
|
+
it('renders when incorrect', () => {
|
|
71
|
+
const {
|
|
72
|
+
container
|
|
73
|
+
} = renderLayout({
|
|
74
|
+
correct: false
|
|
75
|
+
});
|
|
76
|
+
expect(container).toBeInTheDocument();
|
|
77
|
+
});
|
|
78
|
+
it('renders when dragging', () => {
|
|
79
|
+
const {
|
|
80
|
+
container
|
|
81
|
+
} = renderLayout({
|
|
82
|
+
isDragging: true
|
|
83
|
+
});
|
|
84
|
+
expect(container).toBeInTheDocument();
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfc3R5bGVzIiwiX2Nob2ljZSIsImplc3QiLCJtb2NrIiwiSHRtbEFuZE1hdGgiLCJwcm9wcyIsImRlZmF1bHQiLCJjcmVhdGVFbGVtZW50IiwidGV4dCIsImNvbG9yIiwiYmFja2dyb3VuZCIsIndoaXRlIiwiY29ycmVjdCIsImluY29ycmVjdCIsInRoZW1lIiwiY3JlYXRlVGhlbWUiLCJkZXNjcmliZSIsInJlbmRlckxheW91dCIsImV4dHJhcyIsImRlZmF1bHRzIiwiY2xhc3NlcyIsImNvbnRlbnQiLCJyZW5kZXIiLCJUaGVtZVByb3ZpZGVyIiwiTGF5b3V0IiwiaXQiLCJjb250YWluZXIiLCJleHBlY3QiLCJ0b0JlSW5UaGVEb2N1bWVudCIsInNjcmVlbiIsImdldEJ5VGV4dCIsImRpc2FibGVkIiwiaXNEcmFnZ2luZyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jYXRlZ29yaXplL19fdGVzdHNfXy9jaG9pY2UudGVzdC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlbmRlciwgc2NyZWVuIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgeyBUaGVtZVByb3ZpZGVyLCBjcmVhdGVUaGVtZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcbmltcG9ydCB7IExheW91dCB9IGZyb20gJy4uL2Nob2ljZSc7XG5cbmplc3QubW9jaygnQHBpZS1saWIvcmVuZGVyLXVpJywgKCkgPT4gKHtcbiAgSHRtbEFuZE1hdGg6IChwcm9wcykgPT4gPGRpdj57cHJvcHMudGV4dH08L2Rpdj4sXG4gIGNvbG9yOiB7XG4gICAgdGV4dDogKCkgPT4gJyMwMDAnLFxuICAgIGJhY2tncm91bmQ6ICgpID0+ICcjZmZmJyxcbiAgICB3aGl0ZTogKCkgPT4gJyNmZmYnLFxuICAgIGNvcnJlY3Q6ICgpID0+ICcjMDBmZjAwJyxcbiAgICBpbmNvcnJlY3Q6ICgpID0+ICcjZmYwMDAwJyxcbiAgfSxcbn0pKTtcblxuY29uc3QgdGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuXG5kZXNjcmliZSgnTGF5b3V0JywgKCkgPT4ge1xuICBjb25zdCByZW5kZXJMYXlvdXQgPSAoZXh0cmFzKSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICBjbGFzc2VzOiB7fSxcbiAgICAgIGNvbnRlbnQ6ICdDaG9pY2UgQ29udGVudCcsXG4gICAgfTtcbiAgICBjb25zdCBwcm9wcyA9IHsgLi4uZGVmYXVsdHMsIC4uLmV4dHJhcyB9O1xuICAgIHJldHVybiByZW5kZXIoXG4gICAgICA8VGhlbWVQcm92aWRlciB0aGVtZT17dGhlbWV9PlxuICAgICAgICA8TGF5b3V0IHsuLi5wcm9wc30gLz5cbiAgICAgIDwvVGhlbWVQcm92aWRlcj5cbiAgICApO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdyZW5kZXJpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgd2l0aG91dCBjcmFzaGluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJMYXlvdXQoKTtcbiAgICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB0aGUgY2hvaWNlIGNvbnRlbnQnLCAoKSA9PiB7XG4gICAgICByZW5kZXJMYXlvdXQoeyBjb250ZW50OiAnVGVzdCBDaG9pY2UgVGV4dCcgfSk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnVGVzdCBDaG9pY2UgVGV4dCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgSFRNTCBjb250ZW50JywgKCkgPT4ge1xuICAgICAgcmVuZGVyTGF5b3V0KHsgY29udGVudDogJzxzdHJvbmc+Qm9sZCBUZXh0PC9zdHJvbmc+JyB9KTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdCb2xkIFRleHQnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3N0YXRlcycsICgpID0+IHtcbiAgICBpdCgncmVuZGVycyB3aGVuIGRpc2FibGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckxheW91dCh7IGRpc2FibGVkOiB0cnVlIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lcikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdoZW4gY29ycmVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJMYXlvdXQoeyBjb3JyZWN0OiB0cnVlIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lcikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdoZW4gaW5jb3JyZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckxheW91dCh7IGNvcnJlY3Q6IGZhbHNlIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lcikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdoZW4gZHJhZ2dpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyTGF5b3V0KHsgaXNEcmFnZ2luZzogdHJ1ZSB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFB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
|