|
|
@@ -1,3 +1,5 @@
|
|
|
+import mongoose from 'mongoose';
|
|
|
+
|
|
|
import SearchService from '~/server/service/search';
|
|
|
import NamedQuery from '~/server/models/named-query';
|
|
|
|
|
|
@@ -8,11 +10,11 @@ describe('SearchService test', () => {
|
|
|
let searchService;
|
|
|
|
|
|
const DEFAULT = 'FullTextSearch';
|
|
|
+ const PRIVATE_LEGACY_PAGES = 'PrivateLegacyPages';
|
|
|
|
|
|
// let NamedQuery;
|
|
|
|
|
|
let dummyAliasOf;
|
|
|
- let dummyDelegatorName;
|
|
|
|
|
|
let namedQuery1;
|
|
|
let namedQuery2;
|
|
|
@@ -29,6 +31,16 @@ describe('SearchService test', () => {
|
|
|
searchService.nqDelegators = {
|
|
|
FullTextSearch: dummyDelegator,
|
|
|
};
|
|
|
+
|
|
|
+ dummyAliasOf = 'match -notmatch "phrase" -"notphrase" prefix:/pre1 -prefix:/pre2 tag:Tag1 -tag:Tag2';
|
|
|
+
|
|
|
+ await NamedQuery.insertMany([
|
|
|
+ { name: 'named_query1', delegatorName: PRIVATE_LEGACY_PAGES },
|
|
|
+ { name: 'named_query2', aliasOf: dummyAliasOf },
|
|
|
+ ]);
|
|
|
+
|
|
|
+ namedQuery1 = await NamedQuery.findOne({ name: 'named_query1' });
|
|
|
+ namedQuery2 = await NamedQuery.findOne({ name: 'named_query2' });
|
|
|
});
|
|
|
|
|
|
|
|
|
@@ -53,18 +65,6 @@ describe('SearchService test', () => {
|
|
|
});
|
|
|
|
|
|
describe('parseSearchQuery()', () => {
|
|
|
- beforeAll(async() => {
|
|
|
- dummyDelegatorName = DEFAULT;
|
|
|
- dummyAliasOf = 'match -notmatch "phrase" -"notphrase" prefix:/pre1 -prefix:/pre2 tag:Tag1 -tag:Tag2';
|
|
|
-
|
|
|
- await NamedQuery.insertMany([
|
|
|
- { name: 'named_query1', delegatorName: dummyDelegatorName },
|
|
|
- { name: 'named_query2', aliasOf: dummyAliasOf },
|
|
|
- ]);
|
|
|
-
|
|
|
- namedQuery1 = await NamedQuery.findOne({ name: 'named_query1' });
|
|
|
- namedQuery2 = await NamedQuery.findOne({ name: 'named_query2' });
|
|
|
- });
|
|
|
|
|
|
test('should return result with delegatorName', async() => {
|
|
|
const queryString = '[nq:named_query1]';
|
|
|
@@ -72,7 +72,7 @@ describe('SearchService test', () => {
|
|
|
|
|
|
const expected = {
|
|
|
queryString,
|
|
|
- delegatorName: dummyDelegatorName,
|
|
|
+ delegatorName: PRIVATE_LEGACY_PAGES,
|
|
|
};
|
|
|
|
|
|
expect(parsedQuery).toStrictEqual(expected);
|
|
|
@@ -97,7 +97,9 @@ describe('SearchService test', () => {
|
|
|
|
|
|
expect(parsedQuery).toStrictEqual(expected);
|
|
|
});
|
|
|
+ });
|
|
|
|
|
|
+ describe('resolve()', () => {
|
|
|
test('should resolve as full-text search delegator', async() => {
|
|
|
const parsedQuery = {
|
|
|
queryString: dummyAliasOf,
|
|
|
@@ -118,14 +120,14 @@ describe('SearchService test', () => {
|
|
|
const expectedData = parsedQuery;
|
|
|
|
|
|
expect(data).toStrictEqual(expectedData);
|
|
|
- // expect(typeof delegator.search).toBe('function'); TODO: enable test after implementing delegator initialization
|
|
|
+ expect(typeof delegator.search).toBe('function');
|
|
|
});
|
|
|
|
|
|
test('should resolve as custom search delegator', async() => {
|
|
|
const queryString = '[nq:named_query1]';
|
|
|
const parsedQuery = {
|
|
|
queryString,
|
|
|
- delegatorName: dummyDelegatorName,
|
|
|
+ delegatorName: PRIVATE_LEGACY_PAGES,
|
|
|
};
|
|
|
|
|
|
const [delegator, data] = await searchService.resolve(parsedQuery);
|
|
|
@@ -135,7 +137,68 @@ describe('SearchService test', () => {
|
|
|
expect(data).toBe(expectedData);
|
|
|
expect(typeof delegator.search).toBe('function');
|
|
|
});
|
|
|
+ });
|
|
|
+
|
|
|
+ describe('searchKeyword()', () => {
|
|
|
+ test('should search with custom search delegator', async() => {
|
|
|
+ const Page = mongoose.model('Page');
|
|
|
+ const User = mongoose.model('User');
|
|
|
+ await User.insertMany([
|
|
|
+ { name: 'someone1', username: 'someone1', email: 'someone1@example.com' },
|
|
|
+ { name: 'someone2', username: 'someone2', email: 'someone2@example.com' },
|
|
|
+ ]);
|
|
|
|
|
|
+ const testUser1 = await User.findOne({ username: 'someone1' });
|
|
|
+ const testUser2 = await User.findOne({ username: 'someone2' });
|
|
|
+
|
|
|
+ await Page.insertMany([
|
|
|
+ {
|
|
|
+ path: '/user1',
|
|
|
+ grant: Page.GRANT_PUBLIC,
|
|
|
+ creator: testUser1,
|
|
|
+ lastUpdateUser: testUser1,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ path: '/user1_owner',
|
|
|
+ grant: Page.GRANT_OWNER,
|
|
|
+ creator: testUser1,
|
|
|
+ lastUpdateUser: testUser1,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ path: '/user2_notOwner',
|
|
|
+ grant: Page.GRANT_PUBLIC,
|
|
|
+ creator: testUser2,
|
|
|
+ lastUpdateUser: testUser2,
|
|
|
+ },
|
|
|
+ ]);
|
|
|
+
|
|
|
+ const page1 = await Page.findOne({ path: '/user1' });
|
|
|
+
|
|
|
+ await Page.insertMany([
|
|
|
+ {
|
|
|
+ path: '/user1/hasParent',
|
|
|
+ grant: Page.GRANT_PUBLIC,
|
|
|
+ creator: testUser1,
|
|
|
+ lastUpdateUser: testUser1,
|
|
|
+ parent: page1,
|
|
|
+ },
|
|
|
+ ]);
|
|
|
+
|
|
|
+ const queryString = '[nq:named_query1]';
|
|
|
+ const parsedQuery = {
|
|
|
+ queryString,
|
|
|
+ delegatorName: PRIVATE_LEGACY_PAGES,
|
|
|
+ };
|
|
|
+
|
|
|
+ const [delegator, data] = await searchService.resolve(parsedQuery);
|
|
|
+
|
|
|
+ const result = await delegator.search(data, testUser1, null, { limit: 10, offset: 0 });
|
|
|
+
|
|
|
+ const resultPaths = result.data.pages.map(page => page.path).sort();
|
|
|
+ const expectedPaths = ['/user1', '/user1_owner'].sort();
|
|
|
+
|
|
|
+ expect(resultPaths).toStrictEqual(expectedPaths);
|
|
|
+ });
|
|
|
});
|
|
|
|
|
|
});
|