UNPKG

5.14 kBJavaScriptView Raw
1#!/usr/bin/env node
2import assert from 'node:assert';
3import {readFileSync} from 'node:fs';
4import lunr from 'lunr';
5import {describe, it, before} from 'mocha';
6
7import {OUTPUT_INDEX_FILE, OUTPUT_LUNR_INDEX_FILE, HugoIndexer} from './index.js';
8
9const DEFAULT_LANGUAGE = 'en';
10
11before(() => {
12 const index = new HugoIndexer();
13 index._setOutput(OUTPUT_INDEX_FILE);
14 index.createIndex();
15});
16
17describe('Search index', () => {
18 it('index content is equal to expected', () => {
19 // Expect
20 const expectedIndex = {
21 ru: [
22 {
23 uri: '/posts/post-sub01',
24 title: 'Текст-рыба',
25 content: '\nПовседневная практика показывает, что постоянный количественный рост и сфера нашей активности требуют от нас анализа направлений прогрессивного развития. Повседневная практика показывает, что дальнейшее развитие различных форм деятельности обеспечивает широкому кругу (специалистов) участие в формировании систем массового участия.\n\nТоварищи! рамки и место обучения кадров требуют от нас анализа соответствующий условий активизации. Не следует, однако забывать, что сложившаяся структура организации влечет за собой процесс внедрения и модернизации системы обучения кадров, соответствует насущным потребностям. Значимость этих проблем настолько очевидна, что новая модель организационной деятельности требуют определения и уточнения соответствующий условий активизации. Разнообразный и богатый опыт новая модель организационной деятельности позволяет выполнять важные задания по разработке дальнейших направлений развития. Равным образом начало повседневной работы по формированию позиции влечет за собой процесс внедрения и модернизации соответствующий условий активизации. Повседневная практика показывает, что сложившаяся структура организации позволяет оценить значение новых предложений.',
26 tags: [],
27 lang: 'ru',
28 },
29 ],
30 en: [
31 {
32 uri: '/posts/post-sub01',
33 title: 'Test post 01 Eng',
34 content: '\nLorem Ipsum is simply dummy text of the printing and typesetting industry.\n\nLorem Ipsum has been the industry\'s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.\n\nIt was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.',
35 tags: [],
36 lang: 'en',
37 },
38 ],
39 };
40
41 // Actual
42 const data = readFileSync(OUTPUT_INDEX_FILE);
43 const fileData = JSON.parse(data);
44
45 // Assert
46 assert.equal(JSON.stringify(fileData), JSON.stringify(expectedIndex));
47 });
48});
49
50describe('Lunr index', () => {
51 let lunrIndex;
52 let lngIdx = {};
53 let lngIdxRu = {};
54 let idx = {};
55 let idxRu = {};
56 before(() => {
57 lunrIndex = JSON.parse(readFileSync(OUTPUT_LUNR_INDEX_FILE));
58 lngIdx = lunrIndex[DEFAULT_LANGUAGE];
59 idx = lunr.Index.load(lngIdx);
60
61 // Ru
62 lngIdxRu = lunrIndex.ru;
63 idxRu = lunr.Index.load(lngIdxRu);
64 });
65
66 it('is created lunr index object correct', () => {
67 // Expect
68 const minSearchResultsLength = 1;
69
70 // Actual
71 const searchResult = idx.search('1960s');
72
73 // Assert
74 assert.equal(searchResult.length, minSearchResultsLength);
75 });
76
77 it('find russian post', () => {
78 // Expect
79 const pagesStore = lunrIndex.contentMap.ru;
80 const minSearchResultsLength = 1;
81 const expectedPageTitle = 'Текст-рыба';
82
83 // Actual
84 const searchResultRu = idxRu.search('рамки');
85
86 // Assert
87 assert.equal(searchResultRu.length, minSearchResultsLength);
88
89 const foundUri = searchResultRu[0].ref;
90 const foundPageTitle = pagesStore[foundUri];
91 assert.equal(foundPageTitle, expectedPageTitle);
92 });
93
94 it('return empty search result if there is no search request', () => {
95 // Expect
96 const minSearchResultsLength = 0;
97
98 // Actual
99 const searchResult = idx.search('some other string');
100
101 // Assert
102 assert.equal(searchResult.length, minSearchResultsLength);
103 });
104});
105