quick_submit_spec.js.coffee 2.0 KB
Newer Older
R
Robert Speicher 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
#= require behaviors/quick_submit

describe 'Quick Submit behavior', ->
  fixture.preload('behaviors/quick_submit.html')

  beforeEach ->
    fixture.load('behaviors/quick_submit.html')

    # Prevent a form submit from moving us off the testing page
    $('form').submit (e) -> e.preventDefault()

    @spies = {
      submit: spyOnEvent('form', 'submit')
    }

  it 'does not respond to other keyCodes', ->
    $('input').trigger(keydownEvent(keyCode: 32))

    expect(@spies.submit).not.toHaveBeenTriggered()

  it 'does not respond to Enter alone', ->
    $('input').trigger(keydownEvent(ctrlKey: false, metaKey: false))

    expect(@spies.submit).not.toHaveBeenTriggered()

  it 'disables submit buttons', ->
    $('textarea').trigger(keydownEvent())

    expect($('input[type=submit]')).toBeDisabled()
    expect($('button[type=submit]')).toBeDisabled()

  # We cannot stub `navigator.userAgent` for CI's `rake teaspoon` task, so we'll
  # only run the tests that apply to the current platform
  if navigator.userAgent.match(/Macintosh/)
    it 'responds to Meta+Enter', ->
      $('input').trigger(keydownEvent())

      expect(@spies.submit).toHaveBeenTriggered()

    it 'excludes other modifier keys', ->
      $('input').trigger(keydownEvent(altKey: true))
      $('input').trigger(keydownEvent(ctrlKey: true))
      $('input').trigger(keydownEvent(shiftKey: true))

      expect(@spies.submit).not.toHaveBeenTriggered()
  else
    it 'responds to Ctrl+Enter', ->
      $('input').trigger(keydownEvent())

      expect(@spies.submit).toHaveBeenTriggered()

    it 'excludes other modifier keys', ->
      $('input').trigger(keydownEvent(altKey: true))
      $('input').trigger(keydownEvent(metaKey: true))
      $('input').trigger(keydownEvent(shiftKey: true))

      expect(@spies.submit).not.toHaveBeenTriggered()

  keydownEvent = (options) ->
    if navigator.userAgent.match(/Macintosh/)
      defaults = { keyCode: 13, metaKey: true }
    else
      defaults = { keyCode: 13, ctrlKey: true }

    $.Event('keydown', $.extend({}, defaults, options))