@pie-lib/editable-html-tip-tap 2.1.10 → 2.2.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 -75
- package/lib/__tests__/EditableHtml.test.js +831 -0
- package/lib/__tests__/EditableHtml.test.js.map +1 -0
- package/lib/__tests__/constants.test.js +21 -0
- package/lib/__tests__/constants.test.js.map +1 -0
- package/lib/__tests__/div-to-paragraph-conversion.test.js +213 -0
- package/lib/__tests__/div-to-paragraph-conversion.test.js.map +1 -0
- package/lib/__tests__/extensions.test.js +209 -0
- package/lib/__tests__/extensions.test.js.map +1 -0
- package/lib/__tests__/index.test.js +250 -0
- package/lib/__tests__/index.test.js.map +1 -0
- package/lib/__tests__/size-utils.test.js +57 -0
- package/lib/__tests__/size-utils.test.js.map +1 -0
- package/lib/__tests__/theme.test.js +17 -0
- package/lib/__tests__/theme.test.js.map +1 -0
- package/lib/components/EditableHtml.js +4 -2
- package/lib/components/EditableHtml.js.map +1 -1
- package/lib/components/__tests__/AltDialog.test.js +201 -0
- package/lib/components/__tests__/AltDialog.test.js.map +1 -0
- package/lib/components/__tests__/CharacterPicker.test.js +455 -0
- package/lib/components/__tests__/CharacterPicker.test.js.map +1 -0
- package/lib/components/__tests__/CssIcon.test.js +58 -0
- package/lib/components/__tests__/CssIcon.test.js.map +1 -0
- package/lib/components/__tests__/DragInTheBlank.test.js +295 -0
- package/lib/components/__tests__/DragInTheBlank.test.js.map +1 -0
- package/lib/components/__tests__/ExplicitConstructedResponse.test.js +345 -0
- package/lib/components/__tests__/ExplicitConstructedResponse.test.js.map +1 -0
- package/lib/components/__tests__/ImageToolbar.test.js +185 -0
- package/lib/components/__tests__/ImageToolbar.test.js.map +1 -0
- package/lib/components/__tests__/InlineDropdown.test.js +839 -0
- package/lib/components/__tests__/InlineDropdown.test.js.map +1 -0
- package/lib/components/__tests__/InsertImageHandler.test.js +171 -0
- package/lib/components/__tests__/InsertImageHandler.test.js.map +1 -0
- package/lib/components/__tests__/MediaDialog.test.js +433 -0
- package/lib/components/__tests__/MediaDialog.test.js.map +1 -0
- package/lib/components/__tests__/MediaToolbar.test.js +126 -0
- package/lib/components/__tests__/MediaToolbar.test.js.map +1 -0
- package/lib/components/__tests__/MediaWrapper.test.js +96 -0
- package/lib/components/__tests__/MediaWrapper.test.js.map +1 -0
- package/lib/components/__tests__/MenuBar.test.js +502 -0
- package/lib/components/__tests__/MenuBar.test.js.map +1 -0
- package/lib/components/__tests__/RespArea.test.js +171 -0
- package/lib/components/__tests__/RespArea.test.js.map +1 -0
- package/lib/components/__tests__/TableIcons.test.js +153 -0
- package/lib/components/__tests__/TableIcons.test.js.map +1 -0
- package/lib/components/__tests__/TextAlign.test.js +209 -0
- package/lib/components/__tests__/TextAlign.test.js.map +1 -0
- package/lib/components/__tests__/TiptapContainer.test.js +196 -0
- package/lib/components/__tests__/TiptapContainer.test.js.map +1 -0
- package/lib/components/__tests__/characterUtils.test.js +178 -0
- package/lib/components/__tests__/characterUtils.test.js.map +1 -0
- package/lib/components/__tests__/choice.test.js +213 -0
- package/lib/components/__tests__/choice.test.js.map +1 -0
- package/lib/components/__tests__/custom-popper.test.js +108 -0
- package/lib/components/__tests__/custom-popper.test.js.map +1 -0
- package/lib/components/__tests__/done-button.test.js +72 -0
- package/lib/components/__tests__/done-button.test.js.map +1 -0
- package/lib/components/__tests__/toolbar-buttons.test.js +277 -0
- package/lib/components/__tests__/toolbar-buttons.test.js.map +1 -0
- package/lib/components/respArea/DragInTheBlank/__tests__/choice.test.js +90 -0
- package/lib/components/respArea/DragInTheBlank/__tests__/choice.test.js.map +1 -0
- package/lib/components/respArea/DragInTheBlank/choice.js +3 -0
- package/lib/components/respArea/DragInTheBlank/choice.js.map +1 -1
- package/lib/components/respArea/MathTemplated.js +2 -2
- package/lib/components/respArea/MathTemplated.js.map +1 -1
- package/lib/components/respArea/__tests__/MathTemplated.test.js +217 -0
- package/lib/components/respArea/__tests__/MathTemplated.test.js.map +1 -0
- package/lib/extensions/__tests__/css.test.js +214 -0
- package/lib/extensions/__tests__/css.test.js.map +1 -0
- package/lib/extensions/__tests__/custom-toolbar-wrapper.test.js +175 -0
- package/lib/extensions/__tests__/custom-toolbar-wrapper.test.js.map +1 -0
- package/lib/extensions/__tests__/divNode.test.js +108 -0
- package/lib/extensions/__tests__/divNode.test.js.map +1 -0
- package/lib/extensions/__tests__/ensure-empty-root-div.test.js +50 -0
- package/lib/extensions/__tests__/ensure-empty-root-div.test.js.map +1 -0
- package/lib/extensions/__tests__/ensure-list-item-content-is-div.test.js +60 -0
- package/lib/extensions/__tests__/ensure-list-item-content-is-div.test.js.map +1 -0
- package/lib/extensions/__tests__/extended-list-item.test.js +13 -0
- package/lib/extensions/__tests__/extended-list-item.test.js.map +1 -0
- package/lib/extensions/__tests__/extended-table-cell.test.js +15 -0
- package/lib/extensions/__tests__/extended-table-cell.test.js.map +1 -0
- package/lib/extensions/__tests__/extended-table.test.js +200 -0
- package/lib/extensions/__tests__/extended-table.test.js.map +1 -0
- package/lib/extensions/__tests__/image-component.test.js +432 -0
- package/lib/extensions/__tests__/image-component.test.js.map +1 -0
- package/lib/extensions/__tests__/image.test.js +313 -0
- package/lib/extensions/__tests__/image.test.js.map +1 -0
- package/lib/extensions/__tests__/math.test.js +1399 -0
- package/lib/extensions/__tests__/math.test.js.map +1 -0
- package/lib/extensions/__tests__/media-node-view.test.js +307 -0
- package/lib/extensions/__tests__/media-node-view.test.js.map +1 -0
- package/lib/extensions/__tests__/media.test.js +292 -0
- package/lib/extensions/__tests__/media.test.js.map +1 -0
- package/lib/extensions/__tests__/responseArea.test.js +736 -0
- package/lib/extensions/__tests__/responseArea.test.js.map +1 -0
- package/lib/extensions/image-component.js +9 -6
- package/lib/extensions/image-component.js.map +1 -1
- package/lib/extensions/responseArea.js +7 -1
- package/lib/extensions/responseArea.js.map +1 -1
- package/lib/utils/__tests__/helper.test.js +107 -0
- package/lib/utils/__tests__/helper.test.js.map +1 -0
- package/lib/utils/__tests__/toolbar.test.js +38 -0
- package/lib/utils/__tests__/toolbar.test.js.map +1 -0
- package/package.json +7 -7
- package/src/components/EditableHtml.jsx +5 -3
- package/src/components/respArea/DragInTheBlank/__tests__/choice.test.jsx +72 -0
- package/src/components/respArea/DragInTheBlank/choice.jsx +3 -0
- package/src/components/respArea/MathTemplated.jsx +1 -1
- package/src/components/respArea/__tests__/MathTemplated.test.jsx +1 -1
- package/src/extensions/__tests__/image-component.test.jsx +1 -0
- package/src/extensions/__tests__/responseArea.test.js +57 -3
- package/src/extensions/image-component.jsx +8 -6
- package/src/extensions/responseArea.js +7 -1
- package/LICENSE.md +0 -5
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
5
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
6
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
7
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _react2 = require("@testing-library/react");
|
|
10
|
+
var _imageComponent = _interopRequireDefault(require("../image-component"));
|
|
11
|
+
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; }
|
|
12
|
+
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; }
|
|
13
|
+
jest.mock('@tiptap/react', function () {
|
|
14
|
+
return {
|
|
15
|
+
NodeViewWrapper: function NodeViewWrapper(_ref) {
|
|
16
|
+
var children = _ref.children;
|
|
17
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
18
|
+
"data-testid": "node-view-wrapper"
|
|
19
|
+
}, children);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
jest.mock('../../components/image/InsertImageHandler', function () {
|
|
24
|
+
return {
|
|
25
|
+
__esModule: true,
|
|
26
|
+
"default": jest.fn()
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
jest.mock('../../components/image/ImageToolbar', function () {
|
|
30
|
+
return {
|
|
31
|
+
__esModule: true,
|
|
32
|
+
"default": function _default(_ref2) {
|
|
33
|
+
var onChange = _ref2.onChange,
|
|
34
|
+
alignment = _ref2.alignment,
|
|
35
|
+
alt = _ref2.alt;
|
|
36
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
37
|
+
"data-testid": "image-toolbar"
|
|
38
|
+
}, /*#__PURE__*/_react["default"].createElement("button", {
|
|
39
|
+
onClick: function onClick() {
|
|
40
|
+
return onChange({
|
|
41
|
+
alignment: 'center'
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}, "Center"), /*#__PURE__*/_react["default"].createElement("span", null, alignment), /*#__PURE__*/_react["default"].createElement("span", null, alt));
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
jest.mock('../custom-toolbar-wrapper', function () {
|
|
49
|
+
return {
|
|
50
|
+
__esModule: true,
|
|
51
|
+
"default": function _default(_ref3) {
|
|
52
|
+
var children = _ref3.children,
|
|
53
|
+
onDone = _ref3.onDone;
|
|
54
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
55
|
+
"data-testid": "custom-toolbar-wrapper"
|
|
56
|
+
}, children, /*#__PURE__*/_react["default"].createElement("button", {
|
|
57
|
+
onClick: onDone,
|
|
58
|
+
"data-testid": "done-button"
|
|
59
|
+
}, "Done"));
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
describe('ImageComponent', function () {
|
|
64
|
+
var MOCK_NODE_POS = 7;
|
|
65
|
+
var createMockEditor = function createMockEditor() {
|
|
66
|
+
var selection = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
|
67
|
+
from: 0,
|
|
68
|
+
to: 1
|
|
69
|
+
};
|
|
70
|
+
return {
|
|
71
|
+
_tiptapContainerEl: document.body,
|
|
72
|
+
isEditable: true,
|
|
73
|
+
commands: {
|
|
74
|
+
updateAttributes: jest.fn(),
|
|
75
|
+
focus: jest.fn()
|
|
76
|
+
},
|
|
77
|
+
state: {
|
|
78
|
+
selection: selection,
|
|
79
|
+
doc: {
|
|
80
|
+
descendants: jest.fn(),
|
|
81
|
+
nodeAt: jest.fn()
|
|
82
|
+
},
|
|
83
|
+
tr: {
|
|
84
|
+
setNodeMarkup: jest.fn().mockReturnThis(),
|
|
85
|
+
"delete": jest.fn().mockReturnThis()
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
view: {
|
|
89
|
+
dispatch: jest.fn()
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
var mockEditor = createMockEditor();
|
|
94
|
+
var mockNode = {
|
|
95
|
+
type: {
|
|
96
|
+
name: 'imageUploadNode'
|
|
97
|
+
},
|
|
98
|
+
attrs: {
|
|
99
|
+
nodeKey: 'test-key-123',
|
|
100
|
+
src: 'test.jpg',
|
|
101
|
+
width: 100,
|
|
102
|
+
height: 100,
|
|
103
|
+
loaded: true,
|
|
104
|
+
percent: 100,
|
|
105
|
+
alt: 'Test image',
|
|
106
|
+
alignment: 'left',
|
|
107
|
+
deleteStatus: null
|
|
108
|
+
},
|
|
109
|
+
nodeSize: 1
|
|
110
|
+
};
|
|
111
|
+
var mockOptions = {
|
|
112
|
+
imageHandling: {
|
|
113
|
+
insertImageRequested: jest.fn(),
|
|
114
|
+
onDone: jest.fn(),
|
|
115
|
+
onDelete: jest.fn()
|
|
116
|
+
},
|
|
117
|
+
disableImageAlignmentButtons: false
|
|
118
|
+
};
|
|
119
|
+
var defaultProps = {
|
|
120
|
+
node: mockNode,
|
|
121
|
+
editor: mockEditor,
|
|
122
|
+
selected: false,
|
|
123
|
+
options: mockOptions,
|
|
124
|
+
attributes: {},
|
|
125
|
+
onFocus: jest.fn(),
|
|
126
|
+
getPos: jest.fn(function () {
|
|
127
|
+
return MOCK_NODE_POS;
|
|
128
|
+
})
|
|
129
|
+
};
|
|
130
|
+
beforeEach(function () {
|
|
131
|
+
jest.clearAllMocks();
|
|
132
|
+
mockEditor = createMockEditor();
|
|
133
|
+
defaultProps.editor = mockEditor;
|
|
134
|
+
defaultProps.getPos = jest.fn(function () {
|
|
135
|
+
return MOCK_NODE_POS;
|
|
136
|
+
});
|
|
137
|
+
mockEditor.state.doc.descendants.mockImplementation(function (cb) {
|
|
138
|
+
return cb(mockNode, 0);
|
|
139
|
+
});
|
|
140
|
+
mockEditor.state.doc.nodeAt.mockReturnValue(mockNode);
|
|
141
|
+
});
|
|
142
|
+
it('renders without crashing', function () {
|
|
143
|
+
var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], defaultProps)),
|
|
144
|
+
getByTestId = _render.getByTestId;
|
|
145
|
+
expect(getByTestId('node-view-wrapper')).toBeInTheDocument();
|
|
146
|
+
});
|
|
147
|
+
it('renders image with correct src', function () {
|
|
148
|
+
var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], defaultProps)),
|
|
149
|
+
container = _render2.container;
|
|
150
|
+
var img = container.querySelector('img');
|
|
151
|
+
expect(img).toBeInTheDocument();
|
|
152
|
+
expect(img.src).toContain('test.jpg');
|
|
153
|
+
});
|
|
154
|
+
it('renders image with correct dimensions', function () {
|
|
155
|
+
var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], defaultProps)),
|
|
156
|
+
container = _render3.container;
|
|
157
|
+
var img = container.querySelector('img');
|
|
158
|
+
expect(img.style.width).toBe('100px');
|
|
159
|
+
expect(img.style.height).toBe('100px');
|
|
160
|
+
});
|
|
161
|
+
it('renders image with alt text', function () {
|
|
162
|
+
var _render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], defaultProps)),
|
|
163
|
+
container = _render4.container;
|
|
164
|
+
var img = container.querySelector('img');
|
|
165
|
+
expect(img.alt).toBe('Test image');
|
|
166
|
+
});
|
|
167
|
+
it('does not show toolbar when not selected', function () {
|
|
168
|
+
var _render5 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
169
|
+
selected: false
|
|
170
|
+
}))),
|
|
171
|
+
queryByTestId = _render5.queryByTestId;
|
|
172
|
+
expect(queryByTestId('image-toolbar')).not.toBeInTheDocument();
|
|
173
|
+
});
|
|
174
|
+
it('shows toolbar when selected', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
175
|
+
var _render6, getByTestId;
|
|
176
|
+
return _regenerator["default"].wrap(function (_context) {
|
|
177
|
+
while (1) switch (_context.prev = _context.next) {
|
|
178
|
+
case 0:
|
|
179
|
+
_render6 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
180
|
+
selected: true
|
|
181
|
+
}))), getByTestId = _render6.getByTestId;
|
|
182
|
+
_context.next = 1;
|
|
183
|
+
return (0, _react2.waitFor)(function () {
|
|
184
|
+
expect(getByTestId('image-toolbar')).toBeInTheDocument();
|
|
185
|
+
});
|
|
186
|
+
case 1:
|
|
187
|
+
case "end":
|
|
188
|
+
return _context.stop();
|
|
189
|
+
}
|
|
190
|
+
}, _callee);
|
|
191
|
+
})));
|
|
192
|
+
it('applies loading opacity when image not loaded', function () {
|
|
193
|
+
var notLoadedNode = _objectSpread(_objectSpread({}, mockNode), {}, {
|
|
194
|
+
attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
|
|
195
|
+
loaded: false
|
|
196
|
+
})
|
|
197
|
+
});
|
|
198
|
+
var _render7 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
199
|
+
node: notLoadedNode
|
|
200
|
+
}))),
|
|
201
|
+
container = _render7.container;
|
|
202
|
+
var root = container.querySelector('[data-testid="node-view-wrapper"] > div');
|
|
203
|
+
expect(root).toHaveStyle({
|
|
204
|
+
opacity: 0.3
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
it('applies pending delete opacity', function () {
|
|
208
|
+
var pendingDeleteNode = _objectSpread(_objectSpread({}, mockNode), {}, {
|
|
209
|
+
attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
|
|
210
|
+
deleteStatus: 'pending'
|
|
211
|
+
})
|
|
212
|
+
});
|
|
213
|
+
var _render8 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
214
|
+
node: pendingDeleteNode
|
|
215
|
+
}))),
|
|
216
|
+
container = _render8.container;
|
|
217
|
+
var root = container.querySelector('[data-testid="node-view-wrapper"] > div');
|
|
218
|
+
expect(root).toHaveStyle({
|
|
219
|
+
opacity: 0.3
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
it('aligns image to left by default', function () {
|
|
223
|
+
var _render9 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], defaultProps)),
|
|
224
|
+
container = _render9.container;
|
|
225
|
+
var root = container.querySelector('[data-testid="node-view-wrapper"] > div');
|
|
226
|
+
expect(root).toHaveStyle({
|
|
227
|
+
justifyContent: 'flex-start'
|
|
228
|
+
});
|
|
229
|
+
});
|
|
230
|
+
it('aligns image to center', function () {
|
|
231
|
+
var centerNode = _objectSpread(_objectSpread({}, mockNode), {}, {
|
|
232
|
+
attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
|
|
233
|
+
alignment: 'center'
|
|
234
|
+
})
|
|
235
|
+
});
|
|
236
|
+
var _render0 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
237
|
+
node: centerNode
|
|
238
|
+
}))),
|
|
239
|
+
container = _render0.container;
|
|
240
|
+
var root = container.querySelector('[data-testid="node-view-wrapper"] > div');
|
|
241
|
+
expect(root).toHaveStyle({
|
|
242
|
+
justifyContent: 'center'
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
it('aligns image to right', function () {
|
|
246
|
+
var rightNode = _objectSpread(_objectSpread({}, mockNode), {}, {
|
|
247
|
+
attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
|
|
248
|
+
alignment: 'right'
|
|
249
|
+
})
|
|
250
|
+
});
|
|
251
|
+
var _render1 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
252
|
+
node: rightNode
|
|
253
|
+
}))),
|
|
254
|
+
container = _render1.container;
|
|
255
|
+
var root = container.querySelector('[data-testid="node-view-wrapper"] > div');
|
|
256
|
+
expect(root).toHaveStyle({
|
|
257
|
+
justifyContent: 'flex-end'
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
it('does not call insertImageRequested when image already has src', function () {
|
|
261
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
262
|
+
selected: true
|
|
263
|
+
})));
|
|
264
|
+
expect(mockOptions.imageHandling.insertImageRequested).not.toHaveBeenCalled();
|
|
265
|
+
});
|
|
266
|
+
it('does not call insertImageRequested for empty placeholder on mount when not selected', function () {
|
|
267
|
+
var placeholderNode = _objectSpread(_objectSpread({}, mockNode), {}, {
|
|
268
|
+
attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
|
|
269
|
+
src: null,
|
|
270
|
+
loaded: false,
|
|
271
|
+
percent: null
|
|
272
|
+
})
|
|
273
|
+
});
|
|
274
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
275
|
+
node: placeholderNode,
|
|
276
|
+
selected: false
|
|
277
|
+
})));
|
|
278
|
+
expect(mockOptions.imageHandling.insertImageRequested).not.toHaveBeenCalled();
|
|
279
|
+
});
|
|
280
|
+
it('calls insertImageRequested with editor and [node, pos] when empty placeholder is solely selected', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
281
|
+
var placeholderNode;
|
|
282
|
+
return _regenerator["default"].wrap(function (_context2) {
|
|
283
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
284
|
+
case 0:
|
|
285
|
+
placeholderNode = _objectSpread(_objectSpread({}, mockNode), {}, {
|
|
286
|
+
nodeSize: 1,
|
|
287
|
+
attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
|
|
288
|
+
src: null,
|
|
289
|
+
loaded: false,
|
|
290
|
+
percent: null
|
|
291
|
+
})
|
|
292
|
+
});
|
|
293
|
+
mockEditor = createMockEditor({
|
|
294
|
+
from: 0,
|
|
295
|
+
to: 1
|
|
296
|
+
});
|
|
297
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
298
|
+
editor: mockEditor,
|
|
299
|
+
node: placeholderNode,
|
|
300
|
+
selected: true
|
|
301
|
+
})));
|
|
302
|
+
_context2.next = 1;
|
|
303
|
+
return (0, _react2.waitFor)(function () {
|
|
304
|
+
expect(mockOptions.imageHandling.insertImageRequested).toHaveBeenCalled();
|
|
305
|
+
});
|
|
306
|
+
case 1:
|
|
307
|
+
expect(mockOptions.imageHandling.insertImageRequested).toHaveBeenCalledWith(mockEditor, [placeholderNode, MOCK_NODE_POS], expect.any(Function));
|
|
308
|
+
expect(defaultProps.getPos).toHaveBeenCalled();
|
|
309
|
+
case 2:
|
|
310
|
+
case "end":
|
|
311
|
+
return _context2.stop();
|
|
312
|
+
}
|
|
313
|
+
}, _callee2);
|
|
314
|
+
})));
|
|
315
|
+
it('does not call insertImageRequested when selection spans beyond the image node', function () {
|
|
316
|
+
var placeholderNode = _objectSpread(_objectSpread({}, mockNode), {}, {
|
|
317
|
+
nodeSize: 1,
|
|
318
|
+
attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
|
|
319
|
+
src: null,
|
|
320
|
+
loaded: false,
|
|
321
|
+
percent: null
|
|
322
|
+
})
|
|
323
|
+
});
|
|
324
|
+
mockEditor = createMockEditor({
|
|
325
|
+
from: 0,
|
|
326
|
+
to: 5
|
|
327
|
+
});
|
|
328
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
329
|
+
editor: mockEditor,
|
|
330
|
+
node: placeholderNode,
|
|
331
|
+
selected: true
|
|
332
|
+
})));
|
|
333
|
+
expect(mockOptions.imageHandling.insertImageRequested).not.toHaveBeenCalled();
|
|
334
|
+
});
|
|
335
|
+
it('updates attributes through toolbar onChange', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
336
|
+
var _render10, getByTestId;
|
|
337
|
+
return _regenerator["default"].wrap(function (_context3) {
|
|
338
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
339
|
+
case 0:
|
|
340
|
+
_render10 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
341
|
+
selected: true
|
|
342
|
+
}))), getByTestId = _render10.getByTestId;
|
|
343
|
+
_context3.next = 1;
|
|
344
|
+
return (0, _react2.waitFor)(function () {
|
|
345
|
+
var centerButton = getByTestId('image-toolbar').querySelector('button');
|
|
346
|
+
_react2.fireEvent.click(centerButton);
|
|
347
|
+
});
|
|
348
|
+
case 1:
|
|
349
|
+
expect(mockEditor.state.tr.setNodeMarkup).toHaveBeenCalledWith(0, undefined, expect.objectContaining({
|
|
350
|
+
alignment: 'center'
|
|
351
|
+
}));
|
|
352
|
+
expect(mockEditor.view.dispatch).toHaveBeenCalled();
|
|
353
|
+
case 2:
|
|
354
|
+
case "end":
|
|
355
|
+
return _context3.stop();
|
|
356
|
+
}
|
|
357
|
+
}, _callee3);
|
|
358
|
+
})));
|
|
359
|
+
it('toolbar is shown when selected', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
|
360
|
+
var _render11, container, queryByTestId;
|
|
361
|
+
return _regenerator["default"].wrap(function (_context4) {
|
|
362
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
363
|
+
case 0:
|
|
364
|
+
_render11 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
365
|
+
selected: true
|
|
366
|
+
}))), container = _render11.container, queryByTestId = _render11.queryByTestId; // Wait for toolbar to potentially appear
|
|
367
|
+
_context4.next = 1;
|
|
368
|
+
return (0, _react2.waitFor)(function () {
|
|
369
|
+
// The toolbar might not be visible due to mocking but check if custom-toolbar-wrapper shows up
|
|
370
|
+
var toolbar = container.querySelector('[data-testid="custom-toolbar-wrapper"]');
|
|
371
|
+
// In a real test environment, the toolbar would be visible
|
|
372
|
+
// For now, just verify the component renders without errors when selected
|
|
373
|
+
expect(container).toBeInTheDocument();
|
|
374
|
+
});
|
|
375
|
+
case 1:
|
|
376
|
+
case "end":
|
|
377
|
+
return _context4.stop();
|
|
378
|
+
}
|
|
379
|
+
}, _callee4);
|
|
380
|
+
})));
|
|
381
|
+
it('respects maxImageWidth prop', function () {
|
|
382
|
+
var props = _objectSpread(_objectSpread({}, defaultProps), {}, {
|
|
383
|
+
maxImageWidth: 500
|
|
384
|
+
});
|
|
385
|
+
var _render12 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], props)),
|
|
386
|
+
container = _render12.container;
|
|
387
|
+
expect(container).toBeInTheDocument();
|
|
388
|
+
});
|
|
389
|
+
it('respects maxImageHeight prop', function () {
|
|
390
|
+
var props = _objectSpread(_objectSpread({}, defaultProps), {}, {
|
|
391
|
+
maxImageHeight: 800
|
|
392
|
+
});
|
|
393
|
+
var _render13 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], props)),
|
|
394
|
+
container = _render13.container;
|
|
395
|
+
expect(container).toBeInTheDocument();
|
|
396
|
+
});
|
|
397
|
+
it('handles missing alt attribute', function () {
|
|
398
|
+
var noAltNode = _objectSpread(_objectSpread({}, mockNode), {}, {
|
|
399
|
+
attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
|
|
400
|
+
alt: undefined
|
|
401
|
+
})
|
|
402
|
+
});
|
|
403
|
+
var _render14 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
404
|
+
node: noAltNode
|
|
405
|
+
}))),
|
|
406
|
+
container = _render14.container;
|
|
407
|
+
var img = container.querySelector('img');
|
|
408
|
+
expect(img).toBeInTheDocument();
|
|
409
|
+
});
|
|
410
|
+
it('passes editor to imageHandling onDone when Done is clicked', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5() {
|
|
411
|
+
var _render15, getByTestId;
|
|
412
|
+
return _regenerator["default"].wrap(function (_context5) {
|
|
413
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
414
|
+
case 0:
|
|
415
|
+
_render15 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
416
|
+
selected: true
|
|
417
|
+
}))), getByTestId = _render15.getByTestId;
|
|
418
|
+
_context5.next = 1;
|
|
419
|
+
return (0, _react2.waitFor)(function () {
|
|
420
|
+
expect(getByTestId('done-button')).toBeInTheDocument();
|
|
421
|
+
});
|
|
422
|
+
case 1:
|
|
423
|
+
_react2.fireEvent.click(getByTestId('done-button'));
|
|
424
|
+
expect(mockOptions.imageHandling.onDone).toHaveBeenCalledWith(mockEditor);
|
|
425
|
+
case 2:
|
|
426
|
+
case "end":
|
|
427
|
+
return _context5.stop();
|
|
428
|
+
}
|
|
429
|
+
}, _callee5);
|
|
430
|
+
})));
|
|
431
|
+
});
|
|
432
|
+
//# sourceMappingURL=image-component.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-component.test.js","names":["_react","_interopRequireDefault","require","_react2","_imageComponent","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","jest","mock","NodeViewWrapper","_ref","children","createElement","__esModule","fn","default","_ref2","onChange","alignment","alt","onClick","_ref3","onDone","describe","MOCK_NODE_POS","createMockEditor","selection","undefined","from","to","_tiptapContainerEl","document","body","isEditable","commands","updateAttributes","focus","state","doc","descendants","nodeAt","tr","setNodeMarkup","mockReturnThis","view","dispatch","mockEditor","mockNode","type","name","attrs","nodeKey","src","width","height","loaded","percent","deleteStatus","nodeSize","mockOptions","imageHandling","insertImageRequested","onDelete","disableImageAlignmentButtons","defaultProps","node","editor","selected","options","attributes","onFocus","getPos","beforeEach","clearAllMocks","mockImplementation","cb","mockReturnValue","it","_render","render","getByTestId","expect","toBeInTheDocument","_render2","container","img","querySelector","toContain","_render3","style","toBe","_render4","_render5","_extends2","queryByTestId","not","_asyncToGenerator2","_regenerator","mark","_callee","_render6","wrap","_context","prev","next","waitFor","stop","notLoadedNode","_render7","root","toHaveStyle","opacity","pendingDeleteNode","_render8","_render9","justifyContent","centerNode","_render0","rightNode","_render1","toHaveBeenCalled","placeholderNode","_callee2","_context2","toHaveBeenCalledWith","any","Function","_callee3","_render10","_context3","centerButton","fireEvent","click","objectContaining","_callee4","_render11","_context4","toolbar","props","maxImageWidth","_render12","maxImageHeight","_render13","noAltNode","_render14","_callee5","_render15","_context5"],"sources":["../../../src/extensions/__tests__/image-component.test.jsx"],"sourcesContent":["import React from 'react';\nimport { fireEvent, render, waitFor } from '@testing-library/react';\nimport ImageComponent from '../image-component';\n\njest.mock('@tiptap/react', () => ({\n NodeViewWrapper: ({ children }) => <div data-testid=\"node-view-wrapper\">{children}</div>,\n}));\n\njest.mock('../../components/image/InsertImageHandler', () => ({\n __esModule: true,\n default: jest.fn(),\n}));\n\njest.mock('../../components/image/ImageToolbar', () => ({\n __esModule: true,\n default: ({ onChange, alignment, alt }) => (\n <div data-testid=\"image-toolbar\">\n <button onClick={() => onChange({ alignment: 'center' })}>Center</button>\n <span>{alignment}</span>\n <span>{alt}</span>\n </div>\n ),\n}));\n\njest.mock('../custom-toolbar-wrapper', () => ({\n __esModule: true,\n default: ({ children, onDone }) => (\n <div data-testid=\"custom-toolbar-wrapper\">\n {children}\n <button onClick={onDone} data-testid=\"done-button\">\n Done\n </button>\n </div>\n ),\n}));\n\ndescribe('ImageComponent', () => {\n const MOCK_NODE_POS = 7;\n\n const createMockEditor = (selection = { from: 0, to: 1 }) => ({\n _tiptapContainerEl: document.body,\n isEditable: true,\n commands: {\n updateAttributes: jest.fn(),\n focus: jest.fn(),\n },\n state: {\n selection,\n doc: {\n descendants: jest.fn(),\n nodeAt: jest.fn(),\n },\n tr: {\n setNodeMarkup: jest.fn().mockReturnThis(),\n delete: jest.fn().mockReturnThis(),\n },\n },\n view: {\n dispatch: jest.fn(),\n },\n });\n\n let mockEditor = createMockEditor();\n\n const mockNode = {\n type: { name: 'imageUploadNode' },\n attrs: {\n nodeKey: 'test-key-123',\n src: 'test.jpg',\n width: 100,\n height: 100,\n loaded: true,\n percent: 100,\n alt: 'Test image',\n alignment: 'left',\n deleteStatus: null,\n },\n nodeSize: 1,\n };\n\n const mockOptions = {\n imageHandling: {\n insertImageRequested: jest.fn(),\n onDone: jest.fn(),\n onDelete: jest.fn(),\n },\n disableImageAlignmentButtons: false,\n };\n\n const defaultProps = {\n node: mockNode,\n editor: mockEditor,\n selected: false,\n options: mockOptions,\n attributes: {},\n onFocus: jest.fn(),\n getPos: jest.fn(() => MOCK_NODE_POS),\n };\n\n beforeEach(() => {\n jest.clearAllMocks();\n mockEditor = createMockEditor();\n defaultProps.editor = mockEditor;\n defaultProps.getPos = jest.fn(() => MOCK_NODE_POS);\n mockEditor.state.doc.descendants.mockImplementation((cb) => cb(mockNode, 0));\n mockEditor.state.doc.nodeAt.mockReturnValue(mockNode);\n });\n\n it('renders without crashing', () => {\n const { getByTestId } = render(<ImageComponent {...defaultProps} />);\n expect(getByTestId('node-view-wrapper')).toBeInTheDocument();\n });\n\n it('renders image with correct src', () => {\n const { container } = render(<ImageComponent {...defaultProps} />);\n const img = container.querySelector('img');\n expect(img).toBeInTheDocument();\n expect(img.src).toContain('test.jpg');\n });\n\n it('renders image with correct dimensions', () => {\n const { container } = render(<ImageComponent {...defaultProps} />);\n const img = container.querySelector('img');\n expect(img.style.width).toBe('100px');\n expect(img.style.height).toBe('100px');\n });\n\n it('renders image with alt text', () => {\n const { container } = render(<ImageComponent {...defaultProps} />);\n const img = container.querySelector('img');\n expect(img.alt).toBe('Test image');\n });\n\n it('does not show toolbar when not selected', () => {\n const { queryByTestId } = render(<ImageComponent {...defaultProps} selected={false} />);\n expect(queryByTestId('image-toolbar')).not.toBeInTheDocument();\n });\n\n it('shows toolbar when selected', async () => {\n const { getByTestId } = render(<ImageComponent {...defaultProps} selected={true} />);\n\n await waitFor(() => {\n expect(getByTestId('image-toolbar')).toBeInTheDocument();\n });\n });\n\n it('applies loading opacity when image not loaded', () => {\n const notLoadedNode = {\n ...mockNode,\n attrs: {\n ...mockNode.attrs,\n loaded: false,\n },\n };\n\n const { container } = render(<ImageComponent {...defaultProps} node={notLoadedNode} />);\n const root = container.querySelector('[data-testid=\"node-view-wrapper\"] > div');\n expect(root).toHaveStyle({ opacity: 0.3 });\n });\n\n it('applies pending delete opacity', () => {\n const pendingDeleteNode = {\n ...mockNode,\n attrs: {\n ...mockNode.attrs,\n deleteStatus: 'pending',\n },\n };\n\n const { container } = render(<ImageComponent {...defaultProps} node={pendingDeleteNode} />);\n const root = container.querySelector('[data-testid=\"node-view-wrapper\"] > div');\n expect(root).toHaveStyle({ opacity: 0.3 });\n });\n\n it('aligns image to left by default', () => {\n const { container } = render(<ImageComponent {...defaultProps} />);\n const root = container.querySelector('[data-testid=\"node-view-wrapper\"] > div');\n expect(root).toHaveStyle({ justifyContent: 'flex-start' });\n });\n\n it('aligns image to center', () => {\n const centerNode = {\n ...mockNode,\n attrs: {\n ...mockNode.attrs,\n alignment: 'center',\n },\n };\n\n const { container } = render(<ImageComponent {...defaultProps} node={centerNode} />);\n const root = container.querySelector('[data-testid=\"node-view-wrapper\"] > div');\n expect(root).toHaveStyle({ justifyContent: 'center' });\n });\n\n it('aligns image to right', () => {\n const rightNode = {\n ...mockNode,\n attrs: {\n ...mockNode.attrs,\n alignment: 'right',\n },\n };\n\n const { container } = render(<ImageComponent {...defaultProps} node={rightNode} />);\n const root = container.querySelector('[data-testid=\"node-view-wrapper\"] > div');\n expect(root).toHaveStyle({ justifyContent: 'flex-end' });\n });\n\n it('does not call insertImageRequested when image already has src', () => {\n render(<ImageComponent {...defaultProps} selected={true} />);\n expect(mockOptions.imageHandling.insertImageRequested).not.toHaveBeenCalled();\n });\n\n it('does not call insertImageRequested for empty placeholder on mount when not selected', () => {\n const placeholderNode = {\n ...mockNode,\n attrs: {\n ...mockNode.attrs,\n src: null,\n loaded: false,\n percent: null,\n },\n };\n render(<ImageComponent {...defaultProps} node={placeholderNode} selected={false} />);\n expect(mockOptions.imageHandling.insertImageRequested).not.toHaveBeenCalled();\n });\n\n it('calls insertImageRequested with editor and [node, pos] when empty placeholder is solely selected', async () => {\n const placeholderNode = {\n ...mockNode,\n nodeSize: 1,\n attrs: {\n ...mockNode.attrs,\n src: null,\n loaded: false,\n percent: null,\n },\n };\n mockEditor = createMockEditor({ from: 0, to: 1 });\n\n render(<ImageComponent {...defaultProps} editor={mockEditor} node={placeholderNode} selected={true} />);\n\n await waitFor(() => {\n expect(mockOptions.imageHandling.insertImageRequested).toHaveBeenCalled();\n });\n\n expect(mockOptions.imageHandling.insertImageRequested).toHaveBeenCalledWith(\n mockEditor,\n [placeholderNode, MOCK_NODE_POS],\n expect.any(Function),\n );\n expect(defaultProps.getPos).toHaveBeenCalled();\n });\n\n it('does not call insertImageRequested when selection spans beyond the image node', () => {\n const placeholderNode = {\n ...mockNode,\n nodeSize: 1,\n attrs: {\n ...mockNode.attrs,\n src: null,\n loaded: false,\n percent: null,\n },\n };\n mockEditor = createMockEditor({ from: 0, to: 5 });\n\n render(<ImageComponent {...defaultProps} editor={mockEditor} node={placeholderNode} selected={true} />);\n expect(mockOptions.imageHandling.insertImageRequested).not.toHaveBeenCalled();\n });\n\n it('updates attributes through toolbar onChange', async () => {\n const { getByTestId } = render(<ImageComponent {...defaultProps} selected={true} />);\n\n await waitFor(() => {\n const centerButton = getByTestId('image-toolbar').querySelector('button');\n fireEvent.click(centerButton);\n });\n\n expect(mockEditor.state.tr.setNodeMarkup).toHaveBeenCalledWith(\n 0,\n undefined,\n expect.objectContaining({ alignment: 'center' }),\n );\n expect(mockEditor.view.dispatch).toHaveBeenCalled();\n });\n\n it('toolbar is shown when selected', async () => {\n const { container, queryByTestId } = render(<ImageComponent {...defaultProps} selected={true} />);\n\n // Wait for toolbar to potentially appear\n await waitFor(() => {\n // The toolbar might not be visible due to mocking but check if custom-toolbar-wrapper shows up\n const toolbar = container.querySelector('[data-testid=\"custom-toolbar-wrapper\"]');\n // In a real test environment, the toolbar would be visible\n // For now, just verify the component renders without errors when selected\n expect(container).toBeInTheDocument();\n });\n });\n\n it('respects maxImageWidth prop', () => {\n const props = {\n ...defaultProps,\n maxImageWidth: 500,\n };\n\n const { container } = render(<ImageComponent {...props} />);\n expect(container).toBeInTheDocument();\n });\n\n it('respects maxImageHeight prop', () => {\n const props = {\n ...defaultProps,\n maxImageHeight: 800,\n };\n\n const { container } = render(<ImageComponent {...props} />);\n expect(container).toBeInTheDocument();\n });\n\n it('handles missing alt attribute', () => {\n const noAltNode = {\n ...mockNode,\n attrs: {\n ...mockNode.attrs,\n alt: undefined,\n },\n };\n\n const { container } = render(<ImageComponent {...defaultProps} node={noAltNode} />);\n const img = container.querySelector('img');\n expect(img).toBeInTheDocument();\n });\n\n it('passes editor to imageHandling onDone when Done is clicked', async () => {\n const { getByTestId } = render(<ImageComponent {...defaultProps} selected={true} />);\n\n await waitFor(() => {\n expect(getByTestId('done-button')).toBeInTheDocument();\n });\n\n fireEvent.click(getByTestId('done-button'));\n\n expect(mockOptions.imageHandling.onDone).toHaveBeenCalledWith(mockEditor);\n });\n});\n"],"mappings":"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","ignoreList":[]}
|