import { describe, it, expect, beforeAll, afterEach, vi } from 'vitest'
import BaseComponent from '../../../src/bootstrap/base-component'
import { enableDismissTrigger } from '../../../src/bootstrap/util/component-functions'
import { clearFixture, createEvent, getFixture } from '../../helpers/fixture'
class DummyClass extends BaseComponent {
static get NAME(): string {
return 'test'
}
hide() {
return true
}
testMethod() {
return true
}
}
describe('Component Functions', () => {
let fixtureEl: HTMLElement
beforeAll(() => {
fixtureEl = getFixture()
})
afterEach(() => {
clearFixture()
})
describe('data-bs-dismiss', () => {
it('should get plugin and execute given method on click', () => {
fixtureEl.innerHTML = ['
', ' ', '
'].join('')
const spyGet = vi.spyOn(DummyClass, 'getOrCreateInstance')
const spyTest = vi.spyOn(DummyClass.prototype, 'testMethod')
enableDismissTrigger(DummyClass, 'testMethod')
fixtureEl.querySelector('[data-bs-dismiss="test"]')!.dispatchEvent(createEvent('click'))
expect(spyGet).toHaveBeenCalled()
expect(spyTest).toHaveBeenCalled()
vi.restoreAllMocks()
})
it('should use closest class when no data-bs-target', () => {
fixtureEl.innerHTML = ['', ' ', '
'].join('')
const spyGet = vi.spyOn(DummyClass, 'getOrCreateInstance')
const spyHide = vi.spyOn(DummyClass.prototype, 'hide')
enableDismissTrigger(DummyClass)
fixtureEl.querySelector('[data-bs-dismiss="test"]')!.dispatchEvent(createEvent('click'))
expect(spyGet).toHaveBeenCalled()
expect(spyHide).toHaveBeenCalled()
vi.restoreAllMocks()
})
it('should not trigger if disabled', () => {
fixtureEl.innerHTML = ['', ' ', '
'].join('')
const spy = vi.spyOn(DummyClass, 'getOrCreateInstance')
enableDismissTrigger(DummyClass)
fixtureEl.querySelector('[data-bs-dismiss="test"]')!.dispatchEvent(createEvent('click'))
expect(spy).not.toHaveBeenCalled()
vi.restoreAllMocks()
})
it('should preventDefault for elements', () => {
fixtureEl.innerHTML = [''].join('')
enableDismissTrigger(DummyClass)
const preventSpy = vi.spyOn(Event.prototype, 'preventDefault')
fixtureEl.querySelector('[data-bs-dismiss="test"]')!.dispatchEvent(createEvent('click'))
expect(preventSpy).toHaveBeenCalled()
vi.restoreAllMocks()
})
})
})