UNPKG

nested-fuzzy-search

Version:

[![npm version](https://badge.fury.io/js/nested-fuzzy-search.svg)](https://www.npmjs.com/package/nested-fuzzy-search) [![license](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)

93 lines (81 loc) 2.18 kB
import { search } from "../src"; // Test data const simpleNestedArray = [ { id: 1, name: "Parent 1", children: [ { id: 11, name: "Child 1.1", children: [ { id: 111, name: "Sub-Child 1.1.1 level 3", value: "Data at level 3", }, ], }, ], }, ]; const simpleNestedObject = { parent: { id: 1, name: "Parent 1", children: { child1: { id: 11, name: "Child 1.1", children: { subChild1: { id: 111, name: "Sub-Child 1.1.1", value: "Data at level 3", }, }, }, }, }, }; describe("Search Function Tests", () => { test('Search in deeply nested array for a query "level 3"', () => { const query = "level 3"; const results = search(simpleNestedArray, query, { threshold: 0.3, outputMode: "tree", }); // Check for at least one result in Parent 1 expect(results.length).toBeGreaterThan(0); // Check the path and value expect(results[0].originalData.name).toBe("Parent 1"); expect(results[0].matches[0].path).toBe( "[0].children[0].children[0].value" ); }); test('Search in nested object for a query "level 3"', () => { const query = "level 3"; const results = search(simpleNestedObject, query, { threshold: 0.3, }); // Check for at least one result in Parent 1 expect(results.length).toBeGreaterThan(0); // Check the path and value expect(results[0].path).toBe( ".parent.children.child1.children.subChild1.value" ); expect(results[0].value).toBe("Data at level 3"); }); test('Search in deeply nested array for a query "level 3" with excludedKeys', () => { const query = "level 3"; const results = search(simpleNestedArray, query, { threshold: 0.3, outputMode: "tree", excludeKeys: ["value"], }); // Check for at least one result in Parent 1 expect(results.length).toBe(1); // Check the path and value expect(results[0].matches[0].path).toBe("[0].children[0].children[0].name"); }); });