@@ -34,6 +34,7 @@ const { mockLogger, mockDbRef } = vi.hoisted(() => {
3434} )
3535
3636const mockPerformDeleteFolder = workflowsOrchestrationMockFns . mockPerformDeleteFolder
37+ const mockPerformUpdateFolder = workflowsOrchestrationMockFns . mockPerformUpdateFolder
3738
3839const mockGetUserEntityPermissions = permissionsMockFns . mockGetUserEntityPermissions
3940
@@ -54,16 +55,6 @@ vi.mock('@/lib/workflows/utils', () => workflowsUtilsMock)
5455
5556import { DELETE , PUT } from '@/app/api/folders/[id]/route'
5657
57- /** Type for captured folder values in tests */
58- interface CapturedFolderValues {
59- name ?: string
60- color ?: string
61- parentId ?: string | null
62- isExpanded ?: boolean
63- sortOrder ?: number
64- updatedAt ?: Date
65- }
66-
6758interface FolderDbMockOptions {
6859 folderLookupResult ?: any
6960 updateResult ?: any [ ]
@@ -160,6 +151,41 @@ describe('Individual Folder API Route', () => {
160151 success : true ,
161152 deletedItems : { folders : 1 , workflows : 0 } ,
162153 } )
154+ mockPerformUpdateFolder . mockImplementation ( async ( params ) => {
155+ if ( params . parentId && params . parentId === params . folderId ) {
156+ return {
157+ success : false ,
158+ error : 'Folder cannot be its own parent' ,
159+ errorCode : 'validation' ,
160+ }
161+ }
162+ if (
163+ params . parentId &&
164+ ( await workflowsUtilsMockFns . mockCheckForCircularReference (
165+ params . folderId ,
166+ params . parentId
167+ ) )
168+ ) {
169+ return {
170+ success : false ,
171+ error : 'Cannot create circular folder reference' ,
172+ errorCode : 'validation' ,
173+ }
174+ }
175+ return {
176+ success : true ,
177+ folder : {
178+ ...mockFolder ,
179+ id : params . folderId ,
180+ name : params . name !== undefined ? params . name . trim ( ) : 'Updated Folder' ,
181+ color : params . color ?? mockFolder . color ,
182+ parentId : params . parentId ?? mockFolder . parentId ,
183+ isExpanded : params . isExpanded ,
184+ sortOrder : params . sortOrder ?? mockFolder . sortOrder ,
185+ updatedAt : new Date ( ) ,
186+ } ,
187+ }
188+ } )
163189 workflowsUtilsMockFns . mockCheckForCircularReference . mockResolvedValue ( false )
164190 } )
165191
@@ -180,7 +206,7 @@ describe('Individual Folder API Route', () => {
180206 const data = await response . json ( )
181207 expect ( data ) . toHaveProperty ( 'folder' )
182208 expect ( data . folder ) . toMatchObject ( {
183- name : 'Updated Folder' ,
209+ name : 'Updated Folder Name ' ,
184210 } )
185211 } )
186212
@@ -285,44 +311,15 @@ describe('Individual Folder API Route', () => {
285311 it ( 'should trim folder name when updating' , async ( ) => {
286312 mockAuthenticatedUser ( )
287313
288- let capturedUpdates : CapturedFolderValues | null = null
289-
290- const mockSelect = vi . fn ( ) . mockImplementation ( ( ) => ( {
291- from : vi . fn ( ) . mockImplementation ( ( ) => ( {
292- where : vi . fn ( ) . mockImplementation ( ( ) => ( {
293- then : vi . fn ( ) . mockImplementation ( ( callback ) => {
294- return Promise . resolve ( callback ( [ mockFolder ] ) )
295- } ) ,
296- } ) ) ,
297- } ) ) ,
298- } ) )
299-
300- const mockUpdate = vi . fn ( ) . mockImplementation ( ( ) => ( {
301- set : vi . fn ( ) . mockImplementation ( ( updates ) => {
302- capturedUpdates = updates
303- return {
304- where : vi . fn ( ) . mockImplementation ( ( ) => ( {
305- returning : vi . fn ( ) . mockReturnValue ( [ { ...mockFolder , name : 'Folder With Spaces' } ] ) ,
306- } ) ) ,
307- }
308- } ) ,
309- } ) )
310-
311- mockDbRef . current = {
312- select : mockSelect ,
313- update : mockUpdate ,
314- delete : vi . fn ( ) ,
315- }
316-
317314 const req = createMockRequest ( 'PUT' , {
318315 name : ' Folder With Spaces ' ,
319316 } )
320317 const params = Promise . resolve ( { id : 'folder-1' } )
321318
322- await PUT ( req , { params } )
319+ const response = await PUT ( req , { params } )
320+ const data = await response . json ( )
323321
324- expect ( capturedUpdates ) . not . toBeNull ( )
325- expect ( capturedUpdates ! . name ) . toBe ( 'Folder With Spaces' )
322+ expect ( data . folder . name ) . toBe ( 'Folder With Spaces' )
326323 } )
327324
328325 it ( 'should handle database errors gracefully' , async ( ) => {
0 commit comments