@@ -7,6 +7,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest'
77
88const {
99 mockActivateWorkflowVersion,
10+ mockAuthorizeWorkflowByWorkspacePermission,
1011 mockCreateSchedulesForDeploy,
1112 mockDbFrom,
1213 mockDbLimit,
@@ -22,6 +23,7 @@ const {
2223 mockValidateWorkflowAccess,
2324} = vi . hoisted ( ( ) => ( {
2425 mockActivateWorkflowVersion : vi . fn ( ) ,
26+ mockAuthorizeWorkflowByWorkspacePermission : vi . fn ( ) ,
2527 mockCreateSchedulesForDeploy : vi . fn ( ) ,
2628 mockDbFrom : vi . fn ( ) ,
2729 mockDbLimit : vi . fn ( ) ,
@@ -93,6 +95,11 @@ vi.mock('@/lib/mcp/workflow-mcp-sync', () => ({
9395 syncMcpToolsForWorkflow : ( ...args : unknown [ ] ) => mockSyncMcpToolsForWorkflow ( ...args ) ,
9496} ) )
9597
98+ vi . mock ( '@/lib/workflows/utils' , ( ) => ( {
99+ authorizeWorkflowByWorkspacePermission : ( ...args : unknown [ ] ) =>
100+ mockAuthorizeWorkflowByWorkspacePermission ( ...args ) ,
101+ } ) )
102+
96103vi . mock ( '@/lib/audit/log' , ( ) => ( {
97104 AuditAction : { WORKFLOW_DEPLOYMENT_ACTIVATED : 'WORKFLOW_DEPLOYMENT_ACTIVATED' } ,
98105 AuditResourceType : { WORKFLOW : 'WORKFLOW' } ,
@@ -127,6 +134,7 @@ describe('Workflow deployment version route', () => {
127134 success : true ,
128135 deployedAt : '2024-01-17T12:00:00.000Z' ,
129136 } )
137+ mockAuthorizeWorkflowByWorkspacePermission . mockResolvedValue ( { allowed : true , status : 200 } )
130138 } )
131139
132140 it ( 'uses write permission for metadata-only patch updates' , async ( ) => {
@@ -171,8 +179,10 @@ describe('Workflow deployment version route', () => {
171179 requireDeployment : false ,
172180 action : 'write' ,
173181 } )
174- expect ( mockValidateWorkflowAccess ) . toHaveBeenNthCalledWith ( 2 , req , 'wf-1' , {
175- requireDeployment : false ,
182+ expect ( mockValidateWorkflowAccess ) . toHaveBeenCalledTimes ( 1 )
183+ expect ( mockAuthorizeWorkflowByWorkspacePermission ) . toHaveBeenCalledWith ( {
184+ workflowId : 'wf-1' ,
185+ userId : 'api-user' ,
176186 action : 'admin' ,
177187 } )
178188 expect ( mockSaveTriggerWebhooksForDeploy ) . toHaveBeenCalledWith (
@@ -206,14 +216,15 @@ describe('Workflow deployment version route', () => {
206216 } )
207217
208218 it ( 'returns admin auth failure before activation side effects' , async ( ) => {
209- mockValidateWorkflowAccess
210- . mockResolvedValueOnce ( {
211- workflow : { id : 'wf-1' , name : 'Test Workflow' , workspaceId : 'ws-1' } ,
212- auth : { success : true , userId : 'user-1' , authType : 'session' } ,
213- } )
214- . mockResolvedValueOnce ( {
215- error : { message : 'Admin permission required' , status : 403 } ,
216- } )
219+ mockValidateWorkflowAccess . mockResolvedValue ( {
220+ workflow : { id : 'wf-1' , name : 'Test Workflow' , workspaceId : 'ws-1' } ,
221+ auth : { success : true , userId : 'user-1' , authType : 'session' } ,
222+ } )
223+ mockAuthorizeWorkflowByWorkspacePermission . mockResolvedValue ( {
224+ allowed : false ,
225+ status : 403 ,
226+ message : 'Admin permission required' ,
227+ } )
217228
218229 const req = new NextRequest ( 'http://localhost:3000/api/workflows/wf-1/deployments/3' , {
219230 method : 'PATCH' ,
@@ -223,13 +234,14 @@ describe('Workflow deployment version route', () => {
223234 const response = await PATCH ( req , { params : Promise . resolve ( { id : 'wf-1' , version : '3' } ) } )
224235
225236 expect ( response . status ) . toBe ( 403 )
226- expect ( mockValidateWorkflowAccess ) . toHaveBeenCalledTimes ( 2 )
227- expect ( mockValidateWorkflowAccess ) . toHaveBeenNthCalledWith ( 1 , req , 'wf-1' , {
237+ expect ( mockValidateWorkflowAccess ) . toHaveBeenCalledTimes ( 1 )
238+ expect ( mockValidateWorkflowAccess ) . toHaveBeenCalledWith ( req , 'wf-1' , {
228239 requireDeployment : false ,
229240 action : 'write' ,
230241 } )
231- expect ( mockValidateWorkflowAccess ) . toHaveBeenNthCalledWith ( 2 , req , 'wf-1' , {
232- requireDeployment : false ,
242+ expect ( mockAuthorizeWorkflowByWorkspacePermission ) . toHaveBeenCalledWith ( {
243+ workflowId : 'wf-1' ,
244+ userId : 'user-1' ,
233245 action : 'admin' ,
234246 } )
235247 expect ( mockDbSelect ) . not . toHaveBeenCalled ( )
0 commit comments