11import * as React from 'react'
2- import { beforeEach , describe , it , expect , vi , afterEach , type Mock } from 'vitest'
2+ import { describe , it , expect , vi , afterEach , type Mock } from 'vitest'
33import { render , cleanup } from '@testing-library/react'
4- import { renderHook } from '@testing-library/react-hooks'
54
65import * as BucketPreferences from 'utils/BucketPreferences'
7- import { extendDefaults } from 'utils/BucketPreferences/BucketPreferences'
86import noop from 'utils/noop'
97
108import * as DirToolbar from './Toolbar'
@@ -19,14 +17,24 @@ vi.mock('./Add', () => ({
1917} ) )
2018
2119vi . mock ( './Get' , ( ) => ( {
22- Options : ( ) => < div > "Get" popover</ div > ,
20+ Options : ( { features } : { features ?: { code : boolean } } ) => (
21+ < div >
22+ "Get" popover
23+ { features ?. code && < div data-testid = "code-samples" /> }
24+ </ div >
25+ ) ,
2326} ) )
2427
2528vi . mock ( './Organize' , ( ) => ( {
2629 Context : {
2730 Provider : ( { children } : { children : React . ReactNode } ) => < > { children } </ > ,
2831 } ,
29- Options : ( ) => < > "Organize" popover</ > ,
32+ Options : ( { features } : { features ?: { delete : boolean } } ) => (
33+ < div >
34+ "Organize" popover
35+ { features ?. delete && < div data-testid = "delete-button" /> }
36+ </ div >
37+ ) ,
3038} ) )
3139
3240vi . mock ( './CreatePackage' , ( ) => ( {
@@ -70,78 +78,6 @@ vi.mock('utils/BucketPreferences', async () => ({
7078 use : ( ) => prefsHook ( ) ,
7179} ) )
7280
73- describe ( 'useFeatures' , ( ) => {
74- beforeEach ( ( ) => {
75- vi . clearAllMocks ( )
76- } )
77-
78- it ( 'should return null when preferences are loading' , ( ) => {
79- prefsHook . mockImplementationOnce ( ( ) => ( {
80- prefs : BucketPreferences . Result . Pending ( ) ,
81- } ) )
82-
83- const { result } = renderHook ( ( ) => DirToolbar . useFeatures ( ) )
84-
85- expect ( result . current ) . toBeNull ( )
86- } )
87-
88- it ( 'should return all features disabled when all permissions are false' , ( ) => {
89- prefsHook . mockImplementationOnce ( ( ) => ( {
90- prefs : BucketPreferences . Result . Ok (
91- extendDefaults ( {
92- ui : {
93- actions : {
94- writeFile : false ,
95- downloadObject : false ,
96- createPackage : false ,
97- } ,
98- blocks : {
99- code : false ,
100- } ,
101- } ,
102- } ) ,
103- ) ,
104- } ) )
105-
106- const { result } = renderHook ( ( ) => DirToolbar . useFeatures ( ) )
107-
108- expect ( result . current ) . toEqual ( {
109- add : false ,
110- get : false ,
111- organize : true , // Always true in the implementation
112- createPackage : false ,
113- } )
114- } )
115-
116- it ( 'should return all features enabled when all permissions are true' , ( ) => {
117- prefsHook . mockImplementationOnce ( ( ) => ( {
118- prefs : BucketPreferences . Result . Ok (
119- extendDefaults ( {
120- ui : {
121- actions : {
122- writeFile : true ,
123- downloadObject : true ,
124- createPackage : true ,
125- } ,
126- blocks : {
127- code : true ,
128- } ,
129- } ,
130- } ) ,
131- ) ,
132- } ) )
133-
134- const { result } = renderHook ( ( ) => DirToolbar . useFeatures ( ) )
135-
136- expect ( result . current ) . toEqual ( {
137- add : true ,
138- get : { code : true } ,
139- organize : true ,
140- createPackage : true ,
141- } )
142- } )
143- } )
144-
14581const handle = DirToolbar . CreateHandle ( 'test-bucket' , 'test/path' )
14682
14783describe ( 'Toolbar' , ( ) => {
@@ -158,7 +94,12 @@ describe('Toolbar', () => {
15894 it ( 'should render all buttons when all features are enabled' , ( ) => {
15995 const { getByTitle } = render (
16096 < DirToolbar . Toolbar
161- features = { { add : true , get : { code : true } , organize : true , createPackage : true } }
97+ features = { {
98+ add : true ,
99+ get : { code : true } ,
100+ organize : { delete : true } ,
101+ createPackage : true ,
102+ } }
162103 handle = { handle }
163104 onReload = { vi . fn ( ) }
164105 /> ,
@@ -186,7 +127,12 @@ describe('Toolbar', () => {
186127 it ( 'should render buttons for enabled features: add, organize' , ( ) => {
187128 const { getByTitle, queryByTitle } = render (
188129 < DirToolbar . Toolbar
189- features = { { add : true , get : false , organize : true , createPackage : false } }
130+ features = { {
131+ add : true ,
132+ get : false ,
133+ organize : { delete : true } ,
134+ createPackage : false ,
135+ } }
190136 handle = { handle }
191137 onReload = { vi . fn ( ) }
192138 /> ,
@@ -196,4 +142,36 @@ describe('Toolbar', () => {
196142 expect ( queryByTitle ( 'Get files' ) ) . toBeFalsy ( )
197143 expect ( queryByTitle ( 'Create package' ) ) . toBeFalsy ( )
198144 } )
145+
146+ it ( 'should show delete button in Organize.Options when delete feature is enabled' , ( ) => {
147+ const { getByTestId } = render (
148+ < DirToolbar . Toolbar
149+ features = { {
150+ add : false ,
151+ get : false ,
152+ organize : { delete : true } ,
153+ createPackage : false ,
154+ } }
155+ handle = { handle }
156+ onReload = { vi . fn ( ) }
157+ /> ,
158+ )
159+ expect ( getByTestId ( 'delete-button' ) ) . toBeTruthy ( )
160+ } )
161+
162+ it ( 'should hide delete button in Organize.Options when delete feature is disabled' , ( ) => {
163+ const { queryByTestId } = render (
164+ < DirToolbar . Toolbar
165+ features = { {
166+ add : false ,
167+ get : false ,
168+ organize : { delete : false } ,
169+ createPackage : false ,
170+ } }
171+ handle = { handle }
172+ onReload = { vi . fn ( ) }
173+ /> ,
174+ )
175+ expect ( queryByTestId ( 'delete-button' ) ) . toBeFalsy ( )
176+ } )
199177} )
0 commit comments