summaryrefslogtreecommitdiff
path: root/spec/frontend/zen_mode_spec.js
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-06-18 11:18:50 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-06-18 11:18:50 +0000
commit8c7f4e9d5f36cff46365a7f8c4b9c21578c1e781 (patch)
treea77e7fe7a93de11213032ed4ab1f33a3db51b738 /spec/frontend/zen_mode_spec.js
parent00b35af3db1abfe813a778f643dad221aad51fca (diff)
downloadgitlab-ce-8c7f4e9d5f36cff46365a7f8c4b9c21578c1e781.tar.gz
Add latest changes from gitlab-org/gitlab@13-1-stable-ee
Diffstat (limited to 'spec/frontend/zen_mode_spec.js')
-rw-r--r--spec/frontend/zen_mode_spec.js112
1 files changed, 112 insertions, 0 deletions
diff --git a/spec/frontend/zen_mode_spec.js b/spec/frontend/zen_mode_spec.js
new file mode 100644
index 00000000000..8e0d170289b
--- /dev/null
+++ b/spec/frontend/zen_mode_spec.js
@@ -0,0 +1,112 @@
+import $ from 'jquery';
+import axios from 'axios';
+import MockAdapter from 'axios-mock-adapter';
+import Dropzone from 'dropzone';
+import Mousetrap from 'mousetrap';
+import ZenMode from '~/zen_mode';
+import initNotes from '~/init_notes';
+
+describe('ZenMode', () => {
+ let mock;
+ let zen;
+ let dropzoneForElementSpy;
+ const fixtureName = 'snippets/show.html';
+
+ preloadFixtures(fixtureName);
+
+ function enterZen() {
+ $('.notes-form .js-zen-enter').click();
+ }
+
+ function exitZen() {
+ $('.notes-form .js-zen-leave').click();
+ }
+
+ function escapeKeydown() {
+ $('.notes-form textarea').trigger(
+ $.Event('keydown', {
+ keyCode: 27,
+ }),
+ );
+ }
+
+ beforeEach(() => {
+ mock = new MockAdapter(axios);
+ mock.onGet().reply(200);
+
+ loadFixtures(fixtureName);
+ initNotes();
+
+ dropzoneForElementSpy = jest.spyOn(Dropzone, 'forElement').mockImplementation(() => ({
+ enable: () => true,
+ }));
+ zen = new ZenMode();
+
+ // Set this manually because we can't actually scroll the window
+ zen.scroll_position = 456;
+ });
+
+ describe('enabling dropzone', () => {
+ beforeEach(() => {
+ enterZen();
+ });
+
+ it('should not call dropzone if element is not dropzone valid', () => {
+ $('.div-dropzone').addClass('js-invalid-dropzone');
+ exitZen();
+
+ expect(dropzoneForElementSpy.mock.calls.length).toEqual(0);
+ });
+
+ it('should call dropzone if element is dropzone valid', () => {
+ $('.div-dropzone').removeClass('js-invalid-dropzone');
+ exitZen();
+
+ expect(dropzoneForElementSpy.mock.calls.length).toEqual(2);
+ });
+ });
+
+ describe('on enter', () => {
+ it('pauses Mousetrap', () => {
+ const mouseTrapPauseSpy = jest.spyOn(Mousetrap, 'pause');
+ enterZen();
+
+ expect(mouseTrapPauseSpy).toHaveBeenCalled();
+ });
+
+ it('removes textarea styling', () => {
+ $('.notes-form textarea').attr('style', 'height: 400px');
+ enterZen();
+
+ expect($('.notes-form textarea')).not.toHaveAttr('style');
+ });
+ });
+
+ describe('in use', () => {
+ beforeEach(enterZen);
+
+ it('exits on Escape', () => {
+ escapeKeydown();
+
+ expect($('.notes-form .zen-backdrop')).not.toHaveClass('fullscreen');
+ });
+ });
+
+ describe('on exit', () => {
+ beforeEach(enterZen);
+
+ it('unpauses Mousetrap', () => {
+ const mouseTrapUnpauseSpy = jest.spyOn(Mousetrap, 'unpause');
+ exitZen();
+
+ expect(mouseTrapUnpauseSpy).toHaveBeenCalled();
+ });
+
+ it('restores the scroll position', () => {
+ jest.spyOn(zen, 'scrollTo').mockImplementation(() => {});
+ exitZen();
+
+ expect(zen.scrollTo).toHaveBeenCalled();
+ });
+ });
+});