Skip to content

Commit 5fd3e79

Browse files
Simone-Ramundivins01-4science
authored andcommitted
Merged in DSC-1594 (pull request DSpace#1507)
DSC-1594 Approved-by: Vincenzo Mecca
2 parents bcc5ff5 + 1730104 commit 5fd3e79

3 files changed

Lines changed: 361 additions & 4 deletions

File tree

src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts

Lines changed: 292 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ import { Item } from '../../core/shared/item.model';
2525
import { MetadataValueFilter } from '../../core/shared/metadata.models';
2626
import { DSONameService } from '../../core/breadcrumbs/dso-name.service';
2727
import { PrimaryBitstreamService } from '../../core/data/primary-bitstream.service';
28+
import { VocabularyService } from '../../core/submission/vocabularies/vocabulary.service';
29+
import { VocabularyEntry } from '../../core/submission/vocabularies/models/vocabulary-entry.model';
30+
import { buildPaginatedList } from '../../core/data/paginated-list.model';
31+
import { PageInfo } from '../../core/shared/page-info.model';
32+
import { RequestService } from '../../core/data/request.service';
2833

2934
const infoNotification: INotification = new Notification('id', NotificationType.Info, 'info');
3035
const warningNotification: INotification = new Notification('id', NotificationType.Warning, 'warning');
@@ -49,6 +54,19 @@ let fixture: ComponentFixture<EditBitstreamPageComponent>;
4954

5055
describe('EditBitstreamPageComponent', () => {
5156

57+
const entries = [
58+
Object.assign(new VocabularyEntry(), {display: 'true', value: 'true' }),
59+
Object.assign(new VocabularyEntry(), {display: 'false', value: 'false' }),
60+
];
61+
62+
const mockVocabularyService = jasmine.createSpyObj('vocabularyService', {
63+
getVocabularyEntries: jasmine.createSpy('getVocabularyEntries'),
64+
});
65+
66+
const mockRequestService = jasmine.createSpyObj('setStaleByHrefSubstring', {
67+
setStaleByHrefSubstring: jasmine.createSpy('setStaleByHrefSubstring'),
68+
});
69+
5270
beforeEach(() => {
5371
bitstreamID = 'current-bitstream-id';
5472
currentPrimary = bitstreamID;
@@ -140,6 +158,7 @@ describe('EditBitstreamPageComponent', () => {
140158
describe('EditBitstreamPageComponent no IIIF fields', () => {
141159

142160
beforeEach(waitForAsync(() => {
161+
mockVocabularyService.getVocabularyEntries.and.returnValue(createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), entries)));
143162
bundle = {
144163
_links: {
145164
primaryBitstream: {
@@ -213,6 +232,8 @@ describe('EditBitstreamPageComponent', () => {
213232
{ provide: DSONameService, useValue: dsoNameService },
214233
{ provide: BitstreamFormatDataService, useValue: bitstreamFormatService },
215234
{ provide: PrimaryBitstreamService, useValue: primaryBitstreamService },
235+
{ provide: VocabularyService, useValue: mockVocabularyService},
236+
{ provide: RequestService, useValue: mockRequestService },
216237
ChangeDetectorRef
217238
],
218239
schemas: [NO_ERRORS_SCHEMA]
@@ -424,6 +445,7 @@ describe('EditBitstreamPageComponent', () => {
424445
const bundleName = 'ORIGINAL';
425446

426447
beforeEach(waitForAsync(() => {
448+
mockVocabularyService.getVocabularyEntries.and.returnValue(createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), entries)));
427449

428450
bitstream = Object.assign(new Bitstream(), {
429451
metadata: {
@@ -511,6 +533,8 @@ describe('EditBitstreamPageComponent', () => {
511533
{provide: DSONameService, useValue: dsoNameService},
512534
{provide: BitstreamFormatDataService, useValue: bitstreamFormatService},
513535
{ provide: PrimaryBitstreamService, useValue: primaryBitstreamService },
536+
{ provide: VocabularyService, useValue: mockVocabularyService},
537+
{ provide: RequestService, useValue: mockRequestService },
514538
ChangeDetectorRef
515539
],
516540
schemas: [NO_ERRORS_SCHEMA]
@@ -549,11 +573,12 @@ describe('EditBitstreamPageComponent', () => {
549573
});
550574
});
551575

552-
describe('ignore OTHERCONTENT bundle', () => {
576+
describe('ignore OTHERCONTENT bundle', () => {
553577

554578
const bundleName = 'OTHERCONTENT';
555579

556580
beforeEach(waitForAsync(() => {
581+
mockVocabularyService.getVocabularyEntries.and.returnValue(createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), entries)));
557582

558583
bitstream = Object.assign(new Bitstream(), {
559584
metadata: {
@@ -640,6 +665,8 @@ describe('EditBitstreamPageComponent', () => {
640665
{provide: DSONameService, useValue: dsoNameService},
641666
{provide: BitstreamFormatDataService, useValue: bitstreamFormatService},
642667
{ provide: PrimaryBitstreamService, useValue: primaryBitstreamService },
668+
{ provide: VocabularyService, useValue: mockVocabularyService},
669+
{ provide: RequestService, useValue: mockRequestService },
643670
ChangeDetectorRef
644671
],
645672
schemas: [NO_ERRORS_SCHEMA]
@@ -670,4 +697,268 @@ describe('EditBitstreamPageComponent', () => {
670697
});
671698
});
672699

700+
describe('EditBitstreamPageComponent with metadata hide', () => {
701+
702+
beforeEach(waitForAsync(() => {
703+
bundle = {
704+
_links: {
705+
primaryBitstream: {
706+
href: 'bundle-selflink'
707+
}
708+
},
709+
item: createSuccessfulRemoteDataObject$(Object.assign(new Item(), {
710+
uuid: 'some-uuid',
711+
firstMetadataValue(keyOrKeys: string | string[], valueFilter?: MetadataValueFilter): string {
712+
return undefined;
713+
},
714+
}))
715+
};
716+
const bundleName = 'ORIGINAL';
717+
718+
bitstream = Object.assign(new Bitstream(), {
719+
uuid: bitstreamID,
720+
id: bitstreamID,
721+
metadata: {
722+
'dc.description': [
723+
{
724+
value: 'Bitstream description'
725+
}
726+
],
727+
'dc.title': [
728+
{
729+
value: 'Bitstream title'
730+
}
731+
],
732+
'dc.type': [
733+
{
734+
value: 'Logo'
735+
}
736+
],
737+
'bitstream.hide': [
738+
{
739+
value: 'false'
740+
}
741+
]
742+
},
743+
format: createSuccessfulRemoteDataObject$(selectedFormat),
744+
_links: {
745+
self: 'bitstream-selflink'
746+
},
747+
bundle: createSuccessfulRemoteDataObject$(bundle)
748+
});
749+
bitstreamService = jasmine.createSpyObj('bitstreamService', {
750+
findById: createSuccessfulRemoteDataObject$(bitstream),
751+
findByHref: createSuccessfulRemoteDataObject$(bitstream),
752+
update: createSuccessfulRemoteDataObject$(bitstream),
753+
updateFormat: createSuccessfulRemoteDataObject$(bitstream),
754+
commitUpdates: {},
755+
patch: {}
756+
});
757+
bitstreamFormatService = jasmine.createSpyObj('bitstreamFormatService', {
758+
findAll: createSuccessfulRemoteDataObject$(createPaginatedList(allFormats))
759+
});
760+
dsoNameService = jasmine.createSpyObj('dsoNameService', {
761+
getName: bundleName
762+
});
763+
764+
TestBed.configureTestingModule({
765+
imports: [TranslateModule.forRoot(), RouterTestingModule],
766+
declarations: [EditBitstreamPageComponent, FileSizePipe, VarDirective],
767+
providers: [
768+
{ provide: NotificationsService, useValue: notificationsService },
769+
{ provide: DynamicFormService, useValue: formService },
770+
{
771+
provide: ActivatedRoute,
772+
useValue: {
773+
data: observableOf({ bitstream: createSuccessfulRemoteDataObject(bitstream) }),
774+
snapshot: { queryParams: {} }
775+
}
776+
},
777+
{ provide: BitstreamDataService, useValue: bitstreamService },
778+
{ provide: DSONameService, useValue: dsoNameService },
779+
{ provide: BitstreamFormatDataService, useValue: bitstreamFormatService },
780+
{ provide: PrimaryBitstreamService, useValue: primaryBitstreamService },
781+
{ provide: VocabularyService, useValue: mockVocabularyService},
782+
{ provide: RequestService, useValue: mockRequestService },
783+
ChangeDetectorRef
784+
],
785+
schemas: [NO_ERRORS_SCHEMA]
786+
}).compileComponents();
787+
788+
}));
789+
describe('when there are vocabulary entries', () =>{
790+
beforeEach(() => {
791+
fixture = TestBed.createComponent(EditBitstreamPageComponent);
792+
comp = fixture.componentInstance;
793+
mockVocabularyService.getVocabularyEntries.and.returnValue(createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), entries)));
794+
fixture.detectChanges();
795+
router = TestBed.inject(Router);
796+
spyOn(router, 'navigate');
797+
});
798+
let rawForm;
799+
beforeEach(() => {
800+
rawForm = comp.formGroup.getRawValue();
801+
});
802+
it('should have a select with value false', ()=>{
803+
expect(rawForm.hideContainer.hide).toEqual(bitstream.firstMetadataValue('bitstream.hide'));
804+
});
805+
it('should verify that hide model has the correct model with options arriving from entries', ()=>{
806+
expect(comp.hideModel).toBeDefined();
807+
expect(comp.hideModel.id).toBe('hide');
808+
expect(comp.hideModel.name).toBe('hide');
809+
expect(comp.hideModel.options.length).toBe(2);
810+
expect(comp.hideModel.options[0].label).toBe('true');
811+
expect(comp.hideModel.options[0].value).toBe('true');
812+
expect(comp.hideModel.options[1].label).toBe('false');
813+
expect(comp.hideModel.options[1].value).toBe('false');
814+
});
815+
});
816+
describe('when there no vocabulary entries', () =>{
817+
beforeEach(() => {
818+
fixture = TestBed.createComponent(EditBitstreamPageComponent);
819+
comp = fixture.componentInstance;
820+
mockVocabularyService.getVocabularyEntries.and.returnValue(createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), [])));
821+
fixture.detectChanges();
822+
router = TestBed.inject(Router);
823+
spyOn(router, 'navigate');
824+
});
825+
let rawForm;
826+
beforeEach(() => {
827+
rawForm = comp.formGroup.getRawValue();
828+
});
829+
it('should verify that form model has the correct model with options arriving from entries', ()=>{
830+
expect(comp.hideModel).toBeUndefined();
831+
expect(rawForm.hideContainer).toBeUndefined();
832+
});
833+
});
834+
});
835+
836+
describe('EditBitstreamPageComponent without metadata hide', () => {
837+
838+
beforeEach(waitForAsync(() => {
839+
bundle = {
840+
_links: {
841+
primaryBitstream: {
842+
href: 'bundle-selflink'
843+
}
844+
},
845+
item: createSuccessfulRemoteDataObject$(Object.assign(new Item(), {
846+
uuid: 'some-uuid',
847+
firstMetadataValue(keyOrKeys: string | string[], valueFilter?: MetadataValueFilter): string {
848+
return undefined;
849+
},
850+
}))
851+
};
852+
const bundleName = 'ORIGINAL';
853+
854+
bitstream = Object.assign(new Bitstream(), {
855+
uuid: bitstreamID,
856+
id: bitstreamID,
857+
metadata: {
858+
'dc.description': [
859+
{
860+
value: 'Bitstream description'
861+
}
862+
],
863+
'dc.title': [
864+
{
865+
value: 'Bitstream title'
866+
}
867+
],
868+
'dc.type': [
869+
{
870+
value: 'Logo'
871+
}
872+
]
873+
},
874+
format: createSuccessfulRemoteDataObject$(selectedFormat),
875+
_links: {
876+
self: 'bitstream-selflink'
877+
},
878+
bundle: createSuccessfulRemoteDataObject$(bundle)
879+
});
880+
bitstreamService = jasmine.createSpyObj('bitstreamService', {
881+
findById: createSuccessfulRemoteDataObject$(bitstream),
882+
findByHref: createSuccessfulRemoteDataObject$(bitstream),
883+
update: createSuccessfulRemoteDataObject$(bitstream),
884+
updateFormat: createSuccessfulRemoteDataObject$(bitstream),
885+
commitUpdates: {},
886+
patch: {}
887+
});
888+
bitstreamFormatService = jasmine.createSpyObj('bitstreamFormatService', {
889+
findAll: createSuccessfulRemoteDataObject$(createPaginatedList(allFormats))
890+
});
891+
dsoNameService = jasmine.createSpyObj('dsoNameService', {
892+
getName: bundleName
893+
});
894+
895+
TestBed.configureTestingModule({
896+
imports: [TranslateModule.forRoot(), RouterTestingModule],
897+
declarations: [EditBitstreamPageComponent, FileSizePipe, VarDirective],
898+
providers: [
899+
{ provide: NotificationsService, useValue: notificationsService },
900+
{ provide: DynamicFormService, useValue: formService },
901+
{
902+
provide: ActivatedRoute,
903+
useValue: {
904+
data: observableOf({ bitstream: createSuccessfulRemoteDataObject(bitstream) }),
905+
snapshot: { queryParams: {} }
906+
}
907+
},
908+
{ provide: BitstreamDataService, useValue: bitstreamService },
909+
{ provide: DSONameService, useValue: dsoNameService },
910+
{ provide: BitstreamFormatDataService, useValue: bitstreamFormatService },
911+
{ provide: PrimaryBitstreamService, useValue: primaryBitstreamService },
912+
{ provide: VocabularyService, useValue: mockVocabularyService},
913+
{ provide: RequestService, useValue: mockRequestService },
914+
ChangeDetectorRef
915+
],
916+
schemas: [NO_ERRORS_SCHEMA]
917+
}).compileComponents();
918+
919+
}));
920+
describe('when there are no vocabulary entries', () =>{
921+
beforeEach(() => {
922+
fixture = TestBed.createComponent(EditBitstreamPageComponent);
923+
comp = fixture.componentInstance;
924+
mockVocabularyService.getVocabularyEntries.and.returnValue(createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), [])));
925+
fixture.detectChanges();
926+
router = TestBed.inject(Router);
927+
spyOn(router, 'navigate');
928+
});
929+
let rawForm;
930+
beforeEach(() => {
931+
rawForm = comp.formGroup.getRawValue();
932+
});
933+
it('should have a select with 0 elements', ()=>{
934+
expect(rawForm.hideContainer).toBeUndefined();
935+
expect(comp.hideModel).toBeUndefined();
936+
});
937+
});
938+
describe('when there are vocabulary entries', () =>{
939+
beforeEach(() => {
940+
fixture = TestBed.createComponent(EditBitstreamPageComponent);
941+
comp = fixture.componentInstance;
942+
mockVocabularyService.getVocabularyEntries.and.returnValue(createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), entries)));
943+
fixture.detectChanges();
944+
router = TestBed.inject(Router);
945+
spyOn(router, 'navigate');
946+
});
947+
let rawForm;
948+
beforeEach(() => {
949+
rawForm = comp.formGroup.getRawValue();
950+
});
951+
it('should have a select with 2 elements', ()=>{
952+
expect(rawForm.hideContainer).toBeDefined();
953+
expect(comp.hideModel).toBeDefined();
954+
expect(comp.hideModel.id).toBe('hide');
955+
expect(comp.hideModel.name).toBe('hide');
956+
expect(comp.hideModel.options.length).toBe(2);
957+
expect(comp.hideModel.options[0].label).toBe('true');
958+
expect(comp.hideModel.options[0].value).toBe('true');
959+
expect(comp.hideModel.options[1].label).toBe('false');
960+
expect(comp.hideModel.options[1].value).toBe('false');
961+
});
962+
});
963+
});
673964
});

0 commit comments

Comments
 (0)