Files
dspace-angular/src/app/+item-page/simple/metadata-representation-list/metadata-representation-list.component.spec.ts
2019-12-09 15:25:43 +01:00

120 lines
3.6 KiB
TypeScript

import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
import { By } from '@angular/platform-browser';
import { MetadataRepresentationListComponent } from './metadata-representation-list.component';
import { RelationshipService } from '../../../core/data/relationship.service';
import { Item } from '../../../core/shared/item.model';
import { Relationship } from '../../../core/shared/item-relationships/relationship.model';
import { createSuccessfulRemoteDataObject$ } from '../../../shared/testing/utils';
import { TranslateModule } from '@ngx-translate/core';
import { VarDirective } from '../../../shared/utils/var.directive';
import { of as observableOf } from 'rxjs';
const itemType = 'Person';
const metadataField = 'dc.contributor.author';
const parentItem: Item = Object.assign(new Item(), {
id: 'parent-item',
metadata: {
'dc.contributor.author': [
{
language: null,
value: 'Related Author with authority',
authority: 'virtual::related-author',
place: 2
},
{
language: null,
value: 'Author without authority',
place: 1
}
],
'dc.title': [
{
language: null,
value: 'Parent Item'
}
]
}
});
const relatedAuthor: Item = Object.assign(new Item(), {
id: 'related-author',
metadata: {
'dc.title': [
{
language: null,
value: 'Related Author'
}
]
}
});
const relation: Relationship = Object.assign(new Relationship(), {
leftItem: createSuccessfulRemoteDataObject$(parentItem),
rightItem: createSuccessfulRemoteDataObject$(relatedAuthor)
});
let relationshipService: RelationshipService;
describe('MetadataRepresentationListComponent', () => {
let comp: MetadataRepresentationListComponent;
let fixture: ComponentFixture<MetadataRepresentationListComponent>;
relationshipService = jasmine.createSpyObj('relationshipService',
{
findById: createSuccessfulRemoteDataObject$(relation)
}
);
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [TranslateModule.forRoot()],
declarations: [MetadataRepresentationListComponent, VarDirective],
providers: [
{ provide: RelationshipService, useValue: relationshipService }
],
schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(MetadataRepresentationListComponent, {
set: {changeDetection: ChangeDetectionStrategy.Default}
}).compileComponents();
}));
beforeEach(async(() => {
fixture = TestBed.createComponent(MetadataRepresentationListComponent);
comp = fixture.componentInstance;
comp.parentItem = parentItem;
comp.itemType = itemType;
comp.metadataField = metadataField;
fixture.detectChanges();
}));
it('should load 2 ds-metadata-representation-loader components', () => {
const fields = fixture.debugElement.queryAll(By.css('ds-metadata-representation-loader'));
expect(fields.length).toBe(2);
});
it('should contain one page of items', () => {
expect(comp.objects.length).toEqual(1);
});
describe('when increase is called', () => {
beforeEach(() => {
comp.increase();
});
it('should add a new page to the list', () => {
expect(comp.objects.length).toEqual(2);
});
});
describe('when decrease is called', () => {
beforeEach(() => {
// Add a second page
comp.objects.push(observableOf(undefined));
comp.decrease();
});
it('should decrease the list of pages', () => {
expect(comp.objects.length).toEqual(1);
});
});
});