diff --git a/src/app/+item-page/simple/entity-types/journal/journal-page-fields.component.html b/src/app/+item-page/simple/entity-types/journal/journal-page-fields.component.html index c2e9fa1c05..b02000a9e4 100644 --- a/src/app/+item-page/simple/entity-types/journal/journal-page-fields.component.html +++ b/src/app/+item-page/simple/entity-types/journal/journal-page-fields.component.html @@ -6,11 +6,11 @@ - - @@ -20,7 +20,7 @@ [entities]="volumes$ | async" [label]="'relationships.isVolumeOf' | translate"> - diff --git a/src/app/+item-page/simple/entity-types/journal/journal-page-fields.component.spec.ts b/src/app/+item-page/simple/entity-types/journal/journal-page-fields.component.spec.ts new file mode 100644 index 0000000000..1b7142b108 --- /dev/null +++ b/src/app/+item-page/simple/entity-types/journal/journal-page-fields.component.spec.ts @@ -0,0 +1,88 @@ +import { ChangeDetectionStrategy, DebugElement, NO_ERRORS_SCHEMA } from '@angular/core'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { TruncatableService } from '../../../../shared/truncatable/truncatable.service'; +import { ITEM } from '../../../../shared/entities/switcher/entity-type-switcher.component'; +import { TruncatePipe } from '../../../../shared/utils/truncate.pipe'; +import { ItemDataService } from '../../../../core/data/item-data.service'; +import { Observable } from 'rxjs/Observable'; +import { Item } from '../../../../core/shared/item.model'; +import { By } from '@angular/platform-browser'; +import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; +import { MockTranslateLoader } from '../../../../shared/mocks/mock-translate-loader'; +import { GenericItemPageFieldComponent } from '../../field-components/specific-field/generic/generic-item-page-field.component'; +import { RemoteData } from '../../../../core/data/remote-data'; +import { PaginatedList } from '../../../../core/data/paginated-list'; +import { PageInfo } from '../../../../core/shared/page-info.model'; +import { isNotEmpty } from '../../../../shared/empty.util'; +import { JournalPageFieldsComponent } from './journal-page-fields.component'; + +let comp: JournalPageFieldsComponent; +let fixture: ComponentFixture; + +const mockItem: Item = Object.assign(new Item(), { + bitstreams: Observable.of(new RemoteData(false, false, true, null, new PaginatedList(new PageInfo(), []))), + metadata: [ + { + key: 'journal.identifier.issn', + language: 'en_US', + value: '1234' + }, + { + key: 'journal.publisher', + language: 'en_US', + value: 'Atmire' + }, + { + key: 'journal.identifier.description', + language: 'en_US', + value: 'desc' + }] +}); + +describe('JournalPageFieldsComponent', () => { + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useClass: MockTranslateLoader + } + })], + declarations: [JournalPageFieldsComponent, GenericItemPageFieldComponent, TruncatePipe], + providers: [ + {provide: ITEM, useValue: mockItem}, + {provide: ItemDataService, useValue: {}}, + {provide: TruncatableService, useValue: {}} + ], + + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(JournalPageFieldsComponent, { + set: {changeDetection: ChangeDetectionStrategy.Default} + }).compileComponents(); + })); + + beforeEach(async(() => { + fixture = TestBed.createComponent(JournalPageFieldsComponent); + comp = fixture.componentInstance; + fixture.detectChanges(); + })); + + for (const metadata of mockItem.metadata) { + it(`should be calling a component with metadata field ${metadata.key}`, () => { + const fields = fixture.debugElement.queryAll(By.css('.item-page-fields')); + expect(containsFieldInput(fields, metadata.key)).toBeTruthy(); + }); + } +}); + +function containsFieldInput(fields: DebugElement[], metadataKey: string): boolean { + for (const field of fields) { + const fieldComp = field.componentInstance; + if (isNotEmpty(fieldComp.fields)) { + if (fieldComp.fields.indexOf(metadataKey) > -1) { + return true; + } + } + } + return false; +} diff --git a/src/app/+item-page/simple/entity-types/journal/journal-page-fields.component.ts b/src/app/+item-page/simple/entity-types/journal/journal-page-fields.component.ts index b43805ec52..e7640fdd82 100644 --- a/src/app/+item-page/simple/entity-types/journal/journal-page-fields.component.ts +++ b/src/app/+item-page/simple/entity-types/journal/journal-page-fields.component.ts @@ -9,6 +9,7 @@ import { EntityPageFieldsComponent, filterRelationsByTypeLabel, relationsToItems } from '../shared/entity-page-fields.component'; +import { isNotEmpty } from '../../../../shared/empty.util'; @rendersEntityType('Journal', ElementViewMode.Full) @Component({ @@ -28,9 +29,11 @@ export class JournalPageFieldsComponent extends EntityPageFieldsComponent { ngOnInit(): void { super.ngOnInit(); - this.volumes$ = this.resolvedRelsAndTypes$.pipe( - filterRelationsByTypeLabel('isVolumeOfJournal'), - relationsToItems(this.item.id, this.ids) - ); + if (isNotEmpty(this.resolvedRelsAndTypes$)) { + this.volumes$ = this.resolvedRelsAndTypes$.pipe( + filterRelationsByTypeLabel('isVolumeOfJournal'), + relationsToItems(this.item.id, this.ids) + ); + } } }