@@ -25,6 +25,11 @@ import { Item } from '../../core/shared/item.model';
2525import { MetadataValueFilter } from '../../core/shared/metadata.models' ;
2626import { DSONameService } from '../../core/breadcrumbs/dso-name.service' ;
2727import { 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
2934const infoNotification : INotification = new Notification ( 'id' , NotificationType . Info , 'info' ) ;
3035const warningNotification : INotification = new Notification ( 'id' , NotificationType . Warning , 'warning' ) ;
@@ -49,6 +54,19 @@ let fixture: ComponentFixture<EditBitstreamPageComponent>;
4954
5055describe ( '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