additional tests for search chip list (#5523)

This commit is contained in:
Denys Vuika
2020-02-28 15:08:35 +00:00
committed by GitHub
parent e5efe74e5e
commit 1e226d967e
3 changed files with 119 additions and 16 deletions

View File

@@ -1,15 +1,17 @@
<mat-chip-list> <mat-chip-list>
<ng-container *ngIf="searchFilter && searchFilter.selectedBuckets.length"> <ng-container *ngIf="searchFilter && searchFilter.selectedBuckets.length">
<mat-chip *ngIf="clearAll && searchFilter.selectedBuckets.length > 1" <mat-chip *ngIf="clearAll && searchFilter.selectedBuckets.length > 1"
color="primary" data-automation-id="reset-filter"
selected color="primary"
matTooltip="{{ 'SEARCH.FILTER.BUTTONS.CLEAR-ALL.TOOLTIP' | translate }}" selected
matTooltipPosition="right" matTooltip="{{ 'SEARCH.FILTER.BUTTONS.CLEAR-ALL.TOOLTIP' | translate }}"
(click)="searchFilter.resetAllSelectedBuckets()"> matTooltipPosition="right"
(click)="searchFilter.resetAllSelectedBuckets()">
{{ 'SEARCH.FILTER.BUTTONS.CLEAR-ALL.LABEL' | translate }} {{ 'SEARCH.FILTER.BUTTONS.CLEAR-ALL.LABEL' | translate }}
</mat-chip> </mat-chip>
<mat-chip <mat-chip
data-automation-id="chip-list-entry"
*ngFor="let selection of searchFilter.selectedBuckets" *ngFor="let selection of searchFilter.selectedBuckets"
[removable]="true" [removable]="true"
(removed)="searchFilter.unselectFacetBucket(selection.field, selection.bucket)"> (removed)="searchFilter.unselectFacetBucket(selection.field, selection.bucket)">

View File

@@ -16,25 +16,32 @@
*/ */
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { setupTestBed, CoreModule } from '@alfresco/adf-core'; import { CoreModule, setupTestBed } from '@alfresco/adf-core';
import { TestBed } from '@angular/core/testing'; import { TestBed, ComponentFixture } from '@angular/core/testing';
import { SearchModule } from '../../search.module'; import { SearchModule } from '../../search.module';
import { By } from '@angular/platform-browser';
import { SelectedBucket } from '../search-filter/search-filter.component';
@Component({ @Component({
selector: 'adf-test-component', selector: 'adf-test-component',
template: ` template: `
<adf-search-chip-list [searchFilter]="searchFilter"></adf-search-chip-list> <adf-search-chip-list
[searchFilter]="searchFilter"
[clearAll]="allowClear">
</adf-search-chip-list>
` `
}) })
class TestComponent { class TestComponent {
allowClear = true;
searchFilter = { searchFilter = {
selectedBuckets: [], selectedBuckets: <SelectedBucket[]> [],
unselectFacetBucket() {} unselectFacetBucket() {}
}; };
} }
describe('SearchChipListComponent', () => { describe('SearchChipListComponent', () => {
let fixture: ComponentFixture<TestComponent>;
let component: TestComponent;
setupTestBed({ setupTestBed({
imports: [ imports: [
@@ -46,14 +53,79 @@ describe('SearchChipListComponent', () => {
] ]
}); });
it('should remove items from the search filter', () => { beforeEach(() => {
const fixture = TestBed.createComponent(TestComponent); fixture = TestBed.createComponent(TestComponent);
const component: TestComponent = fixture.componentInstance; component = fixture.componentInstance;
});
it('should display clear button only when entries present', () => {
fixture.detectChanges();
let clearButton = fixture.debugElement.query(By.css(`[data-automation-id="reset-filter"]`));
expect(clearButton).toBeNull();
component.searchFilter.selectedBuckets = [{
bucket: {
count: 1,
label: 'test',
filterQuery: 'query'
},
field: null
}];
fixture.detectChanges();
clearButton = fixture.debugElement.query(By.css(`[data-automation-id="reset-filter"]`));
expect(clearButton).toBeDefined();
});
it('should reflect changes in the search filter', () => {
const selectedBuckets = component.searchFilter.selectedBuckets;
fixture.detectChanges();
let chips = fixture.debugElement.queryAll(By.css(`[data-automation-id="chip-list-entry"]`));
expect(chips.length).toBe(0);
selectedBuckets.push({
bucket: {
count: 1,
label: 'test',
filterQuery: 'query'
},
field: null
});
fixture.detectChanges();
chips = fixture.debugElement.queryAll(By.css(`[data-automation-id="chip-list-entry"]`));
expect(chips.length).toBe(1);
});
it('should remove the entry upon remove button click', async () => {
spyOn(component.searchFilter, 'unselectFacetBucket').and.callThrough();
component.searchFilter.selectedBuckets = [
{
bucket: {
count: 1,
label: 'test',
filterQuery: 'query'
},
field: null
}
];
fixture.detectChanges();
const chips = fixture.debugElement.queryAll(By.css(`[data-automation-id="chip-list-entry"] .mat-chip-remove`));
chips[0].nativeElement.click();
await fixture.whenStable();
expect(component.searchFilter.unselectFacetBucket).toHaveBeenCalled();
});
it('should remove items from the search filter on clear button click', () => {
spyOn(component.searchFilter, 'unselectFacetBucket').and.stub(); spyOn(component.searchFilter, 'unselectFacetBucket').and.stub();
const selectedBucket1 = {field: { id: 1 }, bucket: {label: 'bucket1'}}; const selectedBucket1: any = { field: { id: 1 }, bucket: {label: 'bucket1'} };
const selectedBucket2 = {field: { id: 2 }, bucket: {label: 'bucket2'}}; const selectedBucket2: any = { field: { id: 2 }, bucket: {label: 'bucket2'} };
component.searchFilter.selectedBuckets = [selectedBucket1, selectedBucket2]; component.searchFilter.selectedBuckets = [selectedBucket1, selectedBucket2];
fixture.detectChanges(); fixture.detectChanges();
@@ -66,4 +138,28 @@ describe('SearchChipListComponent', () => {
expect(component.searchFilter.unselectFacetBucket).toHaveBeenCalledWith(selectedBucket1.field, selectedBucket1.bucket); expect(component.searchFilter.unselectFacetBucket).toHaveBeenCalledWith(selectedBucket1.field, selectedBucket1.bucket);
}); });
it('should disable clear mode via input properties', () => {
spyOn(component.searchFilter, 'unselectFacetBucket').and.callThrough();
component.allowClear = false;
component.searchFilter.selectedBuckets = [
{
bucket: {
count: 1,
label: 'test',
filterQuery: 'query'
},
field: null
}
];
fixture.detectChanges();
const chips = fixture.debugElement.queryAll(By.css(`[data-automation-id="chip-list-entry"] .mat-chip-remove`));
expect(chips.length).toBe(1);
const clearButton = fixture.debugElement.query(By.css(`[data-automation-id="reset-filter"]`));
expect(clearButton).toBeNull();
});
}); });

View File

@@ -26,6 +26,11 @@ import { takeUntil } from 'rxjs/operators';
import { GenericBucket, GenericFacetResponse, ResultSetContext, ResultSetPaging } from '@alfresco/js-api'; import { GenericBucket, GenericFacetResponse, ResultSetContext, ResultSetPaging } from '@alfresco/js-api';
import { Subject } from 'rxjs'; import { Subject } from 'rxjs';
export interface SelectedBucket {
field: FacetField;
bucket: FacetFieldBucket;
}
@Component({ @Component({
selector: 'adf-search-filter', selector: 'adf-search-filter',
templateUrl: './search-filter.component.html', templateUrl: './search-filter.component.html',
@@ -49,7 +54,7 @@ export class SearchFilterComponent implements OnInit, OnDestroy {
'default': false 'default': false
}; };
displayResetButton: boolean; displayResetButton: boolean;
selectedBuckets: Array<{ field: FacetField, bucket: FacetFieldBucket }> = []; selectedBuckets: SelectedBucket[] = [];
private onDestroy$ = new Subject<boolean>(); private onDestroy$ = new Subject<boolean>();