[ADF-5429] Improve search for testability (#7198)

* improve search for testability

* fix lint
This commit is contained in:
Eugenio Romano 2021-08-06 11:09:51 +02:00 committed by GitHub
parent f30b20cc46
commit c01417a08f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 207 additions and 105 deletions

View File

@ -17,7 +17,7 @@
import { SearchSortingPickerComponent } from './search-sorting-picker.component'; import { SearchSortingPickerComponent } from './search-sorting-picker.component';
import { SearchQueryBuilderService } from '../../services/search-query-builder.service'; import { SearchQueryBuilderService } from '../../services/search-query-builder.service';
import { AppConfigService } from '@alfresco/adf-core'; import { AlfrescoApiService, AppConfigService } from '@alfresco/adf-core';
import { SearchConfiguration } from '../../models/search-configuration.interface'; import { SearchConfiguration } from '../../models/search-configuration.interface';
import { TestBed } from '@angular/core/testing'; import { TestBed } from '@angular/core/testing';
import { ContentTestingModule } from '../../../testing/content.testing.module'; import { ContentTestingModule } from '../../../testing/content.testing.module';
@ -53,7 +53,9 @@ describe('SearchSortingPickerComponent', () => {
<any> { id: 'cat1', enabled: true } <any> { id: 'cat1', enabled: true }
] ]
}; };
queryBuilder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
queryBuilder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
component = new SearchSortingPickerComponent(queryBuilder); component = new SearchSortingPickerComponent(queryBuilder);
}); });

View File

