import { useContextmenuCoordinate } from '../../src/hooks/components/useContextmenuCoordinate'
import renderHook from '../utils/renderHook'
import createRefElement from '../utils/createRefElement'

describe('useContextmenuCoordinate', () => {
  const wrapperRef = createRefElement()
  const [result] = renderHook(() =>
    useContextmenuCoordinate(wrapperRef.element),
  )

  it('should be defined', () => {
    expect(useContextmenuCoordinate).toBeDefined()
  })

  it('should update show value to true when contextmenu event is triggered', async () => {
    wrapperRef.element.dispatchEvent(new MouseEvent('contextmenu'))

    await nextTick()

    expect(result.show.value).toBe(true)
  })

  it('should update show value when calling updateShow method', async () => {
    result.updateShow(false)

    await nextTick()

    expect(result.show.value).toBe(false)

    result.updateShow(true)

    await nextTick()

    expect(result.show.value).toBe(true)
  })

  it('should get the clientX and clientY value when contextmenu event is triggered', async () => {
    const event = new MouseEvent('contextmenu', {
      clientX: 100,
      clientY: 200,
    })
    wrapperRef.element.dispatchEvent(event)

    await nextTick()

    expect(result.x.value).toBe(100)
    expect(result.y.value).toBe(200)
  })
})
