import { render } from '@testing-library/react'; import React from 'react'; import { CairoTestApp } from '../../test-utils'; import { testkit } from '@wix/fe-essentials-standalone/testkit'; import { WixPatternsContainerDriver } from '@wix/bex-core/testkit/internal'; import { usePickerStandalone } from './usePickerStandalone'; interface TestEntity { id: string; name: string; } describe('usePickerStandalone', () => { testkit.beforeAndAfter(); let driver: WixPatternsContainerDriver; beforeEach(() => { driver = new WixPatternsContainerDriver(); }); it('makes `filters` config option optional when there are no filters', () => { let searchValue: string | null = null; const App = () => { const { picker } = usePickerStandalone({ queryName: 'test1', fetchData: async () => ({ items: [] as TestEntity[], }), fetchErrorMessage: () => null, itemKey: (item) => item.id, itemName: (item) => item.name, defaultDestinationUrl: `https://manage.wix.com`, }); searchValue = picker.collection.filters.search.value; return null; }; render( , ); expect(searchValue).toBe(''); }); it('makes `itemKey` & `itemName` config options optional when an item has an {id: string, name: string}', () => { const App = () => { const { picker } = usePickerStandalone({ queryName: 'test2', fetchData: async () => ({ items: [] as { id: string; name: string }[], }), fetchErrorMessage: () => null, defaultDestinationUrl: `https://manage.wix.com`, }); const item = { id: 'foo', name: 'bar' }; return ( <> {picker.collection.itemKey(item)} {picker.collection.itemName(item)} ); }; const { container } = render( , ); expect(container.textContent).toBe('foobar'); }); it("makes `itemKey` config option required when an item doesn't extend {id: string}", () => { const App = () => { // @ts-expect-error - T does not extend { id: string } const { picker } = usePickerStandalone({ queryName: 'test3', fetchData: async () => ({ items: [] as { id2: string; name2: string }[], }), itemName: (item) => item.name2, fetchErrorMessage: () => null, defaultDestinationUrl: `https://manage.wix.com`, }); try { return <>{picker.collection.itemKey({ id2: 'foo', name2: 'bar' })}; } catch (e) { return <>{(e as Error)?.message}; } }; const { container } = render( , ); expect(container.textContent).toBe( 'Collection config must specify itemKey, or item must have one of properties: id, _id', ); }); it("makes `itemName` config option required when an item doesn't extend {id: string}", () => { const App = () => { // @ts-expect-error - T does not extend { name: string } const { picker } = usePickerStandalone({ queryName: 'test3', fetchData: async () => ({ items: [] as { id2: string; name2: string }[], }), itemKey: (item) => item.id2, fetchErrorMessage: () => null, defaultDestinationUrl: `https://manage.wix.com`, noItemsAvailableDestinationUrl: 'https://wix.com', }); try { return <>{picker.collection.itemName({ id2: 'foo', name2: 'bar' })}; } catch (e) { return <>{(e as Error)?.message}; } }; const { container } = render( , ); expect(container.textContent).toBe( 'Collection config must specify itemName, or item must have property: name', ); }); });