@ -42,6 +42,7 @@ import { SearchForm } from '../models/search-form.interface';
providedIn: 'root' providedIn: 'root'
}) })
export abstract class BaseQueryBuilderService { export abstract class BaseQueryBuilderService {
private searchApi: SearchApi;
/* Stream that emits the search configuration whenever the user change the search forms */ /* Stream that emits the search configuration whenever the user change the search forms */
configUpdated = new Subject<SearchConfiguration>(); configUpdated = new Subject<SearchConfiguration>();
@ -87,6 +88,7 @@ export abstract class BaseQueryBuilderService {
ranges: { [id: string]: SearchRange } = {}; ranges: { [id: string]: SearchRange } = {};
constructor(protected appConfig: AppConfigService, protected alfrescoApiService: AlfrescoApiService) { constructor(protected appConfig: AppConfigService, protected alfrescoApiService: AlfrescoApiService) {
this.searchApi = new SearchApi(this.alfrescoApiService.getInstance());
this.resetToDefaults(); this.resetToDefaults();
} }
@ -145,9 +147,14 @@ export abstract class BaseQueryBuilderService {
name: configuration.name || 'SEARCH.UNKNOWN_CONFIGURATION', name: configuration.name || 'SEARCH.UNKNOWN_CONFIGURATION',
default: configuration.default || false, default: configuration.default || false,
selected: this.selectedConfiguration !== undefined ? index === this.selectedConfiguration : configuration.default selected: this.selectedConfiguration !== undefined ? index === this.selectedConfiguration : configuration.default
})); }));
} else if (!!configurations) { } else if (!!configurations) {
return [{ index: 0, name: configurations.name || 'SEARCH.UNKNOWN_CONFIGURATION', default: true, selected: true }]; return [{
index: 0,
name: configurations.name || 'SEARCH.UNKNOWN_CONFIGURATION',
default: true,
selected: true
}];
} }
return []; return [];
} }
@ -285,8 +292,7 @@ export abstract class BaseQueryBuilderService {
try { try {
const query = queryBody ? queryBody : this.buildQuery(); const query = queryBody ? queryBody : this.buildQuery();
if (query) { if (query) {
const searchApi = new SearchApi(this.alfrescoApiService.getInstance()); const resultSetPaging: ResultSetPaging = await this.searchApi.search(query);
const resultSetPaging: ResultSetPaging = await searchApi.search(query);
this.executed.next(resultSetPaging); this.executed.next(resultSetPaging);
} }
} catch (error) { } catch (error) {
@ -304,8 +310,7 @@ export abstract class BaseQueryBuilderService {
} }
search(queryBody: QueryBody): Observable<ResultSetPaging> { search(queryBody: QueryBody): Observable<ResultSetPaging> {
const searchApi = new SearchApi(this.alfrescoApiService.getInstance()); const promise = this.searchApi.search(queryBody);
const promise = searchApi.search(queryBody);
promise.then((resultSetPaging) => { promise.then((resultSetPaging) => {
this.executed.next(resultSetPaging); this.executed.next(resultSetPaging);

View File

@ -16,20 +16,17 @@
*/ */
import { SearchConfiguration } from '../models/search-configuration.interface'; import { SearchConfiguration } from '../models/search-configuration.interface';
import { AppConfigService, CoreModule, setupTestBed } from '@alfresco/adf-core'; import { AlfrescoApiService, AppConfigService } from '@alfresco/adf-core';
import { SearchHeaderQueryBuilderService } from './search-header-query-builder.service'; import { SearchHeaderQueryBuilderService } from './search-header-query-builder.service';
import { TestBed } from '@angular/core/testing'; import { TestBed } from '@angular/core/testing';
import { ContentTestingModule } from '../../testing/content.testing.module'; import { ContentTestingModule } from '../../testing/content.testing.module';
import { TranslateModule } from '@ngx-translate/core';
describe('SearchHeaderQueryBuilderService', () => { describe('SearchHeaderQueryBuilderService', () => {
setupTestBed({ beforeEach(() => {
imports: [ TestBed.configureTestingModule({
TranslateModule.forRoot(), imports: [ContentTestingModule]
CoreModule.forRoot(), });
ContentTestingModule
]
}); });
const buildConfig = (searchSettings): AppConfigService => { const buildConfig = (searchSettings): AppConfigService => {
@ -47,9 +44,10 @@ describe('SearchHeaderQueryBuilderService', () => {
filterQueries: [{ query: 'query1' }, { query: 'query2' }] filterQueries: [{ query: 'query1' }, { query: 'query2' }]
}; };
const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchHeaderQueryBuilderService( const builder = new SearchHeaderQueryBuilderService(
buildConfig(config), buildConfig(config),
null, alfrescoApiService,
null null
); );
@ -74,9 +72,10 @@ describe('SearchHeaderQueryBuilderService', () => {
filterQueries: [{ query: 'query1' }, { query: 'query2' }] filterQueries: [{ query: 'query1' }, { query: 'query2' }]
}; };
const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const service = new SearchHeaderQueryBuilderService( const service = new SearchHeaderQueryBuilderService(
buildConfig(config), buildConfig(config),
null, alfrescoApiService,
null null
); );
@ -87,9 +86,10 @@ describe('SearchHeaderQueryBuilderService', () => {
}); });
it('should have empty user query by default', () => { it('should have empty user query by default', () => {
const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchHeaderQueryBuilderService( const builder = new SearchHeaderQueryBuilderService(
buildConfig({}), buildConfig({}),
null, alfrescoApiService,
null null
); );
expect(builder.userQuery).toBe(''); expect(builder.userQuery).toBe('');
@ -108,9 +108,10 @@ describe('SearchHeaderQueryBuilderService', () => {
{ query: 'PARENT:"workspace://SpacesStore/fake-node-id"' } { query: 'PARENT:"workspace://SpacesStore/fake-node-id"' }
]; ];
const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const searchHeaderService = new SearchHeaderQueryBuilderService( const searchHeaderService = new SearchHeaderQueryBuilderService(
buildConfig(config), buildConfig(config),
null, alfrescoApiService,
null null
); );
@ -133,9 +134,10 @@ describe('SearchHeaderQueryBuilderService', () => {
filterQueries: expectedResult filterQueries: expectedResult
}; };
const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const searchHeaderService = new SearchHeaderQueryBuilderService( const searchHeaderService = new SearchHeaderQueryBuilderService(
buildConfig(config), buildConfig(config),
null, alfrescoApiService,
null null
); );
@ -159,9 +161,10 @@ describe('SearchHeaderQueryBuilderService', () => {
] ]
}; };
const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const searchHeaderService = new SearchHeaderQueryBuilderService( const searchHeaderService = new SearchHeaderQueryBuilderService(
buildConfig(config), buildConfig(config),
null, alfrescoApiService,
null null
); );

View File

@ -17,7 +17,7 @@
import { SearchQueryBuilderService } from './search-query-builder.service'; import { SearchQueryBuilderService } from './search-query-builder.service';
import { SearchConfiguration } from '../models/search-configuration.interface'; import { SearchConfiguration } from '../models/search-configuration.interface';
import { AppConfigService } from '@alfresco/adf-core'; import { AlfrescoApiService, AppConfigService } from '@alfresco/adf-core';
import { FacetField } from '../models/facet-field.interface'; import { FacetField } from '../models/facet-field.interface';
import { TestBed } from '@angular/core/testing'; import { TestBed } from '@angular/core/testing';
import { ContentTestingModule } from '../../testing/content.testing.module'; import { ContentTestingModule } from '../../testing/content.testing.module';
@ -47,7 +47,8 @@ describe('SearchQueryBuilder', () => {
{ query: 'query2' } { query: 'query2' }
] ]
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
builder.categories = []; builder.categories = [];
builder.filterQueries = []; builder.filterQueries = [];
@ -62,18 +63,23 @@ describe('SearchQueryBuilder', () => {
}); });
it('should have empty user query by default', () => { it('should have empty user query by default', () => {
const builder = new SearchQueryBuilderService(buildConfig({}), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig({}), alfrescoApiService);
expect(builder.userQuery).toBe(''); expect(builder.userQuery).toBe('');
}); });
it('should wrap user query with brackets', () => { it('should wrap user query with brackets', () => {
const builder = new SearchQueryBuilderService(buildConfig({}), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig({}), alfrescoApiService);
builder.userQuery = 'my query'; builder.userQuery = 'my query';
expect(builder.userQuery).toEqual('(my query)'); expect(builder.userQuery).toEqual('(my query)');
}); });
it('should trim user query value', () => { it('should trim user query value', () => {
const builder = new SearchQueryBuilderService(buildConfig({}), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig({}), alfrescoApiService);
builder.userQuery = ' something '; builder.userQuery = ' something ';
expect(builder.userQuery).toEqual('(something)'); expect(builder.userQuery).toEqual('(something)');
}); });
@ -86,7 +92,9 @@ describe('SearchQueryBuilder', () => {
<any> { id: 'cat3', enabled: true } <any> { id: 'cat3', enabled: true }
] ]
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
expect(builder.categories.length).toBe(2); expect(builder.categories.length).toBe(2);
expect(builder.categories[0].id).toBe('cat1'); expect(builder.categories[0].id).toBe('cat1');
@ -101,7 +109,8 @@ describe('SearchQueryBuilder', () => {
{ query: 'query2' } { query: 'query2' }
] ]
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
expect(builder.filterQueries.length).toBe(2); expect(builder.filterQueries.length).toBe(2);
expect(builder.filterQueries[0].query).toBe('query1'); expect(builder.filterQueries[0].query).toBe('query1');
@ -109,7 +118,9 @@ describe('SearchQueryBuilder', () => {
}); });
it('should add new filter query', () => { it('should add new filter query', () => {
const builder = new SearchQueryBuilderService(buildConfig({}), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig({}), alfrescoApiService);
builder.addFilterQuery('q1'); builder.addFilterQuery('q1');
@ -118,7 +129,9 @@ describe('SearchQueryBuilder', () => {
}); });
it('should not add empty filter query', () => { it('should not add empty filter query', () => {
const builder = new SearchQueryBuilderService(buildConfig({}), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig({}), alfrescoApiService);
builder.addFilterQuery(null); builder.addFilterQuery(null);
builder.addFilterQuery(''); builder.addFilterQuery('');
@ -127,7 +140,9 @@ describe('SearchQueryBuilder', () => {
}); });
it('should not add duplicate filter query', () => { it('should not add duplicate filter query', () => {
const builder = new SearchQueryBuilderService(buildConfig({}), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig({}), alfrescoApiService);
builder.addFilterQuery('q1'); builder.addFilterQuery('q1');
builder.addFilterQuery('q1'); builder.addFilterQuery('q1');
@ -138,7 +153,9 @@ describe('SearchQueryBuilder', () => {
}); });
it('should remove filter query', () => { it('should remove filter query', () => {
const builder = new SearchQueryBuilderService(buildConfig({}), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig({}), alfrescoApiService);
builder.addFilterQuery('q1'); builder.addFilterQuery('q1');
builder.addFilterQuery('q2'); builder.addFilterQuery('q2');
@ -150,7 +167,9 @@ describe('SearchQueryBuilder', () => {
}); });
it('should not remove empty query', () => { it('should not remove empty query', () => {
const builder = new SearchQueryBuilderService(buildConfig({}), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig({}), alfrescoApiService);
builder.addFilterQuery('q1'); builder.addFilterQuery('q1');
builder.addFilterQuery('q2'); builder.addFilterQuery('q2');
expect(builder.filterQueries.length).toBe(2); expect(builder.filterQueries.length).toBe(2);
@ -170,7 +189,9 @@ describe('SearchQueryBuilder', () => {
] ]
} }
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
const query = builder.getFacetQuery('query2'); const query = builder.getFacetQuery('query2');
expect(query.query).toBe('q2'); expect(query.query).toBe('q2');
@ -186,7 +207,9 @@ describe('SearchQueryBuilder', () => {
] ]
} }
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
const query1 = builder.getFacetQuery(''); const query1 = builder.getFacetQuery('');
expect(query1).toBeNull(); expect(query1).toBeNull();
@ -205,7 +228,9 @@ describe('SearchQueryBuilder', () => {
] ]
} }
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
const field = builder.getFacetField('Size'); const field = builder.getFacetField('Size');
expect(field.label).toBe('Size'); expect(field.label).toBe('Size');
@ -222,7 +247,9 @@ describe('SearchQueryBuilder', () => {
] ]
} }
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
const field = builder.getFacetField('Missing'); const field = builder.getFacetField('Missing');
expect(field).toBeFalsy(); expect(field).toBeFalsy();
@ -231,11 +258,15 @@ describe('SearchQueryBuilder', () => {
it('should fetch facets from the config by label with spaces and return field with request compatible label (escaped)', () => { it('should fetch facets from the config by label with spaces and return field with request compatible label (escaped)', () => {
const config: SearchConfiguration = { const config: SearchConfiguration = {
categories: [], categories: [],
facetFields: { 'fields': [ facetFields: {
'fields': [
{ 'field': 'content.size', 'mincount': 1, 'label': 'Label with spaces' } { 'field': 'content.size', 'mincount': 1, 'label': 'Label with spaces' }
]} ]
}
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
const field = builder.getFacetField('Label with spaces'); const field = builder.getFacetField('Label with spaces');
expect(field.label).toBe('"Label with spaces"'); expect(field.label).toBe('"Label with spaces"');
@ -248,7 +279,9 @@ describe('SearchQueryBuilder', () => {
<any> { id: 'cat1', enabled: true } <any> { id: 'cat1', enabled: true }
] ]
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
builder.queryFragments['cat1'] = null; builder.queryFragments['cat1'] = null;
const compiled = builder.buildQuery(); const compiled = builder.buildQuery();
@ -261,7 +294,9 @@ describe('SearchQueryBuilder', () => {
<any> { id: 'cat1', enabled: true } <any> { id: 'cat1', enabled: true }
] ]
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
builder.queryFragments['cat1'] = 'cm:name:test'; builder.queryFragments['cat1'] = 'cm:name:test';
@ -276,7 +311,9 @@ describe('SearchQueryBuilder', () => {
<any> { id: 'cat2', enabled: true } <any> { id: 'cat2', enabled: true }
] ]
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
builder.queryFragments['cat1'] = 'cm:name:test'; builder.queryFragments['cat1'] = 'cm:name:test';
builder.queryFragments['cat2'] = 'NOT cm:creator:System'; builder.queryFragments['cat2'] = 'NOT cm:creator:System';
@ -295,7 +332,9 @@ describe('SearchQueryBuilder', () => {
<any> { id: 'cat2', enabled: true } <any> { id: 'cat2', enabled: true }
] ]
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
builder.queryFragments['cat1'] = 'cm:name:test'; builder.queryFragments['cat1'] = 'cm:name:test';
@ -311,7 +350,9 @@ describe('SearchQueryBuilder', () => {
<any> { id: 'cat2', enabled: true } <any> { id: 'cat2', enabled: true }
] ]
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
builder.queryFragments['cat1'] = 'cm:name:test'; builder.queryFragments['cat1'] = 'cm:name:test';
@ -325,7 +366,9 @@ describe('SearchQueryBuilder', () => {
<any> { id: 'cat1', enabled: true } <any> { id: 'cat1', enabled: true }
] ]
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
builder.queryFragments['cat1'] = 'cm:name:test'; builder.queryFragments['cat1'] = 'cm:name:test';
builder.addFilterQuery('query1'); builder.addFilterQuery('query1');
@ -346,7 +389,9 @@ describe('SearchQueryBuilder', () => {
] ]
} }
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
builder.queryFragments['cat1'] = 'cm:name:test'; builder.queryFragments['cat1'] = 'cm:name:test';
const compiled = builder.buildQuery(); const compiled = builder.buildQuery();
@ -365,7 +410,9 @@ describe('SearchQueryBuilder', () => {
] ]
} }
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
builder.queryFragments['cat1'] = 'cm:name:test'; builder.queryFragments['cat1'] = 'cm:name:test';
const compiled = builder.buildQuery(); const compiled = builder.buildQuery();
@ -386,12 +433,30 @@ describe('SearchQueryBuilder', () => {
categories: [ categories: [
<any> { id: 'cat1', enabled: true } <any> { id: 'cat1', enabled: true }
], ],
facetFields: { fields: [ facetFields: {
{ field: 'field1', label: spacesLabel.configValue, mincount: 1, limit: null, offset: 0, prefix: null }, fields: [
{ field: 'field2', label: noSpacesLabel.configValue, mincount: 1, limit: null, offset: 0, prefix: null } {
]} field: 'field1',
label: spacesLabel.configValue,
mincount: 1,
limit: null,
offset: 0,
prefix: null
},
{
field: 'field2',
label: noSpacesLabel.configValue,
mincount: 1,
limit: null,
offset: 0,
prefix: null
}
]
}
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
builder.queryFragments['cat1'] = 'cm:name:test'; builder.queryFragments['cat1'] = 'cm:name:test';
const compiled = builder.buildQuery(); const compiled = builder.buildQuery();
@ -412,7 +477,7 @@ describe('SearchQueryBuilder', () => {
label: 'test_intervals1', label: 'test_intervals1',
field: 'f1', field: 'f1',
sets: [ sets: [
{ label: 'interval1', start: 's1', end: 'e1', startInclusive: true, endInclusive: true }, { label: 'interval1', start: 's1', end: 'e1', startInclusive: true, endInclusive: true },
{ label: 'interval2', start: 's2', end: 'e2', startInclusive: false, endInclusive: true } { label: 'interval2', start: 's2', end: 'e2', startInclusive: false, endInclusive: true }
] ]
}, },
@ -427,7 +492,9 @@ describe('SearchQueryBuilder', () => {
] ]
} }
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
builder.queryFragments['cat1'] = 'cm:name:test'; builder.queryFragments['cat1'] = 'cm:name:test';
const compiled = builder.buildQuery(); const compiled = builder.buildQuery();
@ -473,7 +540,9 @@ describe('SearchQueryBuilder', () => {
] ]
} }
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
builder.queryFragments['cat1'] = 'cm:name:test'; builder.queryFragments['cat1'] = 'cm:name:test';
const compiled = builder.buildQuery(); const compiled = builder.buildQuery();
@ -483,7 +552,7 @@ describe('SearchQueryBuilder', () => {
expect(compiled.facetIntervals.intervals[1].label).toEqual(noSpacesLabel.configValue); expect(compiled.facetIntervals.intervals[1].label).toEqual(noSpacesLabel.configValue);
expect(compiled.facetIntervals.intervals[0].sets[0].label).toEqual(spacesLabelForSet.requestCompatibleValue); expect(compiled.facetIntervals.intervals[0].sets[0].label).toEqual(spacesLabelForSet.requestCompatibleValue);
}); });
it('should build query with sorting', () => { it('should build query with sorting', () => {
const config: SearchConfiguration = { const config: SearchConfiguration = {
@ -493,7 +562,8 @@ describe('SearchQueryBuilder', () => {
<any> { id: 'cat2', enabled: true } <any> { id: 'cat2', enabled: true }
] ]
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
const sorting: any = { type: 'FIELD', field: 'cm:name', ascending: true }; const sorting: any = { type: 'FIELD', field: 'cm:name', ascending: true };
builder.sorting = [sorting]; builder.sorting = [sorting];
@ -509,7 +579,8 @@ describe('SearchQueryBuilder', () => {
<any> { id: 'cat1', enabled: true } <any> { id: 'cat1', enabled: true }
] ]
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
builder.queryFragments['cat1'] = 'cm:name:test'; builder.queryFragments['cat1'] = 'cm:name:test';
builder.paging = { maxItems: 5, skipCount: 5 }; builder.paging = { maxItems: 5, skipCount: 5 };
@ -526,7 +597,8 @@ describe('SearchQueryBuilder', () => {
<any> { id: 'cat1', enabled: true } <any> { id: 'cat1', enabled: true }
] ]
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
builder.userQuery = 'my query'; builder.userQuery = 'my query';
builder.queryFragments['cat1'] = 'cm:name:test'; builder.queryFragments['cat1'] = 'cm:name:test';
@ -561,7 +633,9 @@ describe('SearchQueryBuilder', () => {
<any> { id: 'cat1', enabled: true } <any> { id: 'cat1', enabled: true }
] ]
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
builder.addUserFacetBucket(field1, field1buckets[0]); builder.addUserFacetBucket(field1, field1buckets[0]);
builder.addUserFacetBucket(field1, field1buckets[1]); builder.addUserFacetBucket(field1, field1buckets[1]);
@ -582,7 +656,9 @@ describe('SearchQueryBuilder', () => {
'mergeContiguous': true 'mergeContiguous': true
} }
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
builder.userQuery = 'my query'; builder.userQuery = 'my query';
builder.queryFragments['cat1'] = 'cm:name:test'; builder.queryFragments['cat1'] = 'cm:name:test';
@ -599,7 +675,9 @@ describe('SearchQueryBuilder', () => {
<any> { id: 'cat1', enabled: true } <any> { id: 'cat1', enabled: true }
] ]
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
spyOn(builder, 'buildQuery').and.throwError('some error'); spyOn(builder, 'buildQuery').and.throwError('some error');
builder.error.subscribe(() => { builder.error.subscribe(() => {
@ -615,7 +693,9 @@ describe('SearchQueryBuilder', () => {
<any> { id: 'cat1', enabled: true } <any> { id: 'cat1', enabled: true }
] ]
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
spyOn(builder, 'buildQuery').and.throwError('some error'); spyOn(builder, 'buildQuery').and.throwError('some error');
builder.executed.subscribe((data) => { builder.executed.subscribe((data) => {
@ -628,7 +708,9 @@ describe('SearchQueryBuilder', () => {
}); });
it('should include contain the path and allowableOperations by default', () => { it('should include contain the path and allowableOperations by default', () => {
const builder = new SearchQueryBuilderService(buildConfig({}), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig({}), alfrescoApiService);
builder.userQuery = 'nuka cola quantum'; builder.userQuery = 'nuka cola quantum';
const queryBody = builder.buildQuery(); const queryBody = builder.buildQuery();
@ -640,7 +722,9 @@ describe('SearchQueryBuilder', () => {
const config: SearchConfiguration = { const config: SearchConfiguration = {
include: includeConfig include: includeConfig
}; };
const builder = new SearchQueryBuilderService(buildConfig(config), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(config), alfrescoApiService);
builder.userQuery = 'nuka cola quantum'; builder.userQuery = 'nuka cola quantum';
const queryBody = builder.buildQuery(); const queryBody = builder.buildQuery();
@ -648,7 +732,9 @@ describe('SearchQueryBuilder', () => {
}); });
it('should the query contain the pagination', () => { it('should the query contain the pagination', () => {
const builder = new SearchQueryBuilderService(buildConfig({}), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig({}), alfrescoApiService);
builder.userQuery = 'nuka cola quantum'; builder.userQuery = 'nuka cola quantum';
const mockPagination = { const mockPagination = {
maxItems: 10, maxItems: 10,
@ -661,7 +747,9 @@ describe('SearchQueryBuilder', () => {
}); });
it('should the query contain the scope in case it is defined', () => { it('should the query contain the scope in case it is defined', () => {
const builder = new SearchQueryBuilderService(buildConfig({}), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig({}), alfrescoApiService);
const mockScope = { locations: 'mock-location' }; const mockScope = { locations: 'mock-location' };
builder.userQuery = 'nuka cola quantum'; builder.userQuery = 'nuka cola quantum';
builder.setScope(mockScope); builder.setScope(mockScope);
@ -671,7 +759,9 @@ describe('SearchQueryBuilder', () => {
}); });
it('should return empty if array of search config not found', (done) => { it('should return empty if array of search config not found', (done) => {
const builder = new SearchQueryBuilderService(buildConfig(null), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
const builder = new SearchQueryBuilderService(buildConfig(null), alfrescoApiService);
builder.searchForms.subscribe((forms) => { builder.searchForms.subscribe((forms) => {
expect(forms).toEqual([]); expect(forms).toEqual([]);
done(); done();
@ -682,38 +772,40 @@ describe('SearchQueryBuilder', () => {
let configs: SearchConfiguration[]; let configs: SearchConfiguration[];
let builder: SearchQueryBuilderService; let builder: SearchQueryBuilderService;
beforeEach(() => { beforeEach(() => {
configs = [ configs = [
{ {
categories: [ categories: [
<any> { id: 'cat1', enabled: true }, <any> { id: 'cat1', enabled: true },
<any> { id: 'cat2', enabled: true } <any> { id: 'cat2', enabled: true }
], ],
filterQueries: [ filterQueries: [
{ query: 'query1' }, { query: 'query1' },
{ query: 'query2' } { query: 'query2' }
], ],
name: 'config1', name: 'config1',
default: true default: true
}, },
{ {
categories: [ categories: [
<any> { id: 'mouse', enabled: true } <any> { id: 'mouse', enabled: true }
], ],
filterQueries: [ filterQueries: [
{ query: 'query1' }, { query: 'query1' },
{ query: 'query2' } { query: 'query2' }
], ],
name: 'config2', name: 'config2',
default: false default: false
}, },
{ {
categories: [ categories: [
<any> { id: 'cat_and_mouse', enabled: true } <any> { id: 'cat_and_mouse', enabled: true }
], ],
default: false default: false
} }
]; ];
builder = new SearchQueryBuilderService(buildConfig(configs), null); const alfrescoApiService = TestBed.inject(AlfrescoApiService);
builder = new SearchQueryBuilderService(buildConfig(configs), alfrescoApiService);
}); });
it('should pick the default configuration from list', () => { it('should pick the default configuration from list', () => {
@ -733,9 +825,9 @@ describe('SearchQueryBuilder', () => {
it('should list available search form names', (done) => { it('should list available search form names', (done) => {
builder.searchForms.subscribe((forms) => { builder.searchForms.subscribe((forms) => {
expect(forms).toEqual([ expect(forms).toEqual([
{ index: 0, name: 'config1', default: true, selected: true }, { index: 0, name: 'config1', default: true, selected: true },
{ index: 1, name: 'config2', default: false, selected: false }, { index: 1, name: 'config2', default: false, selected: false },
{ index: 2, name: 'SEARCH.UNKNOWN_CONFIGURATION', default: false, selected: false } { index: 2, name: 'SEARCH.UNKNOWN_CONFIGURATION', default: false, selected: false }
]); ]);
done(); done();
}); });