summaryrefslogtreecommitdiff
path: root/spec/frontend/content_editor/extensions/table_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/content_editor/extensions/table_spec.js')
-rw-r--r--spec/frontend/content_editor/extensions/table_spec.js102
1 files changed, 102 insertions, 0 deletions
diff --git a/spec/frontend/content_editor/extensions/table_spec.js b/spec/frontend/content_editor/extensions/table_spec.js
new file mode 100644
index 00000000000..121fe9192db
--- /dev/null
+++ b/spec/frontend/content_editor/extensions/table_spec.js
@@ -0,0 +1,102 @@
+import Bold from '~/content_editor/extensions/bold';
+import BulletList from '~/content_editor/extensions/bullet_list';
+import ListItem from '~/content_editor/extensions/list_item';
+import Table from '~/content_editor/extensions/table';
+import TableCell from '~/content_editor/extensions/table_cell';
+import TableRow from '~/content_editor/extensions/table_row';
+import TableHeader from '~/content_editor/extensions/table_header';
+import { createTestEditor, createDocBuilder } from '../test_utils';
+
+describe('content_editor/extensions/table', () => {
+ let tiptapEditor;
+ let doc;
+ let p;
+ let table;
+ let tableHeader;
+ let tableCell;
+ let tableRow;
+ let initialDoc;
+ let mockAlert;
+
+ beforeEach(() => {
+ tiptapEditor = createTestEditor({
+ extensions: [Table, TableCell, TableRow, TableHeader, BulletList, Bold, ListItem],
+ });
+
+ ({
+ builders: { doc, p, table, tableCell, tableHeader, tableRow },
+ } = createDocBuilder({
+ tiptapEditor,
+ names: {
+ bold: { markType: Bold.name },
+ table: { nodeType: Table.name },
+ tableHeader: { nodeType: TableHeader.name },
+ tableCell: { nodeType: TableCell.name },
+ tableRow: { nodeType: TableRow.name },
+ bulletList: { nodeType: BulletList.name },
+ listItem: { nodeType: ListItem.name },
+ },
+ }));
+
+ initialDoc = doc(
+ table(
+ { isMarkdown: true },
+ tableRow(tableHeader(p('This is')), tableHeader(p('a table'))),
+ tableRow(tableCell(p('this is')), tableCell(p('the first row'))),
+ ),
+ );
+
+ mockAlert = jest.fn();
+ });
+
+ it('triggers a warning (just once) if the table is markdown, but the changes in the document will render an HTML table instead', () => {
+ tiptapEditor.commands.setContent(initialDoc.toJSON());
+
+ tiptapEditor.on('alert', mockAlert);
+
+ tiptapEditor.commands.setTextSelection({ from: 20, to: 22 });
+ tiptapEditor.commands.toggleBulletList();
+
+ jest.advanceTimersByTime(1001);
+ expect(mockAlert).toHaveBeenCalled();
+
+ mockAlert.mockReset();
+
+ tiptapEditor.commands.setTextSelection({ from: 4, to: 6 });
+ tiptapEditor.commands.toggleBulletList();
+
+ jest.advanceTimersByTime(1001);
+ expect(mockAlert).not.toHaveBeenCalled();
+ });
+
+ it('does not trigger a warning if the table is markdown, and the changes in the document can generate a markdown table', () => {
+ tiptapEditor.commands.setContent(initialDoc.toJSON());
+
+ tiptapEditor.on('alert', mockAlert);
+
+ tiptapEditor.commands.setTextSelection({ from: 20, to: 22 });
+ tiptapEditor.commands.toggleBold();
+
+ jest.advanceTimersByTime(1001);
+ expect(mockAlert).not.toHaveBeenCalled();
+ });
+
+ it('does not trigger any warnings if the table is not markdown', () => {
+ initialDoc = doc(
+ table(
+ tableRow(tableHeader(p('This is')), tableHeader(p('a table'))),
+ tableRow(tableCell(p('this is')), tableCell(p('the first row'))),
+ ),
+ );
+
+ tiptapEditor.commands.setContent(initialDoc.toJSON());
+
+ tiptapEditor.on('alert', mockAlert);
+
+ tiptapEditor.commands.setTextSelection({ from: 20, to: 22 });
+ tiptapEditor.commands.toggleBulletList();
+
+ jest.advanceTimersByTime(1001);
+ expect(mockAlert).not.toHaveBeenCalled();
+ });
+});