mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 01:54:15 +00:00
216 lines
6.0 KiB
TypeScript
216 lines
6.0 KiB
TypeScript
import { NO_ERRORS_SCHEMA } from '@angular/core';
|
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
|
import { TranslateModule } from '@ngx-translate/core';
|
|
import { of as observableOf } from 'rxjs/internal/observable/of';
|
|
import { FieldChangeType } from '../../../../core/data/object-updates/object-updates.actions';
|
|
import { ObjectUpdatesService } from '../../../../core/data/object-updates/object-updates.service';
|
|
import { RelationshipType } from '../../../../core/shared/item-relationships/relationship-type.model';
|
|
import { Relationship } from '../../../../core/shared/item-relationships/relationship.model';
|
|
import { Item } from '../../../../core/shared/item.model';
|
|
import { EditRelationshipComponent } from './edit-relationship.component';
|
|
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
|
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/remote-data.utils';
|
|
import { createPaginatedList } from '../../../../shared/testing/utils.test';
|
|
|
|
let objectUpdatesService;
|
|
const url = 'http://test-url.com/test-url';
|
|
|
|
let item;
|
|
let relatedItem;
|
|
let author1;
|
|
let author2;
|
|
let fieldUpdate1;
|
|
let fieldUpdate2;
|
|
let relationships;
|
|
let relationshipType;
|
|
|
|
let fixture: ComponentFixture<EditRelationshipComponent>;
|
|
let comp: EditRelationshipComponent;
|
|
let de;
|
|
let el;
|
|
|
|
describe('EditRelationshipComponent', () => {
|
|
|
|
beforeEach(async(() => {
|
|
|
|
relationshipType = Object.assign(new RelationshipType(), {
|
|
id: '1',
|
|
uuid: '1',
|
|
leftwardType: 'isAuthorOfPublication',
|
|
rightwardType: 'isPublicationOfAuthor'
|
|
});
|
|
|
|
item = Object.assign(new Item(), {
|
|
_links: {
|
|
self: {
|
|
href: 'fake-item-url/publication'
|
|
}
|
|
},
|
|
id: 'publication',
|
|
uuid: 'publication',
|
|
relationships: createSuccessfulRemoteDataObject$(createPaginatedList(relationships))
|
|
});
|
|
|
|
relatedItem = Object.assign(new Item(), {
|
|
uuid: 'related item id',
|
|
});
|
|
|
|
relationships = [
|
|
Object.assign(new Relationship(), {
|
|
_links: {
|
|
self: { href: url + '/2' }
|
|
},
|
|
id: '2',
|
|
uuid: '2',
|
|
leftId: 'author1',
|
|
rightId: 'publication',
|
|
relationshipType: createSuccessfulRemoteDataObject$(relationshipType),
|
|
leftItem: createSuccessfulRemoteDataObject$(relatedItem),
|
|
rightItem: createSuccessfulRemoteDataObject$(item),
|
|
}),
|
|
Object.assign(new Relationship(), {
|
|
_links: {
|
|
self: { href: url + '/3' }
|
|
},
|
|
id: '3',
|
|
uuid: '3',
|
|
leftId: 'author2',
|
|
rightId: 'publication',
|
|
relationshipType: createSuccessfulRemoteDataObject$(relationshipType)
|
|
})
|
|
];
|
|
|
|
author1 = Object.assign(new Item(), {
|
|
id: 'author1',
|
|
uuid: 'author1'
|
|
});
|
|
author2 = Object.assign(new Item(), {
|
|
id: 'author2',
|
|
uuid: 'author2'
|
|
});
|
|
|
|
fieldUpdate1 = {
|
|
field: {
|
|
uuid: relationships[0].uuid,
|
|
relationship: relationships[0],
|
|
},
|
|
changeType: undefined
|
|
};
|
|
fieldUpdate2 = {
|
|
field: {
|
|
uuid: relationships[1].uuid,
|
|
relationship: relationships[1],
|
|
},
|
|
changeType: FieldChangeType.REMOVE
|
|
};
|
|
|
|
const itemSelection = {};
|
|
itemSelection[relatedItem.uuid] = false;
|
|
itemSelection[item.uuid] = true;
|
|
|
|
objectUpdatesService = {
|
|
isSelectedVirtualMetadata: () => null,
|
|
removeSingleFieldUpdate: jasmine.createSpy('removeSingleFieldUpdate'),
|
|
saveRemoveFieldUpdate: jasmine.createSpy('saveRemoveFieldUpdate'),
|
|
};
|
|
|
|
spyOn(objectUpdatesService, 'isSelectedVirtualMetadata').and.callFake((a, b, uuid) => observableOf(itemSelection[uuid]));
|
|
|
|
TestBed.configureTestingModule({
|
|
imports: [TranslateModule.forRoot()],
|
|
declarations: [EditRelationshipComponent],
|
|
providers: [
|
|
{ provide: ObjectUpdatesService, useValue: objectUpdatesService },
|
|
{ provide: NgbModal, useValue: {
|
|
open: () => {/*comment*/
|
|
}
|
|
},
|
|
},
|
|
], schemas: [
|
|
NO_ERRORS_SCHEMA
|
|
]
|
|
}).compileComponents();
|
|
}));
|
|
|
|
beforeEach(() => {
|
|
|
|
fixture = TestBed.createComponent(EditRelationshipComponent);
|
|
comp = fixture.componentInstance;
|
|
de = fixture.debugElement;
|
|
el = de.nativeElement;
|
|
|
|
comp.url = url;
|
|
comp.fieldUpdate = fieldUpdate1;
|
|
comp.editItem = item;
|
|
comp.relatedItem$ = observableOf(relatedItem);
|
|
|
|
fixture.detectChanges();
|
|
});
|
|
|
|
describe('when fieldUpdate has no changeType', () => {
|
|
beforeEach(() => {
|
|
comp.fieldUpdate = fieldUpdate1;
|
|
fixture.detectChanges();
|
|
});
|
|
|
|
describe('canRemove', () => {
|
|
it('should return true', () => {
|
|
expect(comp.canRemove()).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe('canUndo', () => {
|
|
it('should return false', () => {
|
|
expect(comp.canUndo()).toBe(false);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('when fieldUpdate has DELETE as changeType', () => {
|
|
beforeEach(() => {
|
|
comp.fieldUpdate = fieldUpdate2;
|
|
fixture.detectChanges();
|
|
});
|
|
|
|
describe('canRemove', () => {
|
|
it('should return false', () => {
|
|
expect(comp.canRemove()).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe('canUndo', () => {
|
|
it('should return true', () => {
|
|
expect(comp.canUndo()).toBe(true);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('remove', () => {
|
|
|
|
beforeEach(() => {
|
|
spyOn(comp, 'closeVirtualMetadataModal');
|
|
comp.ngOnChanges();
|
|
comp.remove();
|
|
});
|
|
|
|
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', () => {
|
|
|
|
it('should call removeSingleFieldUpdate with the correct arguments', () => {
|
|
comp.undo();
|
|
expect(objectUpdatesService.removeSingleFieldUpdate).toHaveBeenCalledWith(url, relationships[0].uuid);
|
|
});
|
|
});
|
|
});
|