import { render, screen } from '@testing-library/react' import React from 'react' import { withSearchkit, withSearchkitRouting, SearchkitClient } from '../index' import { FilterLink, PaginationLink } from '../components' describe('components', () => { it('FilterLink component', async () => { const api = new SearchkitClient() api.updateBaseSearchState({ query: 'test', filters: [{ identifier: 'type', value: 'shows' }], sortBy: 'released' }) const Components = withSearchkit( withSearchkitRouting( () => link, { parseURL: () => // override default url -> routeState with existing state ({ query: 'test', filters: [{ identifier: 'type', value: 'shows' }], sort: 'released' }) } ), () => api ) const x = render() expect(screen.getByText('link').getAttribute('href')).toMatchInlineSnapshot( `"?query=test&sort=released&filters%5B0%5D%5Bidentifier%5D=type&filters%5B0%5D%5Bvalue%5D=movie&filters%5B1%5D%5Bidentifier%5D=type&filters%5B1%5D%5Bvalue%5D=shows&size=10"` ) screen.getByText('link').click() expect(api.searchState).toMatchInlineSnapshot(` Object { "filters": Array [ Object { "identifier": "type", "value": "movie", }, Object { "identifier": "type", "value": "shows", }, ], "page": Object { "from": 0, "size": 10, }, "query": "test", "sortBy": "released", } `) }) it('FilterLink component - without routing', async () => { const api = new SearchkitClient() api.updateBaseSearchState({ query: 'test', filters: [{ identifier: 'type', value: 'shows' }], sortBy: 'released' }) const Components = withSearchkit( () => link, () => api ) render() expect(screen.getByText('link').getAttribute('href')).toBeNull() screen.getByText('link').click() expect(api.searchState).toMatchInlineSnapshot(` Object { "filters": Array [ Object { "identifier": "type", "value": "movie", }, Object { "identifier": "type", "value": "shows", }, ], "page": Object { "from": 0, "size": 10, }, "query": "test", "sortBy": "released", } `) }) it('PaginationLink component - without routing', async () => { const api = new SearchkitClient() api.updateBaseSearchState({ page: { from: 0, size: 20 } }) const Components = withSearchkit( () => link, () => api ) render() expect(screen.getByText('link').getAttribute('href')).toBeNull() screen.getByText('link').click() expect(api.searchState).toMatchInlineSnapshot(` Object { "filters": Array [], "page": Object { "from": 40, "size": 20, }, "query": "", "sortBy": "", } `) }) it('Pagination component - with routing', async () => { const api = new SearchkitClient() api.updateBaseSearchState({ query: 'test', page: { from: 20, size: 10 } }) const Components = withSearchkit( withSearchkitRouting(() => link, { parseURL: () => // override default url -> routeState with existing state ({ query: 'test', page: { from: 20, size: 10 } }) }), () => api ) const x = render() expect(screen.getByText('link').getAttribute('href')).toMatchInlineSnapshot( `"?query=test&size=10&from=20"` ) screen.getByText('link').click() expect(api.searchState).toMatchInlineSnapshot(` Object { "filters": Array [], "page": Object { "from": 20, "size": 10, }, "query": "test", "sortBy": "", } `) }) })