index.test.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. import draftail, {
  2. wrapWagtailIcon,
  3. Link,
  4. Document,
  5. ImageBlock,
  6. EmbedBlock,
  7. } from './index';
  8. describe('Draftail', () => {
  9. describe('#initEditor', () => {
  10. beforeEach(() => {
  11. document.head.innerHTML = '';
  12. document.body.innerHTML = '';
  13. });
  14. it('works', () => {
  15. document.body.innerHTML = '<input type="text" id="test" value="null" />';
  16. const field = document.querySelector('#test');
  17. draftail.initEditor('#test', {});
  18. expect(field.draftailEditor).toBeDefined();
  19. });
  20. it('onSave', () => {
  21. document.body.innerHTML = '<input id="test" value="null" />';
  22. const field = document.querySelector('#test');
  23. draftail.initEditor('#test', {});
  24. field.draftailEditor.saveState();
  25. expect(field.value).toBe('null');
  26. });
  27. it('options', () => {
  28. document.body.innerHTML = '<input id="test" value="null" />';
  29. const field = document.querySelector('#test');
  30. draftail.registerPlugin({
  31. type: 'IMAGE',
  32. source: () => {},
  33. block: () => {},
  34. });
  35. draftail.initEditor('#test', {
  36. entityTypes: [
  37. { type: 'IMAGE' },
  38. ],
  39. enableHorizontalRule: true,
  40. });
  41. expect(field.draftailEditor.props).toMatchSnapshot();
  42. });
  43. describe('selector conflicts', () => {
  44. it('fails to instantiate on the right field', () => {
  45. document.body.innerHTML = '<meta name="description" content="null" /><input name="description" value="null" />';
  46. expect(() => {
  47. draftail.initEditor('[name="description"]', {}, document.body);
  48. }).toThrow(SyntaxError);
  49. });
  50. it('fails to instantiate on the right field when currentScript is not used', () => {
  51. window.draftail = draftail;
  52. document.body.innerHTML = `
  53. <input name="first" id="description" value="null" />
  54. <div>
  55. <input name="last" id="description" value="null" />
  56. <script>window.draftail.initEditor('#description', {});</script>
  57. </div>
  58. `;
  59. expect(document.querySelector('[name="last"]').draftailEditor).not.toBeDefined();
  60. });
  61. it('has no conflict when currentScript is used', () => {
  62. window.draftail = draftail;
  63. document.body.innerHTML = `
  64. <input name="first" id="description" value="null" />
  65. <div>
  66. <input name="last" id="description" value="null" />
  67. <script>window.draftail.initEditor('#description', {}, document.currentScript);</script>
  68. </div>
  69. `;
  70. expect(document.querySelector('[name="last"]').draftailEditor).toBeDefined();
  71. });
  72. it('uses fallback document.body when currentScript context is wrong', () => {
  73. window.draftail = draftail;
  74. document.body.innerHTML = `
  75. <input id="description" value="null" />
  76. <div>
  77. <script>window.draftail.initEditor('#description', {}, document.currentScript);</script>
  78. </div>
  79. `;
  80. expect(document.querySelector('#description').draftailEditor).toBeDefined();
  81. });
  82. });
  83. });
  84. describe('#wrapWagtailIcon', () => {
  85. it('works', () => {
  86. expect(wrapWagtailIcon({ icon: 'media' }).icon).toMatchSnapshot();
  87. });
  88. it('no icon', () => {
  89. const type = {};
  90. expect(wrapWagtailIcon(type)).toBe(type);
  91. });
  92. it('array icon', () => {
  93. const type = { icon: ['M10 10 H 90 V 90 H 10 Z'] };
  94. expect(wrapWagtailIcon(type)).toBe(type);
  95. });
  96. });
  97. describe('#registerPlugin', () => {
  98. it('works', () => {
  99. const plugin = {
  100. type: 'TEST',
  101. source: null,
  102. decorator: null,
  103. };
  104. expect(draftail.registerPlugin(plugin)).toMatchObject({
  105. TEST: plugin,
  106. });
  107. });
  108. });
  109. it('#Link', () => expect(Link).toBeDefined());
  110. it('#Document', () => expect(Document).toBeDefined());
  111. it('#ImageBlock', () => expect(ImageBlock).toBeDefined());
  112. it('#EmbedBlock', () => expect(EmbedBlock).toBeDefined());
  113. it('#ModalWorkflowSource', () => expect(draftail.ModalWorkflowSource).toBeDefined());
  114. it('#Tooltip', () => expect(draftail.Tooltip).toBeDefined());
  115. it('#TooltipEntity', () => expect(draftail.TooltipEntity).toBeDefined());
  116. });