56434: Entity-page-fields component tests

This commit is contained in:
Kristof De Langhe
2018-10-22 16:50:48 +02:00
parent 26b075882d
commit eab6698f9f
15 changed files with 580 additions and 78 deletions

View File

@@ -6,11 +6,11 @@
<ds-metadata-field-wrapper>
<ds-thumbnail [thumbnail]="this.item.getThumbnail() | async"></ds-thumbnail>
</ds-metadata-field-wrapper>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['journalissue.identifier.number']"
[label]="'journalissue.page.number'">
</ds-generic-item-page-field>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['journalissue.issuedate']"
[label]="'journalissue.page.issuedate'">
</ds-generic-item-page-field>
@@ -24,11 +24,11 @@
[entities]="publications$ | async"
[label]="'relationships.isPublicationOfJournalIssue' | translate">
</ds-related-entities>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['journalissue.identifier.description']"
[label]="'journalissue.page.description'">
</ds-generic-item-page-field>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['journalissue.identifier.keyword']"
[label]="'journalissue.page.keyword'">
</ds-generic-item-page-field>

View File

@@ -0,0 +1,93 @@
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<JournalIssuePageFieldsComponent>;
const mockItem: Item = Object.assign(new Item(), {
bitstreams: Observable.of(new RemoteData(false, false, true, null, new PaginatedList(new PageInfo(), []))),
metadata: [
{
key: 'journalissue.identifier.number',
language: 'en_US',
value: '1234'
},
{
key: 'journalissue.issuedate',
language: 'en_US',
value: '2018'
},
{
key: 'journalissue.identifier.description',
language: 'en_US',
value: 'desc'
},
{
key: 'journalissue.identifier.keyword',
language: 'en_US',
value: 'keyword'
}]
});
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;
}

View File

@@ -9,6 +9,7 @@ import {
EntityPageFieldsComponent, filterRelationsByTypeLabel,
relationsToItems
} from '../shared/entity-page-fields.component';
import { isNotEmpty } from '../../../../shared/empty.util';
@rendersEntityType('JournalIssue', ElementViewMode.Full)
@Component({
@@ -29,13 +30,15 @@ export class JournalIssuePageFieldsComponent extends EntityPageFieldsComponent {
ngOnInit(): void {
super.ngOnInit();
this.volumes$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isJournalVolumeOfIssue'),
relationsToItems(this.item.id, this.ids)
);
this.publications$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isPublicationOfJournalIssue'),
relationsToItems(this.item.id, this.ids)
);
if (isNotEmpty(this.resolvedRelsAndTypes$)) {
this.volumes$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isJournalVolumeOfIssue'),
relationsToItems(this.item.id, this.ids)
);
this.publications$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isPublicationOfJournalIssue'),
relationsToItems(this.item.id, this.ids)
);
}
}
}

View File

@@ -6,11 +6,11 @@
<ds-metadata-field-wrapper>
<ds-thumbnail [thumbnail]="this.item.getThumbnail() | async"></ds-thumbnail>
</ds-metadata-field-wrapper>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['journalvolume.identifier.volume']"
[label]="'journalvolume.page.volume'">
</ds-generic-item-page-field>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['journalvolume.issuedate']"
[label]="'journalvolume.page.issuedate'">
</ds-generic-item-page-field>
@@ -24,7 +24,7 @@
[entities]="issues$ | async"
[label]="'relationships.isIssueOf' | translate">
</ds-related-entities>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['journalvolume.identifier.description']"
[label]="'journalvolume.page.description'">
</ds-generic-item-page-field>

View File

@@ -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 { JournalVolumePageFieldsComponent } from './journal-volume-page-fields.component';
let comp: JournalVolumePageFieldsComponent;
let fixture: ComponentFixture<JournalVolumePageFieldsComponent>;
const mockItem: Item = Object.assign(new Item(), {
bitstreams: Observable.of(new RemoteData(false, false, true, null, new PaginatedList(new PageInfo(), []))),
metadata: [
{
key: 'journalvolume.identifier.volume',
language: 'en_US',
value: '1234'
},
{
key: 'journalvolume.issuedate',
language: 'en_US',
value: '2018'
},
{
key: 'journalvolume.identifier.description',
language: 'en_US',
value: 'desc'
}]
});
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;
}

View File

@@ -9,6 +9,7 @@ import {
EntityPageFieldsComponent, filterRelationsByTypeLabel,
relationsToItems
} from '../shared/entity-page-fields.component';
import { isNotEmpty } from '../../../../shared/empty.util';
@rendersEntityType('JournalVolume', ElementViewMode.Full)
@Component({
@@ -29,13 +30,15 @@ export class JournalVolumePageFieldsComponent extends EntityPageFieldsComponent
ngOnInit(): void {
super.ngOnInit();
this.journals$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isJournalOfVolume'),
relationsToItems(this.item.id, this.ids)
);
this.issues$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isIssueOfJournalVolume'),
relationsToItems(this.item.id, this.ids)
);
if (isNotEmpty(this.resolvedRelsAndTypes$)) {
this.journals$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isJournalOfVolume'),
relationsToItems(this.item.id, this.ids)
);
this.issues$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isIssueOfJournalVolume'),
relationsToItems(this.item.id, this.ids)
);
}
}
}

