test.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import test from 'ava';
  2. // import { createIndex, searchString, searchFor } from 'src/search';
  3. // import * as search from 'src/search';
  4. import createSearchIndex from '../src/js/search';
  5. import search_data from './test_data.json';
  6. import data from '../build/data_de.json';
  7. test('generated search strings should be equal', t => {
  8. let index = createSearchIndex(search_data, 'index', ['label'], 'de');
  9. let input1 = 'Arzt zg';
  10. let input2 = 'zg Arzt';
  11. t.is(index.compileString(input1), index.compileString(input2), 'Deterministic search string generation');
  12. });
  13. test('generated search strings should not be equal', t => {
  14. let index = createSearchIndex(search_data, 'index', ['label'], 'de');
  15. let input1 = 'Arzt zgx';
  16. let input2 = 'zgx Arzt';
  17. t.not(index.compileString(input1), index.compileString(input2), 'Deterministic search string generation');
  18. });
  19. test('length of search string should be greater than 0', t => {
  20. let index = createSearchIndex(search_data, 'index', ['label'], 'de');
  21. let input = 'Leitende/r Sekretär/in oder leitende';
  22. let res = index.compileString(input);
  23. // console.log(res);
  24. t.not(res.length, 0, 'Deterministic search string generation');
  25. });
  26. // Unfortunately, lunr search neither works when the search string contains unicode nor latin1 characters. ridiculous
  27. // Needs further investigation: "Café" is found, but neither "Ärztin" nor "Öffentlich"
  28. test('search on test data in german', t => {
  29. // let index = searchIndex();
  30. let idx = createSearchIndex(search_data, 'index', ['label'], 'de');
  31. // Draw random entry
  32. let ridx = Math.floor(Math.random() * search_data.length);
  33. let rnd = search_data[ridx];
  34. let label = rnd.label;
  35. let rs = Math.round(Math.random() * (label.length - 3)) + 3; // Random string length, at least 3
  36. let rsstring = label.substring(0, rs);
  37. // let result = idx.searchFor(idx, 'arzt');
  38. let result = idx.searchFor(rsstring);
  39. let inResult = result.indexOf(rnd);
  40. console.log(ridx, rnd, label, rs, rsstring, inResult);
  41. t.not(inResult, -1, 'Search term should be found in data');
  42. });
  43. test('probabilities of similar entries should be lower than probability of entry', t => {
  44. // Draw random entry
  45. let ridx = Math.floor(Math.random() * data.length);
  46. let rnd = data[ridx];
  47. // console.log('random entry', rnd);
  48. rnd.similar.forEach((e) => {
  49. // console.log('entry, similar, probs', rnd.prob, e.prob, e.index);
  50. // console.log('data[e.index]', data[e.index].label);
  51. t.assert(rnd.prob > e.prob);
  52. });
  53. });