UNPKG

vue-instantsearch

Version:

👀 Lightning-fast Algolia search for Vue apps

94 lines (86 loc) • 2.4 kB
/** * @jest-environment jsdom */ import { runTestSuites } from '@instantsearch/tests/common'; import * as testSuites from '@instantsearch/tests/shared'; import { connectMenu, connectPagination } from 'instantsearch.js/es/connectors'; import { nextTick, mountApp } from '../../test/utils'; import { AisHits, AisInstantSearch, AisMenu, AisPagination, createWidgetMixin, } from '../instantsearch'; import { renderCompat } from '../util/vue-compat'; jest.unmock('instantsearch.js/es'); const testSetups = { async createSharedTests({ instantSearchOptions, widgetParams }) { const CustomMenu = createCustomWidget({ connector: connectMenu, name: 'Menu', requiredProps: ['attribute'], urlValue: 'value', }); const CustomPagination = createCustomWidget({ connector: connectPagination, name: 'Pagination', urlValue: 10, }); mountApp( { render: renderCompat((h) => h(AisInstantSearch, { props: instantSearchOptions }, [ h(CustomMenu, { props: widgetParams.menu }), h(AisMenu, { props: widgetParams.menu }), h(AisHits, { props: widgetParams.hits }), h(CustomPagination, { props: widgetParams.pagination }), h(AisPagination, { props: widgetParams.pagination }), ]) ), }, document.body.appendChild(document.createElement('div')) ); await nextTick(); }, }; function createCustomWidget({ connector, name, urlValue, requiredProps = [] }) { return { name: `Custom${name}`, mixins: [createWidgetMixin({ connector })], props: Object.fromEntries( requiredProps.map((prop) => [prop, { required: true }]) ), computed: { widgetParams() { return Object.fromEntries( requiredProps.map((prop) => [prop, this[prop]]) ); }, }, render: renderCompat(function (h) { return this.state ? h( 'a', { attrs: { 'data-testid': `${name}-link`, href: this.state.createURL(urlValue), }, }, 'LINK' ) : null; }), }; } const testOptions = { createSharedTests: undefined, }; describe('Common shared tests (Vue InstantSearch)', () => { runTestSuites({ testSuites, testSetups, testOptions, }); });