import { describe, it, expect, beforeEach, vi } from 'vitest'
import { initShare } from '../../assets/modules/share.js'
describe('initShare', () => {
beforeEach(() => {
document.body.innerHTML = ''
})
it('does nothing without share buttons', () => {
expect(() => initShare()).not.toThrow()
})
it('copies URL to clipboard on click', async () => {
document.body.innerHTML = `
`
const writeText = vi.fn().mockResolvedValue(undefined)
globalThis.navigator = { clipboard: { writeText } }
initShare()
document.querySelector('[data-share-copy]').click()
await new Promise(r => setTimeout(r, 10))
expect(writeText).toHaveBeenCalledWith('https://example.com/event/1')
})
it('shows checkmark after copy then restores', async () => {
vi.useFakeTimers()
document.body.innerHTML = `
`
globalThis.navigator = { clipboard: { writeText: vi.fn().mockResolvedValue(undefined) } }
initShare()
const btn = document.querySelector('[data-share-copy]')
const originalHtml = btn.innerHTML
btn.click()
await vi.advanceTimersByTimeAsync(100)
expect(btn.innerHTML).toContain('M5 13l4 4L19 7')
vi.advanceTimersByTime(1500)
expect(btn.innerHTML).toBe(originalHtml)
vi.useRealTimers()
})
it('handles multiple share buttons', async () => {
document.body.innerHTML = `
`
const writeText = vi.fn().mockResolvedValue(undefined)
globalThis.navigator = { clipboard: { writeText } }
initShare()
document.querySelectorAll('[data-share-copy]')[1].click()
await new Promise(r => setTimeout(r, 10))
expect(writeText).toHaveBeenCalledWith('https://b.com')
})
})