From b70a58d008f09cf5d6069a899e07c535584daff7 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Fri, 26 Oct 2018 10:30:47 +0200 Subject: [PATCH] 56434: EntityPageFields component tests refactoring --- .../journal-issue-page-fields.component.html | 8 +- ...ournal-issue-page-fields.component.spec.ts | 63 +-------------- .../journal-volume-page-fields.component.html | 6 +- ...urnal-volume-page-fields.component.spec.ts | 63 +-------------- .../orgunit-page-fields.component.html | 10 +-- .../orgunit-page-fields.component.spec.ts | 63 +-------------- .../person/person-page-fields.component.html | 14 ++-- .../person-page-fields.component.spec.ts | 65 +-------------- .../project-page-fields.component.html | 10 +-- .../project-page-fields.component.spec.ts | 63 +-------------- .../entity-page-fields.component.spec.ts | 81 +++++++++++++++++++ 11 files changed, 115 insertions(+), 331 deletions(-) create mode 100644 src/app/+item-page/simple/entity-types/shared/entity-page-fields.component.spec.ts diff --git a/src/app/+item-page/simple/entity-types/journal-issue/journal-issue-page-fields.component.html b/src/app/+item-page/simple/entity-types/journal-issue/journal-issue-page-fields.component.html index 9a7262334b..73fee41f8f 100644 --- a/src/app/+item-page/simple/entity-types/journal-issue/journal-issue-page-fields.component.html +++ b/src/app/+item-page/simple/entity-types/journal-issue/journal-issue-page-fields.component.html @@ -6,11 +6,11 @@ - - @@ -24,11 +24,11 @@ [entities]="publications$ | async" [label]="'relationships.isPublicationOfJournalIssue' | translate"> - - diff --git a/src/app/+item-page/simple/entity-types/journal-issue/journal-issue-page-fields.component.spec.ts b/src/app/+item-page/simple/entity-types/journal-issue/journal-issue-page-fields.component.spec.ts index adf5529212..28802d68aa 100644 --- a/src/app/+item-page/simple/entity-types/journal-issue/journal-issue-page-fields.component.spec.ts +++ b/src/app/+item-page/simple/entity-types/journal-issue/journal-issue-page-fields.component.spec.ts @@ -1,23 +1,10 @@ -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 { JournalIssuePageFieldsComponent } from './journal-issue-page-fields.component'; -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'; - -let comp: JournalIssuePageFieldsComponent; -let fixture: ComponentFixture; +import { getEntityPageFieldsTest } from '../shared/entity-page-fields.component.spec'; const mockItem: Item = Object.assign(new Item(), { bitstreams: Observable.of(new RemoteData(false, false, true, null, new PaginatedList(new PageInfo(), []))), @@ -44,50 +31,4 @@ const mockItem: Item = Object.assign(new Item(), { }] }); -describe('JournalIssuePageFieldsComponent', () => { - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useClass: MockTranslateLoader - } - })], - declarations: [JournalIssuePageFieldsComponent, GenericItemPageFieldComponent, TruncatePipe], - providers: [ - {provide: ITEM, useValue: mockItem}, - {provide: ItemDataService, useValue: {}}, - {provide: TruncatableService, useValue: {}} - ], - - schemas: [NO_ERRORS_SCHEMA] - }).overrideComponent(JournalIssuePageFieldsComponent, { - set: {changeDetection: ChangeDetectionStrategy.Default} - }).compileComponents(); - })); - - beforeEach(async(() => { - fixture = TestBed.createComponent(JournalIssuePageFieldsComponent); - 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; -} +describe('JournalIssuePageFieldsComponent', getEntityPageFieldsTest(mockItem, JournalIssuePageFieldsComponent)); diff --git a/src/app/+item-page/simple/entity-types/journal-volume/journal-volume-page-fields.component.html b/src/app/+item-page/simple/entity-types/journal-volume/journal-volume-page-fields.component.html index ebac09b398..df770b06d8 100644 --- a/src/app/+item-page/simple/entity-types/journal-volume/journal-volume-page-fields.component.html +++ b/src/app/+item-page/simple/entity-types/journal-volume/journal-volume-page-fields.component.html @@ -6,11 +6,11 @@ - - @@ -24,7 +24,7 @@ [entities]="issues$ | async" [label]="'relationships.isIssueOf' | translate"> - diff --git a/src/app/+item-page/simple/entity-types/journal-volume/journal-volume-page-fields.component.spec.ts b/src/app/+item-page/simple/entity-types/journal-volume/journal-volume-page-fields.component.spec.ts index ab77c4ae62..bd406db360 100644 --- a/src/app/+item-page/simple/entity-types/journal-volume/journal-volume-page-fields.component.spec.ts +++ b/src/app/+item-page/simple/entity-types/journal-volume/journal-volume-page-fields.component.spec.ts @@ -1,23 +1,10 @@ -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 { JournalVolumePageFieldsComponent } from './journal-volume-page-fields.component'; - -let comp: JournalVolumePageFieldsComponent; -let fixture: ComponentFixture; +import { getEntityPageFieldsTest } from '../shared/entity-page-fields.component.spec'; const mockItem: Item = Object.assign(new Item(), { bitstreams: Observable.of(new RemoteData(false, false, true, null, new PaginatedList(new PageInfo(), []))), @@ -39,50 +26,4 @@ const mockItem: Item = Object.assign(new Item(), { }] }); -describe('JournalVolumePageFieldsComponent', () => { - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useClass: MockTranslateLoader - } - })], - declarations: [JournalVolumePageFieldsComponent, GenericItemPageFieldComponent, TruncatePipe], - providers: [ - {provide: ITEM, useValue: mockItem}, - {provide: ItemDataService, useValue: {}}, - {provide: TruncatableService, useValue: {}} - ], - - schemas: [NO_ERRORS_SCHEMA] - }).overrideComponent(JournalVolumePageFieldsComponent, { - set: {changeDetection: ChangeDetectionStrategy.Default} - }).compileComponents(); - })); - - beforeEach(async(() => { - fixture = TestBed.createComponent(JournalVolumePageFieldsComponent); - 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; -} +describe('JournalVolumePageFieldsComponent', getEntityPageFieldsTest(mockItem, JournalVolumePageFieldsComponent)); diff --git a/src/app/+item-page/simple/entity-types/orgunit/orgunit-page-fields.component.html b/src/app/+item-page/simple/entity-types/orgunit/orgunit-page-fields.component.html index 8314eeae08..e5a02b54e5 100644 --- a/src/app/+item-page/simple/entity-types/orgunit/orgunit-page-fields.component.html +++ b/src/app/+item-page/simple/entity-types/orgunit/orgunit-page-fields.component.html @@ -6,19 +6,19 @@ - - - - @@ -36,7 +36,7 @@ [entities]="publications$ | async" [label]="'relationships.isPublicationOf' | translate"> - diff --git a/src/app/+item-page/simple/entity-types/orgunit/orgunit-page-fields.component.spec.ts b/src/app/+item-page/simple/entity-types/orgunit/orgunit-page-fields.component.spec.ts index cb066c0783..7ae90a7a9d 100644 --- a/src/app/+item-page/simple/entity-types/orgunit/orgunit-page-fields.component.spec.ts +++ b/src/app/+item-page/simple/entity-types/orgunit/orgunit-page-fields.component.spec.ts @@ -1,23 +1,10 @@ -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 { OrgUnitPageFieldsComponent } from './orgunit-page-fields.component'; - -let comp: OrgUnitPageFieldsComponent; -let fixture: ComponentFixture; +import { getEntityPageFieldsTest } from '../shared/entity-page-fields.component.spec'; const mockItem: Item = Object.assign(new Item(), { bitstreams: Observable.of(new RemoteData(false, false, true, null, new PaginatedList(new PageInfo(), []))), @@ -49,50 +36,4 @@ const mockItem: Item = Object.assign(new Item(), { }] }); -describe('OrgUnitPageFieldsComponent', () => { - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useClass: MockTranslateLoader - } - })], - declarations: [OrgUnitPageFieldsComponent, GenericItemPageFieldComponent, TruncatePipe], - providers: [ - {provide: ITEM, useValue: mockItem}, - {provide: ItemDataService, useValue: {}}, - {provide: TruncatableService, useValue: {}} - ], - - schemas: [NO_ERRORS_SCHEMA] - }).overrideComponent(OrgUnitPageFieldsComponent, { - set: {changeDetection: ChangeDetectionStrategy.Default} - }).compileComponents(); - })); - - beforeEach(async(() => { - fixture = TestBed.createComponent(OrgUnitPageFieldsComponent); - 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; -} +describe('OrgUnitPageFieldsComponent', getEntityPageFieldsTest(mockItem, OrgUnitPageFieldsComponent)); diff --git a/src/app/+item-page/simple/entity-types/person/person-page-fields.component.html b/src/app/+item-page/simple/entity-types/person/person-page-fields.component.html index b712c5e479..548f46624d 100644 --- a/src/app/+item-page/simple/entity-types/person/person-page-fields.component.html +++ b/src/app/+item-page/simple/entity-types/person/person-page-fields.component.html @@ -6,19 +6,19 @@ - - - - @@ -32,15 +32,15 @@ [entities]="orgUnits$ | async" [label]="'relationships.isOrgUnitOf' | translate"> - - - diff --git a/src/app/+item-page/simple/entity-types/person/person-page-fields.component.spec.ts b/src/app/+item-page/simple/entity-types/person/person-page-fields.component.spec.ts index 02f75966da..99432a3e66 100644 --- a/src/app/+item-page/simple/entity-types/person/person-page-fields.component.spec.ts +++ b/src/app/+item-page/simple/entity-types/person/person-page-fields.component.spec.ts @@ -1,24 +1,10 @@ -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 { PersonPageFieldsComponent } from './person-page-fields.component'; -import { SearchFixedFilterService } from '../../../../+search-page/search-filters/search-filter/search-fixed-filter.service'; - -let comp: PersonPageFieldsComponent; -let fixture: ComponentFixture; +import { getEntityPageFieldsTest } from '../shared/entity-page-fields.component.spec'; const mockItem: Item = Object.assign(new Item(), { bitstreams: Observable.of(new RemoteData(false, false, true, null, new PaginatedList(new PageInfo(), []))), @@ -60,51 +46,4 @@ const mockItem: Item = Object.assign(new Item(), { }] }); -describe('PersonPageFieldsComponent', () => { - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useClass: MockTranslateLoader - } - })], - declarations: [PersonPageFieldsComponent, GenericItemPageFieldComponent, TruncatePipe], - providers: [ - {provide: ITEM, useValue: mockItem}, - {provide: ItemDataService, useValue: {}}, - {provide: SearchFixedFilterService, useValue: {}}, - {provide: TruncatableService, useValue: {}} - ], - - schemas: [NO_ERRORS_SCHEMA] - }).overrideComponent(PersonPageFieldsComponent, { - set: {changeDetection: ChangeDetectionStrategy.Default} - }).compileComponents(); - })); - - beforeEach(async(() => { - fixture = TestBed.createComponent(PersonPageFieldsComponent); - 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; -} +describe('PersonPageFieldsComponent', getEntityPageFieldsTest(mockItem, PersonPageFieldsComponent)); diff --git a/src/app/+item-page/simple/entity-types/project/project-page-fields.component.html b/src/app/+item-page/simple/entity-types/project/project-page-fields.component.html index 159ae84584..36a71bd71a 100644 --- a/src/app/+item-page/simple/entity-types/project/project-page-fields.component.html +++ b/src/app/+item-page/simple/entity-types/project/project-page-fields.component.html @@ -6,15 +6,15 @@ - - - @@ -32,11 +32,11 @@ [entities]="orgUnits$ | async" [label]="'relationships.isOrgUnitOf' | translate"> - - diff --git a/src/app/+item-page/simple/entity-types/project/project-page-fields.component.spec.ts b/src/app/+item-page/simple/entity-types/project/project-page-fields.component.spec.ts index 6494b19215..013e7e1c00 100644 --- a/src/app/+item-page/simple/entity-types/project/project-page-fields.component.spec.ts +++ b/src/app/+item-page/simple/entity-types/project/project-page-fields.component.spec.ts @@ -1,23 +1,10 @@ -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 { ProjectPageFieldsComponent } from './project-page-fields.component'; - -let comp: ProjectPageFieldsComponent; -let fixture: ComponentFixture; +import { getEntityPageFieldsTest } from '../shared/entity-page-fields.component.spec'; const mockItem: Item = Object.assign(new Item(), { bitstreams: Observable.of(new RemoteData(false, false, true, null, new PaginatedList(new PageInfo(), []))), @@ -49,50 +36,4 @@ const mockItem: Item = Object.assign(new Item(), { }] }); -describe('ProjectPageFieldsComponent', () => { - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useClass: MockTranslateLoader - } - })], - declarations: [ProjectPageFieldsComponent, GenericItemPageFieldComponent, TruncatePipe], - providers: [ - {provide: ITEM, useValue: mockItem}, - {provide: ItemDataService, useValue: {}}, - {provide: TruncatableService, useValue: {}} - ], - - schemas: [NO_ERRORS_SCHEMA] - }).overrideComponent(ProjectPageFieldsComponent, { - set: {changeDetection: ChangeDetectionStrategy.Default} - }).compileComponents(); - })); - - beforeEach(async(() => { - fixture = TestBed.createComponent(ProjectPageFieldsComponent); - 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; -} +describe('ProjectPageFieldsComponent', getEntityPageFieldsTest(mockItem, ProjectPageFieldsComponent)); diff --git a/src/app/+item-page/simple/entity-types/shared/entity-page-fields.component.spec.ts b/src/app/+item-page/simple/entity-types/shared/entity-page-fields.component.spec.ts new file mode 100644 index 0000000000..a0d880ca15 --- /dev/null +++ b/src/app/+item-page/simple/entity-types/shared/entity-page-fields.component.spec.ts @@ -0,0 +1,81 @@ +import { Item } from '../../../../core/shared/item.model'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; +import { GenericItemPageFieldComponent } from '../../field-components/specific-field/generic/generic-item-page-field.component'; +import { TruncatableService } from '../../../../shared/truncatable/truncatable.service'; +import { ItemDataService } from '../../../../core/data/item-data.service'; +import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; +import { MockTranslateLoader } from '../../../../shared/mocks/mock-translate-loader'; +import { ChangeDetectionStrategy, DebugElement, NO_ERRORS_SCHEMA } from '@angular/core'; +import { ITEM } from '../../../../shared/entities/switcher/entity-type-switcher.component'; +import { TruncatePipe } from '../../../../shared/utils/truncate.pipe'; +import { isNotEmpty } from '../../../../shared/empty.util'; +import { SearchFixedFilterService } from '../../../../+search-page/search-filters/search-filter/search-fixed-filter.service'; + +/** + * Create a generic test for an entity-page-fields component using a mockItem and the type of component + * @param {Item} mockItem The item to use for testing. The item needs to contain just the metadata necessary to + * execute the tests for it's component. + * @param component The type of component to create test cases for. + * @returns {() => void} Returns a specDefinition for the test. + */ +export function getEntityPageFieldsTest(mockItem: Item, component) { + return () => { + let comp: any; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useClass: MockTranslateLoader + } + })], + declarations: [component, GenericItemPageFieldComponent, TruncatePipe], + providers: [ + {provide: ITEM, useValue: mockItem}, + {provide: ItemDataService, useValue: {}}, + {provide: SearchFixedFilterService, useValue: {}}, + {provide: TruncatableService, useValue: {}} + ], + + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(component, { + set: {changeDetection: ChangeDetectionStrategy.Default} + }).compileComponents(); + })); + + beforeEach(async(() => { + fixture = TestBed.createComponent(component); + 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('ds-generic-item-page-field')); + expect(containsFieldInput(fields, metadata.key)).toBeTruthy(); + }); + } + } +} + +/** + * Checks whether in a list of debug elements, at least one of them contains a specific metadata key in their + * fields property. + * @param {DebugElement[]} fields List of debug elements to check + * @param {string} metadataKey A metadata key to look for + * @returns {boolean} + */ +export 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; +}