Skip to content

Commit

Permalink
finish useCombo tests
Browse files Browse the repository at this point in the history
  • Loading branch information
silviuaavram committed Mar 1, 2024
1 parent eaaf0d2 commit d2b5455
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 2 deletions.
63 changes: 62 additions & 1 deletion src/hooks/useCombobox/__tests__/props.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ describe('props', () => {
)
expect(consoleWarnSpy).toHaveBeenCalledTimes(1)
expect(consoleWarnSpy).toHaveBeenCalledWith(
`The "selectedItemChanged" is deprecated. Please use "itemToKey instead".`,
`The "selectedItemChanged" is deprecated. Please use "itemToKey instead". https://github.com/downshift-js/downshift/blob/master/src/hooks/useCombobox/README.md#selecteditemchanged`,
)
consoleWarnSpy.mockRestore()
})
Expand Down Expand Up @@ -714,6 +714,67 @@ describe('props', () => {
expect(input).toHaveValue(selectedItem)
})

test('selectedItem change updates the input value', async () => {
const selectedItem = items[2]
const newSelectedItem = items[4]
const nullSelectedItem = null
const lastSelectedItem = items[1]
const stateReducer = jest.fn().mockImplementation((s, a) => a.changes)

const {rerender} = renderCombobox({
selectedItem,
stateReducer,
})
const input = getInput()

expect(input).toHaveValue(selectedItem)
expect(stateReducer).not.toHaveBeenCalled() // don't call on first render.

rerender({
selectedItem: newSelectedItem,
stateReducer,
})

expect(stateReducer).toHaveBeenCalledTimes(1)
expect(stateReducer).toHaveBeenCalledWith(
expect.anything(),
expect.objectContaining({
type: useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem,
}),
)
expect(input).toHaveValue(newSelectedItem)

stateReducer.mockClear()
rerender({
selectedItem: nullSelectedItem,
stateReducer,
})

expect(stateReducer).toHaveBeenCalledTimes(1)
expect(stateReducer).toHaveBeenCalledWith(
expect.anything(),
expect.objectContaining({
type: useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem,
}),
)
expect(input).toHaveValue('')

stateReducer.mockClear()
rerender({
selectedItem: lastSelectedItem,
stateReducer,
})

expect(stateReducer).toHaveBeenCalledTimes(1)
expect(stateReducer).toHaveBeenCalledWith(
expect.anything(),
expect.objectContaining({
type: useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem,
}),
)
expect(input).toHaveValue(lastSelectedItem)
})

describe('stateReducer', () => {
beforeEach(() => jest.useFakeTimers())
afterEach(() => {
Expand Down
2 changes: 1 addition & 1 deletion src/hooks/useCombobox/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ export function useControlledReducer(
props.itemToKey(previousSelectedItemRef.current)
} else {
console.warn(
`The "selectedItemChanged" is deprecated. Please use "itemToKey instead".`,
`The "selectedItemChanged" is deprecated. Please use "itemToKey instead". https://github.com/downshift-js/downshift/blob/master/src/hooks/useCombobox/README.md#selecteditemchanged`,
)

shouldCallDispatch = props.selectedItemChanged(
Expand Down

0 comments on commit d2b5455

Please sign in to comment.