summaryrefslogtreecommitdiff
path: root/spec/frontend/wikis_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/wikis_spec.js')
-rw-r--r--spec/frontend/wikis_spec.js222
1 files changed, 127 insertions, 95 deletions
diff --git a/spec/frontend/wikis_spec.js b/spec/frontend/wikis_spec.js
index cf1ea972697..c4a2bf1a69a 100644
--- a/spec/frontend/wikis_spec.js
+++ b/spec/frontend/wikis_spec.js
@@ -1,128 +1,160 @@
import { escape } from 'lodash';
+import { setHTMLFixture } from 'helpers/fixtures';
import Wikis from '~/pages/shared/wikis/wikis';
import Tracking from '~/tracking';
-import { setHTMLFixture } from './helpers/fixtures';
describe('Wikis', () => {
- describe('setting the commit message when the title changes', () => {
- const editFormHtmlFixture = args => `<form class="wiki-form ${
- args.newPage ? 'js-new-wiki-page' : ''
- }">
- <input type="text" id="wiki_title" value="My title" />
- <input type="text" id="wiki_message" />
- <select class="form-control select-control" name="wiki[format]" id="wiki_format">
- <option value="markdown">Markdown</option>
- <option selected="selected" value="rdoc">RDoc</option>
- <option value="asciidoc">AsciiDoc</option>
- <option value="org">Org</option>
- </select>
- <textarea id="wiki_content"></textarea>
- <code class="js-markup-link-example">{Link title}[link:page-slug]</code>
- </form>
- `;
-
- let wikis;
- let titleInput;
- let messageInput;
- let changeFormatSelect;
- let linkExample;
-
- const findBeforeUnloadWarning = () => window.onbeforeunload?.();
- const findContent = () => document.getElementById('wiki_content');
- const findForm = () => document.querySelector('.wiki-form');
-
- describe('when the wiki page is being created', () => {
- const formHtmlFixture = editFormHtmlFixture({ newPage: true });
+ const editFormHtmlFixture = (args) => `<form class="wiki-form ${
+ args.newPage ? 'js-new-wiki-page' : ''
+ }">
+ <input type="text" id="wiki_title" value="My title" />
+ <input type="text" id="wiki_message" />
+ <select class="form-control select-control" name="wiki[format]" id="wiki_format">
+ <option value="markdown">Markdown</option>
+ <option selected="selected" value="rdoc">RDoc</option>
+ <option value="asciidoc">AsciiDoc</option>
+ <option value="org">Org</option>
+ </select>
+ <textarea id="wiki_content"></textarea>
+ <code class="js-markup-link-example">{Link title}[link:page-slug]</code>
+ <input type="submit" class="js-wiki-btn-submit">
+ </input>
+ </form>
+ `;
+
+ let wikis;
+ let titleInput;
+ let contentInput;
+ let messageInput;
+ let changeFormatSelect;
+ let linkExample;
+
+ const findBeforeUnloadWarning = () => window.onbeforeunload?.();
+ const findForm = () => document.querySelector('.wiki-form');
+ const findSubmitButton = () => document.querySelector('.js-wiki-btn-submit');
+
+ describe('when the wiki page is being created', () => {
+ const formHtmlFixture = editFormHtmlFixture({ newPage: true });
- beforeEach(() => {
- setHTMLFixture(formHtmlFixture);
+ beforeEach(() => {
+ setHTMLFixture(formHtmlFixture);
- titleInput = document.getElementById('wiki_title');
- messageInput = document.getElementById('wiki_message');
- changeFormatSelect = document.querySelector('#wiki_format');
- linkExample = document.querySelector('.js-markup-link-example');
- wikis = new Wikis();
- });
+ titleInput = document.getElementById('wiki_title');
+ messageInput = document.getElementById('wiki_message');
+ changeFormatSelect = document.querySelector('#wiki_format');
+ linkExample = document.querySelector('.js-markup-link-example');
+ wikis = new Wikis();
+ });
- it('binds an event listener to the title input', () => {
- wikis.handleWikiTitleChange = jest.fn();
+ it('binds an event listener to the title input', () => {
+ wikis.handleWikiTitleChange = jest.fn();
- titleInput.dispatchEvent(new Event('keyup'));
+ titleInput.dispatchEvent(new Event('keyup'));
- expect(wikis.handleWikiTitleChange).toHaveBeenCalled();
- });
+ expect(wikis.handleWikiTitleChange).toHaveBeenCalled();
+ });
- it('sets the commit message when title changes', () => {
- titleInput.value = 'My title';
- messageInput.value = '';
+ it('sets the commit message when title changes', () => {
+ titleInput.value = 'My title';
+ messageInput.value = '';
- titleInput.dispatchEvent(new Event('keyup'));
+ titleInput.dispatchEvent(new Event('keyup'));
- expect(messageInput.value).toEqual('Create My title');
- });
+ expect(messageInput.value).toEqual('Create My title');
+ });
- it('replaces hyphens with spaces', () => {
- titleInput.value = 'my-hyphenated-title';
- titleInput.dispatchEvent(new Event('keyup'));
+ it('replaces hyphens with spaces', () => {
+ titleInput.value = 'my-hyphenated-title';
+ titleInput.dispatchEvent(new Event('keyup'));
- expect(messageInput.value).toEqual('Create my hyphenated title');
- });
+ expect(messageInput.value).toEqual('Create my hyphenated title');
});
+ });
- describe('when the wiki page is being updated', () => {
- const formHtmlFixture = editFormHtmlFixture({ newPage: false });
+ describe('when the wiki page is being updated', () => {
+ const formHtmlFixture = editFormHtmlFixture({ newPage: false });
- beforeEach(() => {
- setHTMLFixture(formHtmlFixture);
+ beforeEach(() => {
+ setHTMLFixture(formHtmlFixture);
- titleInput = document.getElementById('wiki_title');
- messageInput = document.getElementById('wiki_message');
- wikis = new Wikis();
- });
+ titleInput = document.getElementById('wiki_title');
+ messageInput = document.getElementById('wiki_message');
+ wikis = new Wikis();
+ });
- it('sets the commit message when title changes, prefixing with "Update"', () => {
- titleInput.value = 'My title';
- messageInput.value = '';
+ it('sets the commit message when title changes, prefixing with "Update"', () => {
+ titleInput.value = 'My title';
+ messageInput.value = '';
- titleInput.dispatchEvent(new Event('keyup'));
+ titleInput.dispatchEvent(new Event('keyup'));
- expect(messageInput.value).toEqual('Update My title');
+ expect(messageInput.value).toEqual('Update My title');
+ });
+
+ it.each`
+ value | text
+ ${'markdown'} | ${'[Link Title](page-slug)'}
+ ${'rdoc'} | ${'{Link title}[link:page-slug]'}
+ ${'asciidoc'} | ${'link:page-slug[Link title]'}
+ ${'org'} | ${'[[page-slug]]'}
+ `('updates a message when value=$value is selected', ({ value, text }) => {
+ changeFormatSelect.value = value;
+ changeFormatSelect.dispatchEvent(new Event('change'));
+
+ expect(linkExample.innerHTML).toBe(text);
+ });
+
+ it('starts with no unload warning', () => {
+ expect(findBeforeUnloadWarning()).toBeUndefined();
+ });
+
+ describe('when wiki content is updated', () => {
+ beforeEach(() => {
+ contentInput = document.getElementById('wiki_content');
+ contentInput.value = 'Lorem ipsum dolar sit!';
+ contentInput.dispatchEvent(new Event('input'));
});
- it.each`
- value | text
- ${'markdown'} | ${'[Link Title](page-slug)'}
- ${'rdoc'} | ${'{Link title}[link:page-slug]'}
- ${'asciidoc'} | ${'link:page-slug[Link title]'}
- ${'org'} | ${'[[page-slug]]'}
- `('updates a message when value=$value is selected', ({ value, text }) => {
- changeFormatSelect.value = value;
- changeFormatSelect.dispatchEvent(new Event('change'));
-
- expect(linkExample.innerHTML).toBe(text);
+ it('sets before unload warning', () => {
+ expect(findBeforeUnloadWarning()).toBe('');
});
- it('starts with no unload warning', () => {
+ it('when form submitted, unsets before unload warning', () => {
+ findForm().dispatchEvent(new Event('submit'));
expect(findBeforeUnloadWarning()).toBeUndefined();
});
+ });
+ });
- describe('when wiki content is updated', () => {
- beforeEach(() => {
- const content = findContent();
- content.value = 'Lorem ipsum dolar sit!';
- content.dispatchEvent(new Event('input'));
- });
-
- it('sets before unload warning', () => {
- expect(findBeforeUnloadWarning()).toBe('');
- });
-
- it('when form submitted, unsets before unload warning', () => {
- findForm().dispatchEvent(new Event('submit'));
- expect(findBeforeUnloadWarning()).toBeUndefined();
- });
- });
+ describe('submit button state', () => {
+ beforeEach(() => {
+ setHTMLFixture(editFormHtmlFixture({ newPage: true }));
+
+ titleInput = document.getElementById('wiki_title');
+ contentInput = document.getElementById('wiki_content');
+
+ wikis = new Wikis();
});
+
+ it.each`
+ title | text | buttonState | disabledAttr
+ ${'something'} | ${'something'} | ${'enabled'} | ${null}
+ ${''} | ${'something'} | ${'disabled'} | ${'true'}
+ ${'something'} | ${''} | ${'disabled'} | ${'true'}
+ ${''} | ${''} | ${'disabled'} | ${'true'}
+ ${' '} | ${' '} | ${'disabled'} | ${'true'}
+ `(
+ "when title='$title', content='$content', then, buttonState='$buttonState'",
+ ({ title, text, disabledAttr }) => {
+ titleInput.value = title;
+ titleInput.dispatchEvent(new Event('keyup'));
+
+ contentInput.value = text;
+ contentInput.dispatchEvent(new Event('input'));
+
+ expect(findSubmitButton().getAttribute('disabled')).toBe(disabledAttr);
+ },
+ );
});
describe('trackPageView', () => {