mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 01:54:15 +00:00
291 lines
10 KiB
TypeScript
291 lines
10 KiB
TypeScript
import { ChangeDetectorRef, Component, NO_ERRORS_SCHEMA } from '@angular/core';
|
|
import { ComponentFixture, inject, TestBed, waitForAsync } from '@angular/core/testing';
|
|
import { CdkTreeModule } from '@angular/cdk/tree';
|
|
|
|
import { of as observableOf } from 'rxjs';
|
|
import { StoreModule } from '@ngrx/store';
|
|
import { TranslateModule } from '@ngx-translate/core';
|
|
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
|
|
import { provideMockStore } from '@ngrx/store/testing';
|
|
|
|
import { createTestComponent } from '../../testing/utils.test';
|
|
import { VocabularyTreeviewComponent } from './vocabulary-treeview.component';
|
|
import { VocabularyTreeviewService } from './vocabulary-treeview.service';
|
|
import { VocabularyEntryDetail } from '../../../core/submission/vocabularies/models/vocabulary-entry-detail.model';
|
|
import { TreeviewFlatNode, TreeviewNode } from './vocabulary-treeview-node.model';
|
|
import { FormFieldMetadataValueObject } from '../builder/models/form-field-metadata-value.model';
|
|
import { VocabularyOptions } from '../../../core/submission/vocabularies/models/vocabulary-options.model';
|
|
import { PageInfo } from '../../../core/shared/page-info.model';
|
|
import { VocabularyEntry } from '../../../core/submission/vocabularies/models/vocabulary-entry.model';
|
|
import { AuthTokenInfo } from '../../../core/auth/models/auth-token-info.model';
|
|
import { authReducer } from '../../../core/auth/auth.reducer';
|
|
import { storeModuleConfig } from '../../../app.reducer';
|
|
import { By } from '@angular/platform-browser';
|
|
|
|
describe('VocabularyTreeviewComponent test suite', () => {
|
|
|
|
let comp: VocabularyTreeviewComponent;
|
|
let compAsAny: any;
|
|
let fixture: ComponentFixture<VocabularyTreeviewComponent>;
|
|
let initialState;
|
|
let de;
|
|
|
|
const item = new VocabularyEntryDetail();
|
|
item.id = 'node1';
|
|
const item2 = new VocabularyEntryDetail();
|
|
item2.id = 'node2';
|
|
const emptyNodeMap = new Map<string, TreeviewFlatNode>();
|
|
const storedNodeMap = new Map<string, TreeviewFlatNode>().set('test', new TreeviewFlatNode(item2));
|
|
const nodeMap = new Map<string, TreeviewFlatNode>().set('test', new TreeviewFlatNode(item));
|
|
const vocabularyOptions = new VocabularyOptions('vocabularyTest', false);
|
|
const modalStub = jasmine.createSpyObj('modalStub', ['close']);
|
|
const vocabularyTreeviewServiceStub = jasmine.createSpyObj('VocabularyTreeviewService', {
|
|
initialize: jasmine.createSpy('initialize'),
|
|
getData: jasmine.createSpy('getData'),
|
|
loadMore: jasmine.createSpy('loadMore'),
|
|
loadMoreRoot: jasmine.createSpy('loadMoreRoot'),
|
|
isLoading: jasmine.createSpy('isLoading'),
|
|
searchByQuery: jasmine.createSpy('searchByQuery'),
|
|
restoreNodes: jasmine.createSpy('restoreNodes'),
|
|
cleanTree: jasmine.createSpy('cleanTree'),
|
|
});
|
|
|
|
initialState = {
|
|
core: {
|
|
auth: {
|
|
authenticated: true,
|
|
loaded: true,
|
|
blocking: false,
|
|
loading: false,
|
|
authToken: new AuthTokenInfo('test_token'),
|
|
userId: 'testid',
|
|
authMethods: []
|
|
}
|
|
}
|
|
};
|
|
|
|
beforeEach(waitForAsync(() => {
|
|
TestBed.configureTestingModule({
|
|
imports: [
|
|
CdkTreeModule,
|
|
StoreModule.forRoot({ auth: authReducer }, storeModuleConfig),
|
|
TranslateModule.forRoot()
|
|
],
|
|
declarations: [
|
|
VocabularyTreeviewComponent,
|
|
TestComponent
|
|
],
|
|
providers: [
|
|
{ provide: VocabularyTreeviewService, useValue: vocabularyTreeviewServiceStub },
|
|
{ provide: NgbActiveModal, useValue: modalStub },
|
|
provideMockStore({ initialState }),
|
|
ChangeDetectorRef,
|
|
VocabularyTreeviewComponent
|
|
],
|
|
schemas: [NO_ERRORS_SCHEMA]
|
|
}).compileComponents().then(() => {
|
|
vocabularyTreeviewServiceStub.getData.and.returnValue(observableOf([]));
|
|
vocabularyTreeviewServiceStub.isLoading.and.returnValue(observableOf(false));
|
|
});
|
|
}));
|
|
|
|
afterEach(() => {
|
|
fixture.destroy();
|
|
comp = null;
|
|
compAsAny = null;
|
|
});
|
|
|
|
describe('', () => {
|
|
let testComp: TestComponent;
|
|
let testFixture: ComponentFixture<TestComponent>;
|
|
|
|
// synchronous beforeEach
|
|
beforeEach(() => {
|
|
|
|
const html = `
|
|
<ds-vocabulary-treeview [vocabularyOptions]="vocabularyOptions" [preloadLevel]="preloadLevel"></ds-vocabulary-treeview>`;
|
|
|
|
testFixture = createTestComponent(html, TestComponent) as ComponentFixture<TestComponent>;
|
|
testComp = testFixture.componentInstance;
|
|
vocabularyTreeviewServiceStub.getData.and.returnValue(observableOf([]));
|
|
});
|
|
|
|
afterEach(() => {
|
|
testFixture.destroy();
|
|
});
|
|
|
|
it('should create VocabularyTreeviewComponent', inject([VocabularyTreeviewComponent], (app: VocabularyTreeviewComponent) => {
|
|
expect(app).toBeDefined();
|
|
}));
|
|
});
|
|
|
|
describe('', () => {
|
|
beforeEach(() => {
|
|
fixture = TestBed.createComponent(VocabularyTreeviewComponent);
|
|
comp = fixture.componentInstance;
|
|
compAsAny = comp;
|
|
comp.vocabularyOptions = vocabularyOptions;
|
|
comp.selectedItems = [];
|
|
});
|
|
|
|
it('should should init component properly', () => {
|
|
fixture.detectChanges();
|
|
expect(comp.dataSource.data).toEqual([]);
|
|
expect(vocabularyTreeviewServiceStub.initialize).toHaveBeenCalled();
|
|
});
|
|
|
|
it('should should init component properly with init value as FormFieldMetadataValueObject', () => {
|
|
const currentValue = new FormFieldMetadataValueObject();
|
|
currentValue.value = 'testValue';
|
|
currentValue.otherInformation = {
|
|
id: 'entryID'
|
|
};
|
|
comp.selectedItems = [currentValue.value];
|
|
fixture.detectChanges();
|
|
expect(comp.dataSource.data).toEqual([]);
|
|
expect(vocabularyTreeviewServiceStub.initialize).toHaveBeenCalledWith(comp.vocabularyOptions, new PageInfo(), ['testValue'], null);
|
|
});
|
|
|
|
it('should should init component properly with init value as VocabularyEntry', () => {
|
|
const currentValue = new VocabularyEntry();
|
|
currentValue.value = 'testValue';
|
|
currentValue.otherInformation = {
|
|
id: 'entryID'
|
|
};
|
|
comp.selectedItems = [currentValue.value];
|
|
fixture.detectChanges();
|
|
expect(comp.dataSource.data).toEqual([]);
|
|
expect(vocabularyTreeviewServiceStub.initialize).toHaveBeenCalledWith(comp.vocabularyOptions, new PageInfo(), ['testValue'], null);
|
|
});
|
|
|
|
it('should call loadMore function', () => {
|
|
comp.loadMore(item);
|
|
fixture.detectChanges();
|
|
expect(vocabularyTreeviewServiceStub.loadMore).toHaveBeenCalledWith(item, []);
|
|
});
|
|
|
|
it('should call loadMoreRoot function', () => {
|
|
const node = new TreeviewFlatNode(item);
|
|
comp.loadMoreRoot(node);
|
|
fixture.detectChanges();
|
|
expect(vocabularyTreeviewServiceStub.loadMoreRoot).toHaveBeenCalledWith(node, []);
|
|
});
|
|
|
|
it('should call loadChildren function', () => {
|
|
const node = new TreeviewFlatNode(item);
|
|
comp.loadChildren(node);
|
|
fixture.detectChanges();
|
|
expect(vocabularyTreeviewServiceStub.loadMore).toHaveBeenCalledWith(node.item, [], true);
|
|
});
|
|
|
|
it('should emit select event', () => {
|
|
spyOn(comp, 'onSelect');
|
|
comp.onSelect(item);
|
|
|
|
expect(comp.onSelect).toHaveBeenCalledWith(item);
|
|
});
|
|
|
|
it('should call searchByQuery function and set storedNodeMap properly', () => {
|
|
comp.searchText = 'test search';
|
|
comp.nodeMap.set('test', new TreeviewFlatNode(item));
|
|
comp.search();
|
|
fixture.detectChanges();
|
|
expect(vocabularyTreeviewServiceStub.searchByQuery).toHaveBeenCalledWith('test search', []);
|
|
expect(comp.storedNodeMap).toEqual(nodeMap);
|
|
expect(comp.nodeMap).toEqual(emptyNodeMap);
|
|
});
|
|
|
|
it('should call searchByQuery function and not set storedNodeMap', () => {
|
|
comp.searchText = 'test search';
|
|
comp.nodeMap.set('test', new TreeviewFlatNode(item));
|
|
comp.storedNodeMap.set('test', new TreeviewFlatNode(item2));
|
|
comp.search();
|
|
fixture.detectChanges();
|
|
expect(vocabularyTreeviewServiceStub.searchByQuery).toHaveBeenCalledWith('test search', []);
|
|
expect(comp.storedNodeMap).toEqual(storedNodeMap);
|
|
expect(comp.nodeMap).toEqual(emptyNodeMap);
|
|
});
|
|
|
|
it('should call restoreNodes function and restore nodeMap properly', () => {
|
|
comp.nodeMap.set('test', new TreeviewFlatNode(item));
|
|
comp.storedNodeMap.set('test', new TreeviewFlatNode(item2));
|
|
comp.reset();
|
|
fixture.detectChanges();
|
|
expect(vocabularyTreeviewServiceStub.restoreNodes).toHaveBeenCalled();
|
|
expect(comp.storedNodeMap).toEqual(emptyNodeMap);
|
|
expect(comp.nodeMap).toEqual(storedNodeMap);
|
|
expect(comp.searchText).toEqual('');
|
|
});
|
|
|
|
it('should clear search string', () => {
|
|
comp.nodeMap.set('test', new TreeviewFlatNode(item));
|
|
comp.reset();
|
|
fixture.detectChanges();
|
|
expect(comp.storedNodeMap).toEqual(emptyNodeMap);
|
|
expect(comp.nodeMap).toEqual(nodeMap);
|
|
expect(comp.searchText).toEqual('');
|
|
});
|
|
|
|
it('should call cleanTree method on destroy', () => {
|
|
compAsAny.ngOnDestroy();
|
|
expect(vocabularyTreeviewServiceStub.cleanTree).toHaveBeenCalled();
|
|
});
|
|
});
|
|
|
|
describe('', () => {
|
|
beforeEach(() => {
|
|
vocabularyTreeviewServiceStub.getData.and.returnValue(observableOf([
|
|
{
|
|
'item': {
|
|
'id': 'srsc:SCB11',
|
|
'display': 'HUMANITIES and RELIGION'
|
|
}
|
|
} as TreeviewNode,
|
|
{
|
|
'item': {
|
|
'id': 'srsc:SCB12',
|
|
'display': 'LAW/JURISPRUDENCE'
|
|
}
|
|
} as TreeviewNode,
|
|
{
|
|
'item': {
|
|
'id': 'srsc:SCB13',
|
|
'display': 'SOCIAL SCIENCES'
|
|
}
|
|
} as TreeviewNode,
|
|
]));
|
|
fixture = TestBed.createComponent(VocabularyTreeviewComponent);
|
|
comp = fixture.componentInstance;
|
|
compAsAny = comp;
|
|
comp.vocabularyOptions = vocabularyOptions;
|
|
comp.selectedItems = [];
|
|
de = fixture.debugElement;
|
|
});
|
|
|
|
it('should not display checkboxes by default', async () => {
|
|
fixture.detectChanges();
|
|
expect(de.query(By.css('input[checkbox]'))).toBeNull();
|
|
expect(de.queryAll(By.css('cdk-tree-node')).length).toEqual(3);
|
|
});
|
|
|
|
it('should display checkboxes if multiSelect is true', async () => {
|
|
comp.multiSelect = true;
|
|
fixture.detectChanges();
|
|
expect(de.queryAll(By.css('#leaf-node-checkbox')).length).toEqual(3);
|
|
expect(de.queryAll(By.css('cdk-tree-node')).length).toEqual(3);
|
|
});
|
|
});
|
|
});
|
|
|
|
// declare a test component
|
|
@Component({
|
|
selector: 'ds-test-cmp',
|
|
template: ``
|
|
})
|
|
class TestComponent {
|
|
|
|
vocabularyOptions: VocabularyOptions = new VocabularyOptions('vocabularyTest', false);
|
|
preloadLevel = 2;
|
|
|
|
}
|