import { describe, it, expect, beforeEach, afterEach } from 'vitest'
import { act, render } from '@testing-library/react'
import { Provider } from '../provider/widget-provider'
import { clearAllWidgetStores, getWidgetStore } from './widget-store-registry'
import { useTransformEnabled } from './use-transform-enabled'
beforeEach(() => clearAllWidgetStores())
afterEach(() => clearAllWidgetStores())
function Probe({
id,
transformId,
onValue,
}: {
id: string
transformId: string
onValue: (v: boolean) => void
}) {
const enabled = useTransformEnabled(id, transformId)
onValue(enabled)
return null
}
describe('useTransformEnabled', () => {
it('returns false when the transform has not been registered', () => {
const calls: boolean[] = []
render(
calls.push(v)}
/>
,
)
expect(calls[calls.length - 1]).toBe(false)
})
it('returns true when `transformStates..enabled` is true; updates reactively', () => {
const calls: boolean[] = []
render(
calls.push(v)}
/>
,
)
// Initial — no transform registered.
expect(calls[calls.length - 1]).toBe(false)
// Simulate SearcherToggle enabling itself.
act(() => {
const store = getWidgetStore('ute-2')
store.setState({
transformStates: {
...store.getState().transformStates,
searcher: { enabled: true },
},
})
})
expect(calls[calls.length - 1]).toBe(true)
// Disable.
act(() => {
const store = getWidgetStore('ute-2')
store.setState({
transformStates: {
...store.getState().transformStates,
searcher: { enabled: false },
},
})
})
expect(calls[calls.length - 1]).toBe(false)
})
it('returns false when `enabled` is a non-true truthy value (strict boolean check)', () => {
// Defensive: the helper uses `=== true`, so non-boolean truthy values
// shouldn't accidentally activate features. Guards against future
// store-shape drift.
const calls: boolean[] = []
render(
calls.push(v)}
/>
,
)
act(() => {
const store = getWidgetStore('ute-3')
store.setState({
transformStates: {
...store.getState().transformStates,
// @ts-expect-error — intentional shape violation for the boundary test.
searcher: { enabled: 'yes' },
},
})
})
expect(calls[calls.length - 1]).toBe(false)
})
it('returns false for an unknown transform id while others are enabled', () => {
const calls: boolean[] = []
render(
calls.push(v)}
/>
,
)
act(() => {
const store = getWidgetStore('ute-4')
store.setState({
transformStates: {
...store.getState().transformStates,
searcher: { enabled: true },
},
})
})
expect(calls[calls.length - 1]).toBe(false)
})
})