import { describe, it, afterEach, type TestContext } from 'node:test'
import { cleanup, fireEvent, render, screen, waitFor } from '@testing-library/preact'

import messageFactory from './message_factory.tsx'

import { h } from 'preact'

const Message = messageFactory({})

describe('Message', () => {
  afterEach(cleanup)

  it('should display initial count', (t: TestContext) => {
    render(<Message>We are great</Message>)

    t.assert.ok(screen.getByText('We are great'))
  })

  it('should dismiss', async (t: TestContext) => {
    const dismiss = t.mock.fn()

    render(<Message dismiss={dismiss}>We are great</Message>)

    t.assert.equal(dismiss.mock.callCount(), 0)

    fireEvent.click(screen.getByRole('button'))

    await waitFor(() => {
      t.assert.equal(dismiss.mock.callCount(), 1)
    })
  })
})
