// @vitest-environment happy-dom
import { describe, it, expect } from 'vitest'
import { mount } from '@vue/test-utils'

import KebabMenu from '../../src/components/common/KebabMenu.vue'

// Canonical kebab primitive (DRY pattern-consistency sweep). Vuetify components
// are left unresolved by the test harness, so we assert the wiring the consumers
// rely on: the trigger's aria-label, the default kebab glyph, and that the
// consumer's menu items (default slot) are rendered inside the menu.
function mountKebab (props = {}) {
  return mount(KebabMenu, {
    props,
    slots: {
      default: '<v-list-item>Rename</v-list-item><v-list-item>Delete</v-list-item>',
    },
  })
}

describe('KebabMenu', () => {
  it('renders the trigger with the provided aria-label and the slotted items', () => {
    const w = mountKebab({ label: 'Actions for Foo' })
    expect(w.text()).toContain('Rename')
    expect(w.text()).toContain('Delete')
    expect(w.html()).toContain('Actions for Foo')
  })

  it('defaults the trigger glyph to the kebab icon', () => {
    expect(mountKebab().html()).toContain('mdi-dots-vertical')
  })

  it('passes presentational props through to the trigger/menu', () => {
    const w = mountKebab({ size: 'small', variant: 'flat', location: 'bottom end' })
    const html = w.html()
    expect(html).toContain('small')
    expect(html).toContain('flat')
  })
})
