diff --git a/src/app/+item-page/edit-item-page/item-relationships/edit-relationship-list/edit-relationship-list.component.spec.ts b/src/app/+item-page/edit-item-page/item-relationships/edit-relationship-list/edit-relationship-list.component.spec.ts index 54cb2837a2d32dc544ee5d7baf20fbbc500ac3a4..bc2fcda3a9818e1c6cbb46d329d266a4a2edf173 100644 --- a/src/app/+item-page/edit-item-page/item-relationships/edit-relationship-list/edit-relationship-list.component.spec.ts +++ b/src/app/+item-page/edit-item-page/item-relationships/edit-relationship-list/edit-relationship-list.component.spec.ts @@ -98,6 +98,7 @@ describe('EditRelationshipListComponent', () => { relationshipService = jasmine.createSpyObj('relationshipService', { getRelatedItemsByLabel: observableOf(new RemoteData(false, false, true, null, new PaginatedList(new PageInfo(), [author1, author2]))), + getItemRelationshipsByLabel: observableOf(new RemoteData(false, false, true, null, new PaginatedList(new PageInfo(), relationships))), } ); diff --git a/src/app/+item-page/edit-item-page/item-relationships/edit-relationship/edit-relationship.component.spec.ts b/src/app/+item-page/edit-item-page/item-relationships/edit-relationship/edit-relationship.component.spec.ts index 00c2a330061bc1ae5f6f743b86a672f3d12e2b7a..5f12ea32e7983f1324172d714f3e83b99d3065bb 100644 --- a/src/app/+item-page/edit-item-page/item-relationships/edit-relationship/edit-relationship.component.spec.ts +++ b/src/app/+item-page/edit-item-page/item-relationships/edit-relationship/edit-relationship.component.spec.ts @@ -11,11 +11,15 @@ import { Item } from '../../../../core/shared/item.model'; import { PaginatedList } from '../../../../core/data/paginated-list'; import { PageInfo } from '../../../../core/shared/page-info.model'; import { FieldChangeType } from '../../../../core/data/object-updates/object-updates.actions'; +import {NgbModal} from "@ng-bootstrap/ng-bootstrap"; +import {Store} from "@ngrx/store"; +import {CoreState} from "../../../../core/core.reducers"; -let objectUpdatesService: ObjectUpdatesService; +let objectUpdatesService; const url = 'http://test-url.com/test-url'; let item; +let relatedItem; let author1; let author2; let fieldUpdate1; @@ -37,6 +41,17 @@ describe('EditRelationshipComponent', () => { rightwardType: 'isPublicationOfAuthor' }); + item = Object.assign(new Item(), { + self: 'fake-item-url/publication', + id: 'publication', + uuid: 'publication', + relationships: observableOf(new RemoteData(false, false, true, undefined, new PaginatedList(new PageInfo(), relationships))) + }); + + relatedItem = Object.assign(new Item(), { + uuid: 'related item id', + }); + relationships = [ Object.assign(new Relationship(), { self: url + '/2', @@ -44,7 +59,9 @@ describe('EditRelationshipComponent', () => { uuid: '2', leftId: 'author1', rightId: 'publication', - relationshipType: observableOf(new RemoteData(false, false, true, undefined, relationshipType)) + relationshipType: observableOf(new RemoteData(false, false, true, undefined, relationshipType)), + leftItem: observableOf(new RemoteData(false, false, true, undefined, relatedItem)), + rightItem: observableOf(new RemoteData(false, false, true, undefined, item)), }), Object.assign(new Relationship(), { self: url + '/3', @@ -56,13 +73,6 @@ describe('EditRelationshipComponent', () => { }) ]; - item = Object.assign(new Item(), { - self: 'fake-item-url/publication', - id: 'publication', - uuid: 'publication', - relationships: observableOf(new RemoteData(false, false, true, undefined, new PaginatedList(new PageInfo(), relationships))) - }); - author1 = Object.assign(new Item(), { id: 'author1', uuid: 'author1' @@ -73,32 +83,35 @@ describe('EditRelationshipComponent', () => { }); fieldUpdate1 = { - field: author1, + field: relationships[0], changeType: undefined }; fieldUpdate2 = { - field: author2, + field: relationships[1], changeType: FieldChangeType.REMOVE }; - objectUpdatesService = jasmine.createSpyObj('objectUpdatesService', - { - saveChangeFieldUpdate: {}, - saveRemoveFieldUpdate: {}, - setEditableFieldUpdate: {}, - setValidFieldUpdate: {}, - removeSingleFieldUpdate: {}, - isEditable: observableOf(false), // should always return something --> its in ngOnInit - isValid: observableOf(true) // should always return something --> its in ngOnInit - } - ); + const itemSelection = {}; + itemSelection[relatedItem.uuid] = false; + itemSelection[item.uuid] = true; + + const store = new Store<CoreState>(undefined, undefined, undefined); + + objectUpdatesService = new ObjectUpdatesService(store); + + spyOn(objectUpdatesService, 'isSelectedVirtualMetadata').and.callFake((a, b, uuid) => observableOf(itemSelection[uuid])); TestBed.configureTestingModule({ imports: [TranslateModule.forRoot()], declarations: [EditRelationshipComponent], providers: [ - { provide: ObjectUpdatesService, useValue: objectUpdatesService } - ], schemas: [ + { provide: ObjectUpdatesService, useValue: objectUpdatesService }, + { provide: NgbModal, useValue: { + open: () => {/*comment*/ + } + }, + }, + ], schemas: [ NO_ERRORS_SCHEMA ] }).compileComponents(); @@ -113,6 +126,7 @@ describe('EditRelationshipComponent', () => { comp.url = url; comp.fieldUpdate = fieldUpdate1; comp.editItem = item; + comp.relatedItem$ = observableOf(relatedItem); fixture.detectChanges(); }); @@ -157,21 +171,34 @@ describe('EditRelationshipComponent', () => { describe('remove', () => { beforeEach(() => { + spyOn(comp, 'closeVirtualMetadataModal'); + spyOn(objectUpdatesService, 'saveRemoveFieldUpdate'); + comp.ngOnChanges(); comp.remove(); }); - it('should call saveRemoveFieldUpdate with the correct arguments', () => { - expect(objectUpdatesService.saveRemoveFieldUpdate).toHaveBeenCalledWith(url, item); + it('should close the virtual metadata modal and call saveRemoveFieldUpdate with the correct arguments', () => { + expect(comp.closeVirtualMetadataModal).toHaveBeenCalled(); + expect(objectUpdatesService.saveRemoveFieldUpdate).toHaveBeenCalledWith(url, Object.assign({}, fieldUpdate1.field, { + keepLeftVirtualMetadata: false, + keepRightVirtualMetadata: true, + })); }); + }); describe('undo', () => { beforeEach(() => { + spyOn(objectUpdatesService, 'removeSingleFieldUpdate'); comp.undo(); + comp.ngOnChanges(); }); it('should call removeSingleFieldUpdate with the correct arguments', () => { - expect(objectUpdatesService.removeSingleFieldUpdate).toHaveBeenCalledWith(url, item.uuid); + + fixture.whenStable().then(() => { + expect(objectUpdatesService.removeSingleFieldUpdate).toHaveBeenCalledWith(url, fieldUpdate1[0]); + }) }); }); diff --git a/src/app/core/data/relationship.service.spec.ts b/src/app/core/data/relationship.service.spec.ts index 7d51f167d367bceafbc47d5624a5af41b7251d59..34c60983c2ace5fbcf9be900ca732d443536173e 100644 --- a/src/app/core/data/relationship.service.spec.ts +++ b/src/app/core/data/relationship.service.spec.ts @@ -109,11 +109,11 @@ describe('RelationshipService', () => { beforeEach(() => { spyOn(service, 'findById').and.returnValue(getRemotedataObservable(relationship1)); spyOn(objectCache, 'remove'); - service.deleteRelationship(relationships[0].uuid, 'none').subscribe(); + service.deleteRelationship(relationships[0].uuid, 'right').subscribe(); }); it('should send a DeleteRequest', () => { - const expected = new DeleteRequest(requestService.generateRequestId(), relationshipsEndpointURL + '/' + relationship1.uuid); + const expected = new DeleteRequest(requestService.generateRequestId(), relationshipsEndpointURL + '/' + relationship1.uuid + '?copyVirtualMetadata=right'); expect(requestService.configure).toHaveBeenCalledWith(expected); });