import React from 'react'
import { render, fireEvent, screen } from '@testing-library/react'
import { InputColor } from './index'
describe('InputColor', () => {
test('renders label and preview box', () => {
render()
// label
expect(screen.getByText('Color')).toBeInTheDocument()
// preview (solo tiene role="button")
const preview = screen.getByRole('button')
expect(preview).toBeInTheDocument()
})
test('opens and closes the color panel', () => {
render()
const preview = screen.getByRole('button')
// open panel
fireEvent.click(preview)
expect(screen.getByTestId('color-panel')).toBeInTheDocument()
// close panel
fireEvent.click(preview)
expect(screen.queryByTestId('color-panel')).not.toBeInTheDocument()
})
test('updates hue slider and triggers onChange', () => {
const onChange = jest.fn()
render()
const preview = screen.getByRole('button')
fireEvent.click(preview) // open
const hueBar = screen.getByTestId('hue-bar')
// rect fake
jest
.spyOn(hueBar, 'getBoundingClientRect')
.mockReturnValue({ left: 0, width: 200 } as DOMRect)
fireEvent.mouseDown(hueBar, { clientX: 50 })
fireEvent.mouseMove(hueBar, { clientX: 120, buttons: 1 })
fireEvent.mouseUp(hueBar)
expect(onChange).toHaveBeenCalled()
})
test('copies the hex value', () => {
Object.assign(navigator, {
clipboard: {
writeText: jest.fn(),
},
})
render()
fireEvent.click(screen.getByRole('button')) // open panel
const copyButton = screen.getByText('Copiar')
fireEvent.click(copyButton)
expect(navigator.clipboard.writeText).toHaveBeenCalledWith('#ff0000')
})
})