View File

@@ -6,19 +6,19 @@
<ds-metadata-field-wrapper>
<ds-thumbnail [thumbnail]="this.item.getThumbnail() | async" [defaultImage]="'assets/images/orgunit-placeholder.jpg'"></ds-thumbnail>
</ds-metadata-field-wrapper>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['orgunit.identifier.dateestablished']"
[label]="'orgunit.page.dateestablished'">
</ds-generic-item-page-field>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['orgunit.identifier.city']"
[label]="'orgunit.page.city'">
</ds-generic-item-page-field>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['orgunit.identifier.country']"
[label]="'orgunit.page.country'">
</ds-generic-item-page-field>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['orgunit.identifier.id']"
[label]="'orgunit.page.id'">
</ds-generic-item-page-field>
@@ -36,7 +36,7 @@
[entities]="publications$ | async"
[label]="'relationships.isPublicationOf' | translate">
</ds-related-entities>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['orgunit.identifier.description']"
[label]="'orgunit.page.description'">
</ds-generic-item-page-field>

View File

@@ -0,0 +1,98 @@
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<OrgUnitPageFieldsComponent>;
const mockItem: Item = Object.assign(new Item(), {
bitstreams: Observable.of(new RemoteData(false, false, true, null, new PaginatedList(new PageInfo(), []))),
metadata: [
{
key: 'orgunit.identifier.dateestablished',
language: 'en_US',
value: '2018'
},
{
key: 'orgunit.identifier.city',
language: 'en_US',
value: 'New York'
},
{
key: 'orgunit.identifier.country',
language: 'en_US',
value: 'USA'
},
{
key: 'orgunit.identifier.id',
language: 'en_US',
value: '1'
},
{
key: 'orgunit.identifier.description',
language: 'en_US',
value: 'desc'
}]
});
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;
}

View File

@@ -9,6 +9,7 @@ import {
EntityPageFieldsComponent, filterRelationsByTypeLabel,
relationsToItems
} from '../shared/entity-page-fields.component';
import { isNotEmpty } from '../../../../shared/empty.util';
@rendersEntityType('OrgUnit', ElementViewMode.Full)
@Component({
@@ -32,18 +33,20 @@ export class OrgUnitPageFieldsComponent extends EntityPageFieldsComponent implem
ngOnInit(): void {
super.ngOnInit();
this.people$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isPersonOfOrgUnit'),
relationsToItems(this.item.id, this.ids)
);
if (isNotEmpty(this.resolvedRelsAndTypes$)) {
this.people$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isPersonOfOrgUnit'),
relationsToItems(this.item.id, this.ids)
);
this.projects$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isProjectOfOrgUnit'),
relationsToItems(this.item.id, this.ids)
);
this.projects$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isProjectOfOrgUnit'),
relationsToItems(this.item.id, this.ids)
);
this.publications$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isPublicationOfOrgUnit'),
relationsToItems(this.item.id, this.ids)
);
this.publications$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isPublicationOfOrgUnit'),
relationsToItems(this.item.id, this.ids)
);
}
}}

View File

@@ -6,19 +6,19 @@
<ds-metadata-field-wrapper>
<ds-thumbnail [thumbnail]="this.item.getThumbnail() | async" [defaultImage]="'assets/images/person-placeholder.png'"></ds-thumbnail>
</ds-metadata-field-wrapper>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['person.identifier.email']"
[label]="'person.page.email'">
</ds-generic-item-page-field>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['person.identifier.orcid']"
[label]="'person.page.orcid'">
</ds-generic-item-page-field>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['person.identifier.birthdate']"
[label]="'person.page.birthdate'">
</ds-generic-item-page-field>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['person.identifier.staffid']"
[label]="'person.page.staffid'">
</ds-generic-item-page-field>
@@ -32,15 +32,15 @@
[entities]="orgUnits$ | async"
[label]="'relationships.isOrgUnitOf' | translate">
</ds-related-entities>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['person.identifier.jobtitle']"
[label]="'person.page.jobtitle'">
</ds-generic-item-page-field>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['person.identifier.lastname']"
[label]="'person.page.lastname'">
</ds-generic-item-page-field>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['person.identifier.firstname']"
[label]="'person.page.firstname'">
</ds-generic-item-page-field>

View File

@@ -0,0 +1,110 @@
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<PersonPageFieldsComponent>;
const mockItem: Item = Object.assign(new Item(), {
bitstreams: Observable.of(new RemoteData(false, false, true, null, new PaginatedList(new PageInfo(), []))),
metadata: [
{
key: 'person.identifier.email',
language: 'en_US',
value: 'fake@email.com'
},
{
key: 'person.identifier.orcid',
language: 'en_US',
value: 'ORCID-1'
},
{
key: 'person.identifier.birthdate',
language: 'en_US',
value: '1993'
},
{
key: 'person.identifier.staffid',
language: 'en_US',
value: '1'
},
{
key: 'person.identifier.jobtitle',
language: 'en_US',
value: 'Developer'
},
{
key: 'person.identifier.lastname',
language: 'en_US',
value: 'Doe'
},
{
key: 'person.identifier.firstname',
language: 'en_US',
value: 'John'
}]
});
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;
}

