mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 01:54:15 +00:00
85192: Write test for themed browse entries
This commit is contained in:
@@ -2,7 +2,7 @@ import { BrowseByComponent } from './browse-by.component';
|
|||||||
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
|
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
|
||||||
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
|
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
|
||||||
import { By } from '@angular/platform-browser';
|
import { By } from '@angular/platform-browser';
|
||||||
import { NO_ERRORS_SCHEMA } from '@angular/core';
|
import { Component, NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
import { of as observableOf } from 'rxjs';
|
import { of as observableOf } from 'rxjs';
|
||||||
import { SharedModule } from '../shared.module';
|
import { SharedModule } from '../shared.module';
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
@@ -18,9 +18,24 @@ import { PaginationComponentOptions } from '../pagination/pagination-component-o
|
|||||||
import { SortDirection, SortOptions } from '../../core/cache/models/sort-options.model';
|
import { SortDirection, SortOptions } from '../../core/cache/models/sort-options.model';
|
||||||
import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils';
|
import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils';
|
||||||
import { storeModuleConfig } from '../../app.reducer';
|
import { storeModuleConfig } from '../../app.reducer';
|
||||||
import { FindListOptions } from '../../core/data/request.models';
|
|
||||||
import { PaginationService } from '../../core/pagination/pagination.service';
|
import { PaginationService } from '../../core/pagination/pagination.service';
|
||||||
import { PaginationServiceStub } from '../testing/pagination-service.stub';
|
import { PaginationServiceStub } from '../testing/pagination-service.stub';
|
||||||
|
import { ListableObjectComponentLoaderComponent } from '../object-collection/shared/listable-object/listable-object-component-loader.component';
|
||||||
|
import { ViewMode } from '../../core/shared/view-mode.model';
|
||||||
|
import { BrowseEntryListElementComponent } from '../object-list/browse-entry-list-element/browse-entry-list-element.component';
|
||||||
|
import { listableObjectComponent } from '../object-collection/shared/listable-object/listable-object.decorator';
|
||||||
|
import { BrowseEntry } from '../../core/shared/browse-entry.model';
|
||||||
|
import { ITEM } from '../../core/shared/item.resource-type';
|
||||||
|
import { DEFAULT_CONTEXT } from '../metadata-representation/metadata-representation.decorator';
|
||||||
|
import { ThemeService } from '../theme-support/theme.service';
|
||||||
|
import SpyObj = jasmine.SpyObj;
|
||||||
|
|
||||||
|
@listableObjectComponent(BrowseEntry, ViewMode.ListElement, DEFAULT_CONTEXT, 'custom')
|
||||||
|
@Component({
|
||||||
|
selector: 'ds-browse-entry-list-element',
|
||||||
|
template: ''
|
||||||
|
})
|
||||||
|
class MockThemedBrowseEntryListElementComponent {}
|
||||||
|
|
||||||
describe('BrowseByComponent', () => {
|
describe('BrowseByComponent', () => {
|
||||||
let comp: BrowseByComponent;
|
let comp: BrowseByComponent;
|
||||||
@@ -56,7 +71,11 @@ describe('BrowseByComponent', () => {
|
|||||||
});
|
});
|
||||||
const paginationService = new PaginationServiceStub(paginationConfig);
|
const paginationService = new PaginationServiceStub(paginationConfig);
|
||||||
|
|
||||||
|
let themeService: SpyObj<ThemeService>;
|
||||||
|
|
||||||
beforeEach(waitForAsync(() => {
|
beforeEach(waitForAsync(() => {
|
||||||
|
themeService = jasmine.createSpyObj('ThemeService', ['getThemeName', 'getThemeName$']);
|
||||||
|
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [
|
imports: [
|
||||||
CommonModule,
|
CommonModule,
|
||||||
@@ -75,7 +94,9 @@ describe('BrowseByComponent', () => {
|
|||||||
],
|
],
|
||||||
declarations: [],
|
declarations: [],
|
||||||
providers: [
|
providers: [
|
||||||
{provide: PaginationService, useValue: paginationService}
|
{provide: PaginationService, useValue: paginationService},
|
||||||
|
{provide: MockThemedBrowseEntryListElementComponent},
|
||||||
|
{provide: ThemeService, useValue: themeService},
|
||||||
],
|
],
|
||||||
schemas: [NO_ERRORS_SCHEMA]
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
}).compileComponents();
|
}).compileComponents();
|
||||||
@@ -163,4 +184,67 @@ describe('BrowseByComponent', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('when enableArrows is true and browseEntries are provided', () => {
|
||||||
|
let browseEntries;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
browseEntries = [
|
||||||
|
Object.assign(new BrowseEntry(), {
|
||||||
|
type: ITEM,
|
||||||
|
authority: 'authority key 1',
|
||||||
|
value: 'browse entry 1',
|
||||||
|
language: null,
|
||||||
|
count: 1,
|
||||||
|
}),
|
||||||
|
Object.assign(new BrowseEntry(), {
|
||||||
|
type: ITEM,
|
||||||
|
authority: null,
|
||||||
|
value: 'browse entry 2',
|
||||||
|
language: null,
|
||||||
|
count: 4,
|
||||||
|
}),
|
||||||
|
];
|
||||||
|
|
||||||
|
comp.enableArrows = true;
|
||||||
|
comp.objects$ = createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), browseEntries));
|
||||||
|
comp.paginationConfig = paginationConfig;
|
||||||
|
comp.sortConfig = Object.assign(new SortOptions('dc.title', SortDirection.ASC));
|
||||||
|
// NOTE: do NOT trigger change detection until the theme is set, such that the theme can be picked up as well
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('when theme is base', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
themeService.getThemeName.and.returnValue('base');
|
||||||
|
themeService.getThemeName$.and.returnValue(observableOf('base'));
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should use the base component to render browse entries', () => {
|
||||||
|
const componentLoaders = fixture.debugElement.queryAll(By.directive(ListableObjectComponentLoaderComponent));
|
||||||
|
expect(componentLoaders.length).toEqual(browseEntries.length);
|
||||||
|
componentLoaders.forEach((componentLoader) => {
|
||||||
|
const browseEntry = componentLoader.query(By.css('ds-browse-entry-list-element'));
|
||||||
|
expect(browseEntry.componentInstance).toBeInstanceOf(BrowseEntryListElementComponent);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('when theme is custom', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
themeService.getThemeName.and.returnValue('custom');
|
||||||
|
themeService.getThemeName$.and.returnValue(observableOf('custom'));
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should use the themed component to render browse entries', () => {
|
||||||
|
const componentLoaders = fixture.debugElement.queryAll(By.directive(ListableObjectComponentLoaderComponent));
|
||||||
|
expect(componentLoaders.length).toEqual(browseEntries.length);
|
||||||
|
componentLoaders.forEach((componentLoader) => {
|
||||||
|
const browseEntry = componentLoader.query(By.css('ds-browse-entry-list-element'));
|
||||||
|
expect(browseEntry.componentInstance).toBeInstanceOf(MockThemedBrowseEntryListElementComponent);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user