diff --git a/src/search/SearchEngine.ts b/src/search/SearchEngine.ts index de5810f..a2c023a 100644 --- a/src/search/SearchEngine.ts +++ b/src/search/SearchEngine.ts @@ -1,6 +1,4 @@ import FlexSearch from 'flexsearch' -// @ts-ignore -import { encode as encode_balance } from 'flexsearch/dist/module/lang/latin/balance' import CozyClient, { Q } from 'cozy-client' import Minilog from 'cozy-minilog' @@ -16,6 +14,7 @@ import { REPLICATION_DEBOUNCE } from '@/search/consts' import { getPouchLink } from '@/search/helpers/client' +import { getSearchEncoder } from '@/search/helpers/getSearchEncoder' import { normalizeSearchResult } from '@/search/helpers/normalizeSearchResult' import { startReplicationWithDebounce } from '@/search/helpers/replication' import { @@ -124,7 +123,7 @@ class SearchEngine { const flexsearchIndex = new FlexSearch.Document({ tokenize: 'forward', - encode: encode_balance as FlexSearch.Encoders, + encode: getSearchEncoder(), minlength: 2, document: { id: '_id', diff --git a/src/search/helpers/getSearchEncoder.ts b/src/search/helpers/getSearchEncoder.ts new file mode 100644 index 0000000..cfdc22a --- /dev/null +++ b/src/search/helpers/getSearchEncoder.ts @@ -0,0 +1,7 @@ +import FlexSearch from 'flexsearch' +// @ts-ignore +import { encode as encode_balance } from 'flexsearch/dist/module/lang/latin/balance' + +export const getSearchEncoder = (): FlexSearch.Encoders => { + return encode_balance as FlexSearch.Encoders +} diff --git a/src/search/helpers/replication.spec.ts b/src/search/helpers/replication.spec.ts new file mode 100644 index 0000000..8850bf1 --- /dev/null +++ b/src/search/helpers/replication.spec.ts @@ -0,0 +1,56 @@ +import CozyClient from 'cozy-client' + +import { getPouchLink } from '@/search/helpers/client' + +import { startReplicationWithDebounce } from './replication' + +jest.mock('cozy-client') +jest.mock('@/search/helpers/client', () => ({ + getPouchLink: jest.fn() +})) + +describe('startReplicationWithDebounce', () => { + let client: CozyClient + let pouchLink: any + + beforeEach(() => { + client = new CozyClient() + pouchLink = { + startReplication: jest.fn() + } + log = { + debug: jest.fn() + } + ;(getPouchLink as jest.Mock).mockReturnValue(pouchLink) + jest.useFakeTimers() + }) + + afterEach(() => { + jest.clearAllMocks() + jest.clearAllTimers() + }) + + it('should start replication after the specified interval', () => { + const interval = 1000 + const replicate = startReplicationWithDebounce(client, interval) + + replicate() + expect(pouchLink.startReplication).not.toHaveBeenCalled() + jest.advanceTimersByTime(interval) + expect(pouchLink.startReplication).toHaveBeenCalledTimes(1) + }) + + it('should debounce replication calls within the interval', () => { + const interval = 1000 + const replicate = startReplicationWithDebounce(client, interval) + + replicate() + jest.advanceTimersByTime(interval / 2) + expect(pouchLink.startReplication).not.toHaveBeenCalled() + replicate() + replicate() + + jest.advanceTimersByTime(interval) + expect(pouchLink.startReplication).toHaveBeenCalledTimes(1) + }) +})