1- import { waitForAsync } from '@angular/core/testing' ;
1+ import {
2+ fakeAsync ,
3+ flush ,
4+ waitForAsync ,
5+ } from '@angular/core/testing' ;
26import { buildPaginatedList } from '@dspace/core/data/paginated-list.model' ;
37import { Item } from '@dspace/core/shared/item.model' ;
48import { MetadataMap } from '@dspace/core/shared/metadata.models' ;
59import { PageInfo } from '@dspace/core/shared/page-info.model' ;
610import { Version } from '@dspace/core/shared/version.model' ;
11+ import { WorkspaceItem } from '@dspace/core/submission/models/workspaceitem.model' ;
712import { createSuccessfulRemoteDataObject$ } from '@dspace/core/utilities/remote-data.utils' ;
813import {
9- EMPTY ,
1014 of ,
15+ Subject ,
1116} from 'rxjs' ;
1217
1318import { createRelationshipsObservable } from '../../../item-page/simple/item-types/shared/item.component.spec' ;
@@ -23,6 +28,9 @@ describe('DsoVersioningModalService', () => {
2328 let workspaceItemDataService ;
2429 let itemService ;
2530
31+ let createVersionEvent$ : Subject < string > ;
32+
33+
2634 const mockItem : Item = Object . assign ( new Item ( ) , {
2735 bundles : createSuccessfulRemoteDataObject$ ( buildPaginatedList ( new PageInfo ( ) , [ ] ) ) ,
2836 metadata : new MetadataMap ( ) ,
@@ -37,21 +45,40 @@ describe('DsoVersioningModalService', () => {
3745 } ,
3846 } ) ;
3947
48+ const mockVersion = Object . assign ( new Version ( ) , {
49+ _links : {
50+ self : {
51+ href : 'version-href' ,
52+ } ,
53+ item : {
54+ href : 'item-href' ,
55+ } ,
56+ } ,
57+ } ) ;
58+
4059 beforeEach ( waitForAsync ( ( ) => {
60+ createVersionEvent$ = new Subject < string > ( ) ;
4161 modalService = jasmine . createSpyObj ( 'modalService' , {
42- open : { componentInstance : { firstVersion : { } , versionNumber : { } , createVersionEvent : EMPTY } } ,
62+ open : {
63+ componentInstance : { firstVersion : { } , versionNumber : { } , createVersionEvent : createVersionEvent$ . asObservable ( ) } ,
64+ close : jasmine . createSpy ( 'close' ) ,
65+ } ,
4366 } ) ;
4467 versionService = jasmine . createSpyObj ( 'versionService' , {
4568 findByHref : createSuccessfulRemoteDataObject$ < Version > ( new Version ( ) ) ,
69+ invalidateVersionHrefCache : undefined ,
4670 } ) ;
4771 versionHistoryService = jasmine . createSpyObj ( 'versionHistoryService' , {
48- createVersion : createSuccessfulRemoteDataObject$ < Version > ( new Version ( ) ) ,
72+ createVersion : createSuccessfulRemoteDataObject$ < Version > ( mockVersion ) ,
4973 hasDraftVersion$ : of ( false ) ,
5074 } ) ;
5175 itemVersionShared = jasmine . createSpyObj ( 'itemVersionShared' , [ 'notifyCreateNewVersion' ] ) ;
5276 router = jasmine . createSpyObj ( 'router' , [ 'navigateByUrl' ] ) ;
5377 workspaceItemDataService = jasmine . createSpyObj ( 'workspaceItemDataService' , [ 'findByItem' ] ) ;
54- itemService = jasmine . createSpyObj ( 'itemService' , [ 'findByHref' ] ) ;
78+ workspaceItemDataService . findByItem . and . returnValue ( createSuccessfulRemoteDataObject$ < WorkspaceItem > ( new WorkspaceItem ( ) ) ) ;
79+
80+ itemService = jasmine . createSpyObj ( 'itemService' , [ 'findByHref' , 'invalidateFindByCustomUrlCache' ] ) ;
81+ itemService . findByHref . and . returnValue ( createSuccessfulRemoteDataObject$ < Item > ( mockItem ) ) ;
5582
5683 service = new DsoVersioningModalService (
5784 modalService ,
@@ -93,4 +120,27 @@ describe('DsoVersioningModalService', () => {
93120 } ) ;
94121 } ) ;
95122 } ) ;
123+
124+ describe ( 'version modal' , ( ) => {
125+ it ( 'should invalidate version href cache after a successful create' , fakeAsync ( ( ) => {
126+ service . openCreateVersionModal ( mockItem ) ;
127+ createVersionEvent$ . next ( 'summary' ) ;
128+ flush ( ) ;
129+ expect ( versionService . invalidateVersionHrefCache ) . toHaveBeenCalledWith ( mockItem ) ;
130+ expect ( itemService . invalidateFindByCustomUrlCache ) . not . toHaveBeenCalled ( ) ;
131+ } ) ) ;
132+
133+ it ( 'should invalidate findByCustomUrl cache when item has dspace.customurl metadata' , fakeAsync ( ( ) => {
134+ const itemWithCustomUrl : Item = Object . assign ( new Item ( ) , mockItem , {
135+ metadata : Object . assign ( new MetadataMap ( ) , {
136+ 'dspace.customurl' : [ { value : 'my-custom-url' } ] ,
137+ } ) ,
138+ } ) ;
139+ service . openCreateVersionModal ( itemWithCustomUrl ) ;
140+ createVersionEvent$ . next ( 'summary' ) ;
141+ flush ( ) ;
142+ expect ( versionService . invalidateVersionHrefCache ) . toHaveBeenCalledWith ( itemWithCustomUrl ) ;
143+ expect ( itemService . invalidateFindByCustomUrlCache ) . toHaveBeenCalledWith ( 'my-custom-url' ) ;
144+ } ) ) ;
145+ } ) ;
96146} ) ;
0 commit comments