Files
dspace-angular/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts
2024-03-13 12:02:01 +01:00

107 lines
3.2 KiB
TypeScript

import {
Component,
SimpleChange,
} from '@angular/core';
import {
ComponentFixture,
TestBed,
waitForAsync,
} from '@angular/core/testing';
import { FlatBrowseDefinition } from '../../core/shared/flat-browse-definition.model';
import { NonHierarchicalBrowseDefinition } from '../../core/shared/non-hierarchical-browse-definition';
import { ValueListBrowseDefinition } from '../../core/shared/value-list-browse-definition.model';
import { DynamicComponentLoaderDirective } from '../../shared/abstract-component-loader/dynamic-component-loader.directive';
import { getMockThemeService } from '../../shared/mocks/theme-service.mock';
import { ThemeService } from '../../shared/theme-support/theme.service';
import { BrowseByDataType } from './browse-by-data-type';
import { BrowseBySwitcherComponent } from './browse-by-switcher.component';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: '',
template: '<span id="BrowseByTestComponent"></span>',
})
class BrowseByTestComponent {
}
describe('BrowseBySwitcherComponent', () => {
let comp: BrowseBySwitcherComponent;
let fixture: ComponentFixture<BrowseBySwitcherComponent>;
const types = [
Object.assign(
new FlatBrowseDefinition(), {
id: 'title',
dataType: BrowseByDataType.Title,
},
),
Object.assign(
new FlatBrowseDefinition(), {
id: 'dateissued',
dataType: BrowseByDataType.Date,
metadataKeys: ['dc.date.issued'],
},
),
Object.assign(
new ValueListBrowseDefinition(), {
id: 'author',
dataType: BrowseByDataType.Metadata,
},
),
Object.assign(
new ValueListBrowseDefinition(), {
id: 'subject',
dataType: BrowseByDataType.Metadata,
},
),
];
let themeService: ThemeService;
const themeName = 'dspace';
beforeEach(waitForAsync(() => {
themeService = getMockThemeService(themeName);
void TestBed.configureTestingModule({
imports: [
BrowseBySwitcherComponent,
DynamicComponentLoaderDirective,
],
providers: [
BrowseByTestComponent,
{ provide: ThemeService, useValue: themeService },
],
}).compileComponents();
}));
beforeEach(waitForAsync(() => {
fixture = TestBed.createComponent(BrowseBySwitcherComponent);
comp = fixture.componentInstance;
spyOn(comp, 'getComponent').and.returnValue(BrowseByTestComponent);
spyOn(comp, 'connectInputsAndOutputs').and.callThrough();
}));
types.forEach((type: NonHierarchicalBrowseDefinition) => {
describe(`when switching to a browse-by page for "${type.id}"`, () => {
beforeEach(async () => {
comp.browseByType = type.dataType;
comp.ngOnChanges({
browseByType: new SimpleChange(undefined, type.dataType, true),
});
fixture.detectChanges();
await fixture.whenStable();
});
it(`should call getComponent with type "${type.dataType}"`, () => {
expect(comp.getComponent).toHaveBeenCalled();
expect(comp.connectInputsAndOutputs).toHaveBeenCalled();
});
});
});
});
export function createDataWithBrowseDefinition(browseDefinition) {
return { browseDefinition: browseDefinition };
}