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; 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); }); }); });