diff --git a/lib/content-services/src/lib/search/services/base-query-builder.service.ts b/lib/content-services/src/lib/search/services/base-query-builder.service.ts index e127de44f6..94292325f6 100644 --- a/lib/content-services/src/lib/search/services/base-query-builder.service.ts +++ b/lib/content-services/src/lib/search/services/base-query-builder.service.ts @@ -185,7 +185,7 @@ export abstract class BaseQueryBuilderService { this.filterQueries = []; this.sorting = []; this.sortingOptions = []; - this.userFacetBuckets = {}; + this.resetUserFacetBucket(); this.scope = null; this.filterRawParams = {}; this._userQuery = ''; @@ -269,6 +269,14 @@ export abstract class BaseQueryBuilderService { } } + /** + * Resets an existing bucket list. + */ + resetUserFacetBucket() { + this.userFacetBuckets = {}; + this.userFacetBucketsUpdate.next(this.userFacetBuckets); + } + /** * Adds a filter query to the current query. * diff --git a/lib/content-services/src/lib/search/services/search-facet-filters.service.spec.ts b/lib/content-services/src/lib/search/services/search-facet-filters.service.spec.ts index b241299395..6f01420f1e 100644 --- a/lib/content-services/src/lib/search/services/search-facet-filters.service.spec.ts +++ b/lib/content-services/src/lib/search/services/search-facet-filters.service.spec.ts @@ -617,6 +617,32 @@ describe('SearchFacetFiltersService', () => { expect(searchFacetFiltersService.tabbedFacet.facets['modifier'].buckets.items[1].label).toEqual('c2'); }); + it('should reset filters and call resetToDefaults', () => { + const resetToDefaultsSpy = spyOn(queryBuilder, 'resetToDefaults'); + const updateSpy = spyOn(queryBuilder, 'update'); + + const responseFacets = [{ field: 'field1', label: null }]; + const selectedBuckets = [{ field: { field: 'field1', label: null }, bucket: { label: 'bucket1', count: 1, filterQuery: 'q1' } }]; + const tabbedFacet = { fields: ['creator', 'modifier'], label: 'SEARCH.FILTER.PEOPLE', facets: {} }; + + searchFacetFiltersService.responseFacets = responseFacets; + searchFacetFiltersService.selectedBuckets = selectedBuckets; + searchFacetFiltersService.tabbedFacet = tabbedFacet; + + expect(searchFacetFiltersService.responseFacets).toBe(responseFacets); + expect(searchFacetFiltersService.selectedBuckets).toBe(selectedBuckets); + expect(searchFacetFiltersService.tabbedFacet).toBe(tabbedFacet); + + searchFacetFiltersService.reset(); + + expect(resetToDefaultsSpy).toHaveBeenCalled(); + expect(updateSpy).toHaveBeenCalled(); + + expect(searchFacetFiltersService.responseFacets).toEqual([]); + expect(searchFacetFiltersService.selectedBuckets).toEqual([]); + expect(searchFacetFiltersService.tabbedFacet).toBeNull(); + }); + describe('Bucket sorting', () => { let data; diff --git a/lib/content-services/src/lib/search/services/search-query-builder.service.spec.ts b/lib/content-services/src/lib/search/services/search-query-builder.service.spec.ts index 7bb937e708..be8f25d18f 100644 --- a/lib/content-services/src/lib/search/services/search-query-builder.service.spec.ts +++ b/lib/content-services/src/lib/search/services/search-query-builder.service.spec.ts @@ -74,6 +74,7 @@ describe('SearchQueryBuilder (runtime config)', () => { describe('SearchQueryBuilder', () => { let router: Router; let activatedRoute: ActivatedRoute; + let service: SearchQueryBuilderService; beforeEach(() => { TestBed.configureTestingModule({ @@ -81,6 +82,7 @@ describe('SearchQueryBuilder', () => { }); router = TestBed.inject(Router); activatedRoute = TestBed.inject(ActivatedRoute); + service = TestBed.inject(SearchQueryBuilderService); }); const createQueryBuilder = (config?: any) => { @@ -805,7 +807,6 @@ describe('SearchQueryBuilder', () => { it('should use properly encoded query containing non-latin character when calls router.navigate', () => { spyOn(router, 'navigate'); spyOn(console, 'error'); - const service = TestBed.inject(SearchQueryBuilderService); service.filterRawParams = { userQuery: '((cm:name:"wąż*" OR cm:title:"wąż*" OR cm:description:"wąż*" OR TEXT:"wąż*" OR TAG:"wąż*"))' }; service.updateSearchQueryParams(); @@ -825,7 +826,6 @@ describe('SearchQueryBuilder', () => { spyOn(router, 'navigate'); spyOn(console, 'error'); const searchUrl = 'search'; - const service = TestBed.inject(SearchQueryBuilderService); service.filterRawParams = { userQuery: '((cm:name:"wąż*" OR cm:title:"wąż*" OR cm:description:"wąż*" OR TEXT:"wąż*" OR TAG:"wąż*"))' }; service.encodeQuery(); @@ -842,8 +842,6 @@ describe('SearchQueryBuilder', () => { describe('userFacetBucketsUpdate', () => { it('should emit updated list of UserFacetBuckets on adding the bucket', (done) => { - const service = TestBed.inject(SearchQueryBuilderService); - service.userFacetBucketsUpdate.pipe(skip(1)).subscribe((buckets) => { expect(buckets).toEqual({ test: [{ checked: true, filterQuery: 'f1-q1', label: 'f1-q1', count: 1 }] }); done(); @@ -855,7 +853,6 @@ describe('SearchQueryBuilder', () => { }); it('should emit updated list of UserFacetBuckets on removing the bucket', (done) => { - const service = TestBed.inject(SearchQueryBuilderService); service.addUserFacetBucket('test', { checked: true, filterQuery: 'f1-q1', label: 'toStay', count: 1 }); service.addUserFacetBucket('test', { checked: true, filterQuery: 'f1-q1', label: 'toLeave', count: 1 }); @@ -871,12 +868,19 @@ describe('SearchQueryBuilder', () => { ]); service.removeUserFacetBucket('test', { checked: true, filterQuery: 'f1-q1', label: 'toLeave', count: 1 }); }); + + it('should emit updated list of UserFacetBuckets on resetting the bucket', (done) => { + service.userFacetBucketsUpdate.pipe(skip(1)).subscribe((buckets) => { + expect(buckets).toEqual({}); + done(); + }); + + service.resetUserFacetBucket(); + }); }); describe('queryFragments proxy set up', () => { it('should emit queryFragmentsUpdate when proxy property is set', (done) => { - const service = TestBed.inject(SearchQueryBuilderService); - service.queryFragmentsUpdate.pipe(skip(1)).subscribe((fragments) => { expect(fragments).toEqual({ test: 'test_fragment' }); done(); @@ -888,8 +892,6 @@ describe('SearchQueryBuilder', () => { }); it('should emit queryFragmentsUpdate when setter replaces the proxy', (done) => { - const service = TestBed.inject(SearchQueryBuilderService); - service.queryFragments['test'] = 'test_fragment'; const currentFragments = service.queryFragments;