import { describe, expect, it, vi } from 'vitest'
import { render, screen, fireEvent } from '@testing-library/react'
import { DashboardShell } from './DashboardShell'

describe('DashboardShell', () => {
  it('exposes nav, banner, and main landmarks with a skip link target', () => {
    render(
      <DashboardShell sidebar={<span>Nav items</span>} topbar={<span>Top</span>}>
        Page body
      </DashboardShell>,
    )
    expect(screen.getByRole('navigation')).toBeDefined()
    expect(screen.getByRole('banner')).toBeDefined()
    const main = screen.getByRole('main')
    expect(main).toHaveTextContent('Page body')
    const skip = screen.getByRole('link', { name: 'Skip to main content' })
    expect(skip.getAttribute('href')).toBe(`#${main.id}`)
  })

  it('keeps sidebar toggle focusable in keyboard order (edge: collapsed)', () => {
    const onSidebarToggle = vi.fn()
    render(
      <DashboardShell sidebar="Side" sidebarCollapsed onSidebarToggle={onSidebarToggle}>
        Body
      </DashboardShell>,
    )
    const toggle = screen.getByRole('button', { name: 'Toggle sidebar' })
    expect(toggle.getAttribute('aria-expanded')).toBe('false')
    fireEvent.click(toggle)
    expect(onSidebarToggle).toHaveBeenCalledTimes(1)
  })
})
