bv-modal-event.class.spec.js 2.31 KB
import { BvEvent } from '../../../utils/bv-event.class'
import { BvModalEvent } from './bv-modal-event.class'

describe('modal > BvModalEvent', () => {
  it('works', async () => {
    const event = new BvModalEvent('foobar')
    expect(event).toBeInstanceOf(BvModalEvent)
    expect(event).toBeInstanceOf(BvEvent)
    expect(event.type).toBe('foobar')
  })

  it('throws exception if no type given', async () => {
    let event = null
    let failed = false
    try {
      event = new BvModalEvent()
    } catch (e) {
      failed = true
    }
    expect(event).not.toBeInstanceOf(BvModalEvent)
    expect(event).not.toBeInstanceOf(BvEvent)
    expect(event).toBe(null)
    expect(failed).toBe(true)
  })

  it('supports cancelable events via event.preventDefault()', async () => {
    const event = new BvModalEvent('foobar', {
      cancelable: true
    })
    expect(event).toBeInstanceOf(BvModalEvent)
    expect(event.type).toBe('foobar')
    expect(event.cancelable).toBe(true)
    expect(event.defaultPrevented).toBe(false)
    event.preventDefault()
    expect(event.defaultPrevented).toBe(true)
  })

  it('supports non cancelable events', async () => {
    const event = new BvModalEvent('foobar', {
      cancelable: false
    })
    expect(event).toBeInstanceOf(BvModalEvent)
    expect(event.type).toBe('foobar')
    expect(event.cancelable).toBe(false)
    expect(event.defaultPrevented).toBe(false)
    event.preventDefault()
    expect(event.defaultPrevented).toBe(false)
  })

  it('supports built in properties', async () => {
    const event = new BvModalEvent('foobar', {
      target: 'baz',
      trigger: 'ok',
      componentId: 'foo'
    })
    expect(event).toBeInstanceOf(BvModalEvent)
    expect(event.type).toBe('foobar')
    expect(event.cancelable).toBe(true)
    expect(event.target).toBe('baz')
    expect(event.trigger).toBe('ok')
    expect(event.componentId).toBe('foo')

    let failed = false
    try {
      event.trigger = 'foobar'
    } catch (e) {
      failed = true
    }
    expect(failed).toBe(true)
    expect(event.trigger).toBe('ok')
  })

  it('supports custom properties', async () => {
    const event = new BvEvent('foobar', {
      custom: 123
    })
    expect(event).toBeInstanceOf(BvEvent)
    expect(event.type).toBe('foobar')
    expect(event.cancelable).toBe(true)
    expect(event.custom).toBe(123)
  })
})