test('initializes links plugin and renders dialog', function(assert) {
  const done = assert.async()
  sandbox.stub(Links)
  loadEventListeners({
    linksCB: () => {
      ok(Links.renderDialog.calledWithExactly(fakeEditor))
      done()
    }
  })
  return this.dispatchEvent('initLinks')
})
test('initializes equation editor plugin', function(assert) {
  const done = assert.async()
  loadEventListeners({
    equationCB: view => {
      ok(view instanceof EquationEditorView)
      equal(view.$editor.selector, '#someId')
      done()
    }
  })
  return this.dispatchEvent('initEquation')
})
test('initializes external tools plugin', () => {
  const commandSpy = sinon.spy(fakeEditor, 'addCommand')
  loadEventListeners()
  const event = document.createEvent('CustomEvent')
  const eventData = {
    ed: fakeEditor,
    url: 'someurl.com'
  }
  event.initCustomEvent('tinyRCE/initExternalTools', true, true, eventData)
  document.dispatchEvent(event)
  ok(commandSpy.calledWith('instructureExternalButton__BUTTON_ID__'))
})
test('initializes recording plugin', assert => {
  const done = assert.async()
  const logSpy = sinon.spy(console, 'log')
  assert.expect(1)
  loadEventListeners({
    recordCB() {
      ok(logSpy.calledWith('Kaltura has not been enabled for this account'))
      done()
    }
  })
  const event = document.createEvent('CustomEvent')
  const eventData = {ed: fakeEditor}
  event.initCustomEvent('tinyRCE/initRecord', true, true, eventData)
  return document.dispatchEvent(event)
})
test('builds new image view on RCE event', assert => {
  const done = assert.async()
  assert.expect(1)
  loadEventListeners({
    imagePickerCB: view => {
      ok(view instanceof InsertUpdateImageView)
      done()
    }
  })
  const event = document.createEvent('CustomEvent')
  const eventData = {
    ed: fakeEditor,
    selectNode: '<div></div>'
  }
  event.initCustomEvent('tinyRCE/initImagePicker', true, true, eventData)
  return document.dispatchEvent(event)
})
test('initializes equella plugin', assert => {
  const done = assert.async()
  const alertSpy = sinon.spy(window, 'alert')
  assert.expect(1)
  loadEventListeners({
    equellaCB() {
      ok(
        alertSpy.calledWith(
          'Equella is not properly configured for this account, please notify your system administrator.'
        )
      )
      done()
    }
  })
  const event = document.createEvent('CustomEvent')
  const eventData = {
    ed: fakeEditor,
    selectNode: '<div></div>'
  }
  event.initCustomEvent('tinyRCE/initEquella', true, true, eventData)
  return document.dispatchEvent(event)
})