gitlab-org--gitlab-foss/spec/javascripts/gl_form_spec.js.es6
Mike Greiling 5fcbe12730 Merge branch 'master' into go-go-gadget-webpack
* master: (83 commits)
  Fix small typo on new branch button spec
  Abillity to promote project labels to group labels
  Update and pin the `jwt` gem to ~> 1.5.6
  refactor merge request build service
  Update index.md
  Clarify that Auto Deploy requires a public project.
  cop for gem fetched from a git source
  Add CHANGELOG entry
  Remove new branch button for confidential issues
  Remove flash warning from login page
  add complete changelog
  Add project ID index to `project_authorizations` table to optimize queries
  Fix disable storing of sensitive information when importing a new repo
  Fix notification when global=disabled, group=watch
  Ensure rake is called within the correct bundle context
  Fix 8.16.0 release date.
  Improve search within group logic
  Add changelog item about new attributes in group api
  Update group api doc with full_name and full_path attributes
  Add tests for nested groups in search service and search helper
  ...
2017-01-31 14:38:45 -06:00

123 lines
4 KiB
JavaScript

/* global autosize */
window.autosize = require('vendor/autosize');
require('~/gl_form');
require('~/lib/utils/text_utility');
require('~/lib/utils/common_utils');
describe('GLForm', () => {
const global = window.gl || (window.gl = {});
const GLForm = global.GLForm;
it('should be defined in the global scope', () => {
expect(GLForm).toBeDefined();
});
describe('when instantiated', function () {
beforeEach((done) => {
this.form = $('<form class="gfm-form"><textarea class="js-gfm-input"></form>');
this.textarea = this.form.find('textarea');
spyOn($.prototype, 'off').and.returnValue(this.textarea);
spyOn($.prototype, 'on').and.returnValue(this.textarea);
spyOn($.prototype, 'css');
spyOn(window, 'autosize');
this.glForm = new GLForm(this.form);
setTimeout(() => {
$.prototype.off.calls.reset();
$.prototype.on.calls.reset();
$.prototype.css.calls.reset();
autosize.calls.reset();
done();
});
});
describe('.setupAutosize', () => {
beforeEach((done) => {
this.glForm.setupAutosize();
setTimeout(() => {
done();
});
});
it('should register an autosize event handler on the textarea', () => {
expect($.prototype.off).toHaveBeenCalledWith('autosize:resized');
expect($.prototype.on).toHaveBeenCalledWith('autosize:resized', jasmine.any(Function));
});
it('should register a mouseup event handler on the textarea', () => {
expect($.prototype.off).toHaveBeenCalledWith('mouseup.autosize');
expect($.prototype.on).toHaveBeenCalledWith('mouseup.autosize', jasmine.any(Function));
});
it('should autosize the textarea', () => {
expect(autosize).toHaveBeenCalledWith(jasmine.any(Object));
});
it('should set the resize css property to vertical', () => {
expect($.prototype.css).toHaveBeenCalledWith('resize', 'vertical');
});
});
describe('.setHeightData', () => {
beforeEach(() => {
spyOn($.prototype, 'data');
spyOn($.prototype, 'outerHeight').and.returnValue(200);
this.glForm.setHeightData();
});
it('should set the height data attribute', () => {
expect($.prototype.data).toHaveBeenCalledWith('height', 200);
});
it('should call outerHeight', () => {
expect($.prototype.outerHeight).toHaveBeenCalled();
});
});
describe('.destroyAutosize', () => {
describe('when called', () => {
beforeEach(() => {
spyOn($.prototype, 'data');
spyOn($.prototype, 'outerHeight').and.returnValue(200);
spyOn(window, 'outerHeight').and.returnValue(400);
spyOn(autosize, 'destroy');
this.glForm.destroyAutosize();
});
it('should call outerHeight', () => {
expect($.prototype.outerHeight).toHaveBeenCalled();
});
it('should get data-height attribute', () => {
expect($.prototype.data).toHaveBeenCalledWith('height');
});
it('should call autosize destroy', () => {
expect(autosize.destroy).toHaveBeenCalledWith(this.textarea);
});
it('should set the data-height attribute', () => {
expect($.prototype.data).toHaveBeenCalledWith('height', 200);
});
it('should set the outerHeight', () => {
expect($.prototype.outerHeight).toHaveBeenCalledWith(200);
});
it('should set the css', () => {
expect($.prototype.css).toHaveBeenCalledWith('max-height', window.outerHeight);
});
});
it('should return undefined if the data-height equals the outerHeight', () => {
spyOn($.prototype, 'outerHeight').and.returnValue(200);
spyOn($.prototype, 'data').and.returnValue(200);
spyOn(autosize, 'destroy');
expect(this.glForm.destroyAutosize()).toBeUndefined();
expect(autosize.destroy).not.toHaveBeenCalled();
});
});
});
});