@@ -10,6 +10,7 @@ import { provideNoopAnimations } from '@angular/platform-browser/animations';
1010import { NotificationsService } from '@dspace/core/notification-system/notifications.service' ;
1111import { NotificationsServiceStub } from '@dspace/core/testing/notifications-service.stub' ;
1212import { TranslateLoaderMock } from '@dspace/core/testing/translate-loader.mock' ;
13+ import { createSuccessfulRemoteDataObject$ } from '@dspace/core/utilities/remote-data.utils' ;
1314import {
1415 TranslateLoader ,
1516 TranslateModule ,
@@ -26,11 +27,12 @@ describe('AdminEditCmsMetadataComponent', () => {
2627 let component : AdminEditCmsMetadataComponent ;
2728 let fixture : ComponentFixture < AdminEditCmsMetadataComponent > ;
2829 const site = Object . assign ( new Site ( ) , {
29- metadata : { } ,
30+ metadata : { } ,
3031 } ) ;
3132
3233 const siteServiceStub = jasmine . createSpyObj ( 'SiteDataService' , {
3334 find : jasmine . createSpy ( 'find' ) ,
35+ findByHref : jasmine . createSpy ( 'findByHref' ) ,
3436 patch : jasmine . createSpy ( 'patch' ) ,
3537 } ) ;
3638
@@ -70,6 +72,7 @@ describe('AdminEditCmsMetadataComponent', () => {
7072 fixture = TestBed . createComponent ( AdminEditCmsMetadataComponent ) ;
7173 component = fixture . componentInstance ;
7274 siteServiceStub . find . and . returnValue ( of ( site ) ) ;
75+ siteServiceStub . findByHref . and . returnValue ( createSuccessfulRemoteDataObject$ ( site ) ) ;
7376 siteServiceStub . patch . and . returnValue ( of ( site ) ) ;
7477 } ) ;
7578
@@ -132,28 +135,29 @@ describe('AdminEditCmsMetadataComponent', () => {
132135
133136 it ( 'should call method patch of service' , ( ) => {
134137 component . selectedMetadata = environment . cms . metadataList [ 0 ] ;
138+ component . selectedMetadataValues . set ( environment . languages [ 0 ] . code , 'Test English Text' ) ;
139+ component . selectedMetadataValues . set ( environment . languages [ 1 ] . code , 'Test Second Language Text' ) ;
135140 const saveButton = fixture . debugElement . query ( By . css ( '#save-metadata-btn' ) ) ;
136141 saveButton . nativeElement . click ( ) ;
142+
137143 const operations = [ ] ;
138- operations . push ( {
139- op : 'replace' ,
140- path : '/metadata/' + component . selectedMetadata ,
141- value : {
142- value : component . selectedMetadataValues . get ( environment . languages [ 0 ] . code ) ,
143- language : environment . languages [ 0 ] . code ,
144- } ,
145- } ) ;
146- component . selectedMetadataValues . forEach ( ( value , key ) => {
147- if ( key !== environment . languages [ 0 ] . code ) {
148- operations . push ( {
149- op : 'add' ,
150- path : '/metadata/' + component . selectedMetadata ,
151- value : {
152- value : value ,
153- language : key ,
154- } ,
155- } ) ;
156- }
144+ if ( site . hasMetadata && site . hasMetadata ( component . selectedMetadata ) ) {
145+ operations . push ( {
146+ op : 'remove' ,
147+ path : '/metadata/' + component . selectedMetadata ,
148+ } ) ;
149+ }
150+ const nonEmptyValues = Array . from ( component . selectedMetadataValues . entries ( ) )
151+ . filter ( ( [ , text ] ) => text && text . trim ( ) . length > 0 ) ;
152+ nonEmptyValues . forEach ( ( [ language , value ] ) => {
153+ operations . push ( {
154+ op : 'add' ,
155+ path : '/metadata/' + component . selectedMetadata + '/-' ,
156+ value : {
157+ value,
158+ language,
159+ } ,
160+ } ) ;
157161 } ) ;
158162 expect ( siteServiceStub . patch ) . toHaveBeenCalledWith ( site , operations ) ;
159163 } ) ;
0 commit comments