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 { defaultComponentMocks , defaultStubs , PartialComponentProps } from '@opencloud-eu/web-test-helpers'
44import { 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'
5+ import { GraphSharePermission , Resource , SpaceResource } from '@opencloud-eu/web-client'
6+ import { ProjectSpaceResource , ShareSpaceResource } from '@opencloud-eu/web-client'
87import { defaultPlugins , mount , shallowMount } from '@opencloud-eu/web-test-helpers'
98import { useDownloadFile , useResourcesStore } from '@opencloud-eu/web-pkg'
109import { computed } from 'vue'
@@ -76,17 +75,44 @@ describe('FileVersions', () => {
7675 const revertVersionButton = wrapper . findAll ( selectors . revertVersionButton )
7776 expect ( revertVersionButton . length ) . toBe ( defaultVersions . length )
7877 } )
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 } )
78+ it ( 'should not be possible when isReadOnly prop is true' , ( ) => {
79+ const { wrapper } = getMountedWrapper ( { props : { isReadOnly : true } } )
80+ const revertVersionButton = wrapper . findAll ( selectors . revertVersionButton )
81+ expect ( revertVersionButton . length ) . toBe ( 0 )
82+ } )
83+ it ( 'should be possible for a share space with updateVersions graph permission' , ( ) => {
84+ const space = mockDeep < ShareSpaceResource > ( {
85+ driveType : 'share' ,
86+ graphPermissions : [ GraphSharePermission . updateVersions ]
87+ } )
88+ const { wrapper } = getMountedWrapper ( { space } )
89+ const revertVersionButton = wrapper . findAll ( selectors . revertVersionButton )
90+ expect ( revertVersionButton . length ) . toBe ( defaultVersions . length )
91+ } )
92+ it ( 'should not be possible for a share space without updateVersions graph permission' , ( ) => {
93+ const space = mockDeep < ShareSpaceResource > ( {
94+ driveType : 'share' ,
95+ graphPermissions : [ ]
96+ } )
97+ const { wrapper } = getMountedWrapper ( { space } )
98+ const revertVersionButton = wrapper . findAll ( selectors . revertVersionButton )
99+ expect ( revertVersionButton . length ) . toBe ( 0 )
100+ } )
101+ it ( 'should be possible for a project space with updateVersions graph permission' , ( ) => {
102+ const space = mockDeep < ProjectSpaceResource > ( {
103+ driveType : 'project' ,
104+ graphPermissions : [ GraphSharePermission . updateVersions ]
105+ } )
106+ const { wrapper } = getMountedWrapper ( { space } )
83107 const revertVersionButton = wrapper . findAll ( selectors . revertVersionButton )
84108 expect ( revertVersionButton . length ) . toBe ( defaultVersions . length )
85109 } )
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 } )
110+ it ( 'should not be possible for a project space without updateVersions graph permission' , ( ) => {
111+ const space = mockDeep < ProjectSpaceResource > ( {
112+ driveType : 'project' ,
113+ graphPermissions : [ GraphSharePermission . readVersions ]
114+ } )
115+ const { wrapper } = getMountedWrapper ( { space } )
90116 const revertVersionButton = wrapper . findAll ( selectors . revertVersionButton )
91117 expect ( revertVersionButton . length ) . toBe ( 0 )
92118 } )
@@ -125,12 +151,14 @@ function getMountedWrapper({
125151 mountType = mount ,
126152 space = undefined ,
127153 versions = defaultVersions ,
128- resource = mock < Resource > ( { id : '1' , size : 0 , mdate : '' } )
154+ resource = mock < Resource > ( { id : '1' , size : 0 , mdate : '' } ) ,
155+ props = { }
129156} : {
130157 mountType ?: typeof mount
131158 space ?: SpaceResource
132159 versions ?: Resource [ ]
133160 resource ?: Resource
161+ props ?: PartialComponentProps < typeof FileVersions >
134162} = { } ) {
135163 const downloadFile = vi . fn ( )
136164 vi . mocked ( useDownloadFile ) . mockReturnValue ( { downloadFile } )
@@ -142,6 +170,7 @@ function getMountedWrapper({
142170
143171 return {
144172 wrapper : mountType ( FileVersions , {
173+ props,
145174 global : {
146175 mocks,
147176 renderStubDefaultSlot : true ,
0 commit comments