mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 10:04:11 +00:00
add support for multiple metadata fields to the MetadataRepresentationListComponent - fix bug when unauthorized for related item
This commit is contained in:
@@ -5,7 +5,7 @@ import { MetadataRepresentationListComponent } from './metadata-representation-l
|
||||
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/remote-data.utils';
|
||||
import { createSuccessfulRemoteDataObject$, createFailedRemoteDataObject$ } from '../../../shared/remote-data.utils';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { VarDirective } from '../../../shared/utils/var.directive';
|
||||
import { of as observableOf } from 'rxjs';
|
||||
@@ -35,6 +35,12 @@ const parentItem: Item = Object.assign(new Item(), {
|
||||
authority: 'virtual::related-creator',
|
||||
place: 3,
|
||||
},
|
||||
{
|
||||
language: null,
|
||||
value: 'Related Creator with authority - unauthorized',
|
||||
authority: 'virtual::related-creator-unauthorized',
|
||||
place: 4,
|
||||
},
|
||||
],
|
||||
'dc.title': [
|
||||
{
|
||||
@@ -55,21 +61,49 @@ const relatedAuthor: Item = Object.assign(new Item(), {
|
||||
]
|
||||
}
|
||||
});
|
||||
const relation: Relationship = Object.assign(new Relationship(), {
|
||||
const relatedCreator: Item = Object.assign(new Item(), {
|
||||
id: 'related-creator',
|
||||
metadata: {
|
||||
'dc.title': [
|
||||
{
|
||||
language: null,
|
||||
value: 'Related Creator'
|
||||
}
|
||||
],
|
||||
'dspace.entity.type': 'Person',
|
||||
}
|
||||
});
|
||||
const authorRelation: Relationship = Object.assign(new Relationship(), {
|
||||
leftItem: createSuccessfulRemoteDataObject$(parentItem),
|
||||
rightItem: createSuccessfulRemoteDataObject$(relatedAuthor)
|
||||
});
|
||||
let relationshipService: RelationshipService;
|
||||
const creatorRelation: Relationship = Object.assign(new Relationship(), {
|
||||
leftItem: createSuccessfulRemoteDataObject$(parentItem),
|
||||
rightItem: createSuccessfulRemoteDataObject$(relatedCreator),
|
||||
});
|
||||
const creatorRelationUnauthorized: Relationship = Object.assign(new Relationship(), {
|
||||
leftItem: createSuccessfulRemoteDataObject$(parentItem),
|
||||
rightItem: createFailedRemoteDataObject$('Unauthorized', 401),
|
||||
});
|
||||
let relationshipService;
|
||||
|
||||
describe('MetadataRepresentationListComponent', () => {
|
||||
let comp: MetadataRepresentationListComponent;
|
||||
let fixture: ComponentFixture<MetadataRepresentationListComponent>;
|
||||
|
||||
relationshipService = jasmine.createSpyObj('relationshipService',
|
||||
{
|
||||
findById: createSuccessfulRemoteDataObject$(relation)
|
||||
relationshipService = {
|
||||
findById: (id: string) => {
|
||||
if (id === 'related-author') {
|
||||
return createSuccessfulRemoteDataObject$(authorRelation);
|
||||
}
|
||||
);
|
||||
if (id === 'related-creator') {
|
||||
return createSuccessfulRemoteDataObject$(creatorRelation);
|
||||
}
|
||||
if (id === 'related-creator-unauthorized') {
|
||||
return createSuccessfulRemoteDataObject$(creatorRelationUnauthorized);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
beforeEach(waitForAsync(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -93,9 +127,9 @@ describe('MetadataRepresentationListComponent', () => {
|
||||
fixture.detectChanges();
|
||||
}));
|
||||
|
||||
it('should load 3 ds-metadata-representation-loader components', () => {
|
||||
it('should load 4 ds-metadata-representation-loader components', () => {
|
||||
const fields = fixture.debugElement.queryAll(By.css('ds-metadata-representation-loader'));
|
||||
expect(fields.length).toBe(3);
|
||||
expect(fields.length).toBe(4);
|
||||
});
|
||||
|
||||
it('should contain one page of items', () => {
|
||||
|
@@ -91,9 +91,11 @@ export class MetadataRepresentationListComponent extends AbstractIncrementalList
|
||||
getFirstSucceededRemoteData(),
|
||||
switchMap((relRD: RemoteData<Relationship>) =>
|
||||
observableCombineLatest(relRD.payload.leftItem, relRD.payload.rightItem).pipe(
|
||||
filter(([leftItem, rightItem]) => leftItem.hasSucceeded && rightItem.hasSucceeded),
|
||||
filter(([leftItem, rightItem]) => leftItem.hasCompleted && rightItem.hasCompleted),
|
||||
map(([leftItem, rightItem]) => {
|
||||
if (leftItem.payload.id === this.parentItem.id) {
|
||||
if (!leftItem.hasSucceeded || !rightItem.hasSucceeded) {
|
||||
return observableOf(Object.assign(new MetadatumRepresentation(this.itemType), metadatum));
|
||||
} else if (rightItem.hasSucceeded && leftItem.payload.id === this.parentItem.id) {
|
||||
return rightItem.payload;
|
||||
} else if (rightItem.payload.id === this.parentItem.id) {
|
||||
return leftItem.payload;
|
||||
|
Reference in New Issue
Block a user