View File

@@ -10,6 +10,7 @@ import {
relationsToItems
} from '../shared/entity-page-fields.component';
import { SearchFixedFilterService } from '../../../../+search-page/search-filters/search-filter/search-fixed-filter.service';
import { isNotEmpty } from '../../../../shared/empty.util';
@rendersEntityType('Person', ElementViewMode.Full)
@Component({
@@ -34,22 +35,24 @@ export class PersonPageFieldsComponent extends EntityPageFieldsComponent {
ngOnInit(): void {
super.ngOnInit();
this.publications$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isPublicationOfAuthor'),
relationsToItems(this.item.id, this.ids)
);
if (isNotEmpty(this.resolvedRelsAndTypes$)) {
this.publications$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isPublicationOfAuthor'),
relationsToItems(this.item.id, this.ids)
);
this.projects$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isProjectOfPerson'),
relationsToItems(this.item.id, this.ids)
);
this.projects$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isProjectOfPerson'),
relationsToItems(this.item.id, this.ids)
);
this.orgUnits$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isOrgUnitOfPerson'),
relationsToItems(this.item.id, this.ids)
);
this.orgUnits$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isOrgUnitOfPerson'),
relationsToItems(this.item.id, this.ids)
);
this.fixedFilterQuery = this.fixedFilterService.getQueryByRelations('isAuthorOfPublication', this.item.id);
this.fixedFilter$ = Observable.of('publication');
this.fixedFilterQuery = this.fixedFilterService.getQueryByRelations('isAuthorOfPublication', this.item.id);
this.fixedFilter$ = Observable.of('publication');
}
}
}

View File

@@ -6,15 +6,15 @@
<ds-metadata-field-wrapper>
<ds-thumbnail [thumbnail]="this.item.getThumbnail() | async" [defaultImage]="'assets/images/project-placeholder.png'"></ds-thumbnail>
</ds-metadata-field-wrapper>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['project.identifier.status']"
[label]="'project.page.status'">
</ds-generic-item-page-field>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['project.identifier.id']"
[label]="'project.page.id'">
</ds-generic-item-page-field>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['project.identifier.expectedcompletion']"
[label]="'project.page.expectedcompletion'">
</ds-generic-item-page-field>
@@ -32,11 +32,11 @@
[entities]="orgUnits$ | async"
[label]="'relationships.isOrgUnitOf' | translate">
</ds-related-entities>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['project.identifier.description']"
[label]="'project.page.description'">
</ds-generic-item-page-field>
<ds-generic-item-page-field [item]="item"
<ds-generic-item-page-field class="item-page-fields" [item]="item"
[fields]="['project.identifier.keyword']"
[label]="'project.page.keyword'">
</ds-generic-item-page-field>

View File

@@ -0,0 +1,98 @@
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<ProjectPageFieldsComponent>;
const mockItem: Item = Object.assign(new Item(), {
bitstreams: Observable.of(new RemoteData(false, false, true, null, new PaginatedList(new PageInfo(), []))),
metadata: [
{
key: 'project.identifier.status',
language: 'en_US',
value: 'published'
},
{
key: 'project.identifier.id',
language: 'en_US',
value: '1'
},
{
key: 'project.identifier.expectedcompletion',
language: 'en_US',
value: 'exp comp'
},
{
key: 'project.identifier.description',
language: 'en_US',
value: 'keyword'
},
{
key: 'project.identifier.keyword',
language: 'en_US',
value: 'keyword'
}]
});
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;
}

View File

@@ -9,6 +9,7 @@ import {
EntityPageFieldsComponent, filterRelationsByTypeLabel,
relationsToItems
} from '../shared/entity-page-fields.component';
import { isNotEmpty } from '../../../../shared/empty.util';
@rendersEntityType('Project', ElementViewMode.Full)
@Component({
@@ -31,19 +32,21 @@ export class ProjectPageFieldsComponent extends EntityPageFieldsComponent implem
ngOnInit(): void {
super.ngOnInit();
this.people$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isPersonOfProject'),
relationsToItems(this.item.id, this.ids)
);
if (isNotEmpty(this.resolvedRelsAndTypes$)) {
this.people$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isPersonOfProject'),
relationsToItems(this.item.id, this.ids)
);
this.publications$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isPublicationOfProject'),
relationsToItems(this.item.id, this.ids)
);
this.publications$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isPublicationOfProject'),
relationsToItems(this.item.id, this.ids)
);
this.orgUnits$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isOrgUnitOfProject'),
relationsToItems(this.item.id, this.ids)
);
this.orgUnits$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isOrgUnitOfProject'),
relationsToItems(this.item.id, this.ids)
);
}
}
}