11import { DateTime } from 'luxon'
22import FileVersions from '../../../../../src/components/SideBar/Versions/FileVersions.vue'
3- import { defaultComponentMocks , defaultStubs } from '@opencloud-eu/web-test-helpers'
3+ import {
4+ defaultComponentMocks ,
5+ defaultStubs ,
6+ PartialComponentProps
7+ } from '@opencloud-eu/web-test-helpers'
48import { mock , mockDeep } from 'vitest-mock-extended'
5- import { Resource , SpaceResource } from '@opencloud-eu/web-client'
6- import { ShareResource , ShareSpaceResource } from '@opencloud-eu/web-client'
7- import { DavPermission } from '@opencloud-eu/web-client/webdav'
9+ import { GraphSharePermission , Resource , SpaceResource } from '@opencloud-eu/web-client'
10+ import { ProjectSpaceResource , ShareSpaceResource } from '@opencloud-eu/web-client'
811import { defaultPlugins , mount , shallowMount } from '@opencloud-eu/web-test-helpers'
912import { useDownloadFile , useResourcesStore } from '@opencloud-eu/web-pkg'
1013import { computed } from 'vue'
@@ -76,17 +79,44 @@ describe('FileVersions', () => {
7679 const revertVersionButton = wrapper . findAll ( selectors . revertVersionButton )
7780 expect ( revertVersionButton . length ) . toBe ( defaultVersions . length )
7881 } )
79- it ( 'should be possible for a share with write permissions' , ( ) => {
80- const resource = mockDeep < ShareResource > ( { permissions : DavPermission . Updateable } )
81- const space = mockDeep < ShareSpaceResource > ( { driveType : 'share' } )
82- const { wrapper } = getMountedWrapper ( { resource, space } )
82+ it ( 'should not be possible when isReadOnly prop is true' , ( ) => {
83+ const { wrapper } = getMountedWrapper ( { props : { isReadOnly : true } } )
84+ const revertVersionButton = wrapper . findAll ( selectors . revertVersionButton )
85+ expect ( revertVersionButton . length ) . toBe ( 0 )
86+ } )
87+ it ( 'should be possible for a share space with updateVersions graph permission' , ( ) => {
88+ const space = mockDeep < ShareSpaceResource > ( {
89+ driveType : 'share' ,
90+ graphPermissions : [ GraphSharePermission . updateVersions ]
91+ } )
92+ const { wrapper } = getMountedWrapper ( { space } )
93+ const revertVersionButton = wrapper . findAll ( selectors . revertVersionButton )
94+ expect ( revertVersionButton . length ) . toBe ( defaultVersions . length )
95+ } )
96+ it ( 'should not be possible for a share space without updateVersions graph permission' , ( ) => {
97+ const space = mockDeep < ShareSpaceResource > ( {
98+ driveType : 'share' ,
99+ graphPermissions : [ ]
100+ } )
101+ const { wrapper } = getMountedWrapper ( { space } )
102+ const revertVersionButton = wrapper . findAll ( selectors . revertVersionButton )
103+ expect ( revertVersionButton . length ) . toBe ( 0 )
104+ } )
105+ it ( 'should be possible for a project space with updateVersions graph permission' , ( ) => {
106+ const space = mockDeep < ProjectSpaceResource > ( {
107+ driveType : 'project' ,
108+ graphPermissions : [ GraphSharePermission . updateVersions ]
109+ } )
110+ const { wrapper } = getMountedWrapper ( { space } )
83111 const revertVersionButton = wrapper . findAll ( selectors . revertVersionButton )
84112 expect ( revertVersionButton . length ) . toBe ( defaultVersions . length )
85113 } )
86- it ( 'should not be possible for a share with read-only permissions' , ( ) => {
87- const resource = mockDeep < ShareResource > ( { permissions : '' } )
88- const space = mockDeep < ShareSpaceResource > ( { driveType : 'share' } )
89- const { wrapper } = getMountedWrapper ( { resource, space } )
114+ it ( 'should not be possible for a project space without updateVersions graph permission' , ( ) => {
115+ const space = mockDeep < ProjectSpaceResource > ( {
116+ driveType : 'project' ,
117+ graphPermissions : [ GraphSharePermission . readVersions ]
118+ } )
119+ const { wrapper } = getMountedWrapper ( { space } )
90120 const revertVersionButton = wrapper . findAll ( selectors . revertVersionButton )
91121 expect ( revertVersionButton . length ) . toBe ( 0 )
92122 } )
@@ -125,12 +155,14 @@ function getMountedWrapper({
125155 mountType = mount ,
126156 space = undefined ,
127157 versions = defaultVersions ,
128- resource = mock < Resource > ( { id : '1' , size : 0 , mdate : '' } )
158+ resource = mock < Resource > ( { id : '1' , size : 0 , mdate : '' } ) ,
159+ props = { }
129160} : {
130161 mountType ?: typeof mount
131162 space ?: SpaceResource
132163 versions ?: Resource [ ]
133164 resource ?: Resource
165+ props ?: PartialComponentProps < typeof FileVersions >
134166} = { } ) {
135167 const downloadFile = vi . fn ( )
136168 vi . mocked ( useDownloadFile ) . mockReturnValue ( { downloadFile } )
@@ -142,6 +174,7 @@ function getMountedWrapper({
142174
143175 return {
144176 wrapper : mountType ( FileVersions , {
177+ props,
145178 global : {
146179 mocks,
147180 renderStubDefaultSlot : true ,
0 commit comments