import { render, screen } from '@testing-library/react'
import ChatVariableTrigger from './chat-variable-trigger'
const mockUseNodesReadOnly = vi.fn()
const mockUseIsChatMode = vi.fn()
vi.mock('@/app/components/workflow/hooks', () => ({
useNodesReadOnly: () => mockUseNodesReadOnly(),
}))
vi.mock('../../hooks', () => ({
useIsChatMode: () => mockUseIsChatMode(),
}))
vi.mock('@/app/components/workflow/header/chat-variable-button', () => ({
default: ({ disabled }: { disabled: boolean }) => (
),
}))
describe('ChatVariableTrigger', () => {
beforeEach(() => {
vi.clearAllMocks()
})
// Verifies conditional rendering when chat mode is off.
describe('Rendering', () => {
it('should not render when not in chat mode', () => {
// Arrange
mockUseIsChatMode.mockReturnValue(false)
mockUseNodesReadOnly.mockReturnValue({ nodesReadOnly: false })
// Act
render()
// Assert
expect(screen.queryByRole('button', { name: 'ChatVariableButton' })).not.toBeInTheDocument()
})
})
// Verifies the disabled state reflects read-only nodes.
describe('Props', () => {
it('should render enabled ChatVariableButton when nodes are editable', () => {
// Arrange
mockUseIsChatMode.mockReturnValue(true)
mockUseNodesReadOnly.mockReturnValue({ nodesReadOnly: false })
// Act
render()
// Assert
expect(screen.getByRole('button', { name: 'ChatVariableButton' })).toBeEnabled()
})
it('should render disabled ChatVariableButton when nodes are read-only', () => {
// Arrange
mockUseIsChatMode.mockReturnValue(true)
mockUseNodesReadOnly.mockReturnValue({ nodesReadOnly: true })
// Act
render()
// Assert
expect(screen.getByRole('button', { name: 'ChatVariableButton' })).toBeDisabled()
})
})
})