import { describe, test, expect, vi } from 'vitest'
import { render, screen, fireEvent } from '@testing-library/react'
import { Group } from './group'
describe('Group', () => {
const mockOptions = [
{ id: 'basemap1', label: 'Basemap 1', icon: 'icon1.png' },
{ id: 'basemap2', label: 'Basemap 2', icon: 'icon2.png' },
]
const mockOnChange = vi.fn()
test('should render all provided basemap options', () => {
render(
,
)
mockOptions.forEach((option) => {
expect(screen.getByText(option.label)).toBeDefined()
expect(screen.getByLabelText(option.label)).toBeDefined() // Button has aria-label equal to option.label
expect(screen.getByLabelText(option.label + ' icon')).toBeDefined() // Image has aria-label equal to option.label + ' icon'
})
})
test('should mark selected option correctly', () => {
render(
,
)
const selectedImg = screen.getByLabelText('Basemap 1 icon') // The img element
expect(selectedImg.getAttribute('data-active')).toBe('true')
const nonSelectedImg = screen.getByLabelText('Basemap 2 icon') // The img element
expect(nonSelectedImg.getAttribute('data-active')).toBe('false')
})
test('should call onChange with correct ID when an option is clicked', () => {
render(
,
)
const button = screen.getByLabelText('Basemap 2')
fireEvent.click(button)
expect(mockOnChange).toHaveBeenCalledTimes(1)
expect(mockOnChange).toHaveBeenCalledWith('basemap2')
})
})