@@ -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
@@ -131,28 +134,29 @@ describe('AdminEditCmsMetadataComponent', () => {
131134
132135 it ( 'should call method patch of service' , ( ) => {
133136 component . selectedMetadata = environment . cms . metadataList [ 0 ] ;
134- const saveButton = fixture . debugElement . query ( By . css ( '#save-metadata-btn' ) ) ;
135- saveButton . nativeElement . click ( ) ;
137+ component . site = site ;
138+ component . selectedMetadataValues . set ( environment . languages [ 0 ] . code , 'Test English Text' ) ;
139+ component . selectedMetadataValues . set ( environment . languages [ 1 ] . code , 'Test Second Language Text' ) ;
140+ component . saveMetadata ( ) ;
141+
136142 const operations = [ ] ;
137- operations . push ( {
138- op : 'replace' ,
139- path : '/metadata/' + component . selectedMetadata ,
140- value : {
141- value : component . selectedMetadataValues . get ( environment . languages [ 0 ] . code ) ,
142- language : environment . languages [ 0 ] . code ,
143- } ,
144- } ) ;
145- component . selectedMetadataValues . forEach ( ( value , key ) => {
146- if ( key !== environment . languages [ 0 ] . code ) {
147- operations . push ( {
148- op : 'add' ,
149- path : '/metadata/' + component . selectedMetadata ,
150- value : {
151- value : value ,
152- language : key ,
153- } ,
154- } ) ;
155- }
143+ if ( site . hasMetadata && site . hasMetadata ( component . selectedMetadata ) ) {
144+ operations . push ( {
145+ op : 'remove' ,
146+ path : '/metadata/' + component . selectedMetadata ,
147+ } ) ;
148+ }
149+ const nonEmptyValues = Array . from ( component . selectedMetadataValues . entries ( ) )
150+ . filter ( ( [ , text ] ) => text && text . trim ( ) . length > 0 ) ;
151+ nonEmptyValues . forEach ( ( [ language , value ] ) => {
152+ operations . push ( {
153+ op : 'add' ,
154+ path : '/metadata/' + component . selectedMetadata + '/-' ,
155+ value : {
156+ value,
157+ language,
158+ } ,
159+ } ) ;
156160 } ) ;
157161 expect ( siteServiceStub . patch ) . toHaveBeenCalledWith ( site , operations ) ;
158162 } ) ;
0 commit comments