Skip to content

Commit 9b37103

Browse files
committed
fix failing test
1 parent 531c673 commit 9b37103

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

apps/sim/app/api/workflows/[id]/route.test.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const mockGetWorkflowById = vi.fn()
1414
const mockGetWorkflowAccessContext = vi.fn()
1515
const mockDbDelete = vi.fn()
1616
const mockDbUpdate = vi.fn()
17+
const mockDbSelect = vi.fn()
1718

1819
vi.mock('@/lib/auth', () => ({
1920
getSession: () => mockGetSession(),
@@ -49,6 +50,7 @@ vi.mock('@sim/db', () => ({
4950
db: {
5051
delete: () => mockDbDelete(),
5152
update: () => mockDbUpdate(),
53+
select: () => mockDbSelect(),
5254
},
5355
workflow: {},
5456
}))
@@ -327,6 +329,13 @@ describe('Workflow By ID API Route', () => {
327329
isWorkspaceOwner: false,
328330
})
329331

332+
// Mock db.select() to return multiple workflows so deletion is allowed
333+
mockDbSelect.mockReturnValue({
334+
from: vi.fn().mockReturnValue({
335+
where: vi.fn().mockResolvedValue([{ id: 'workflow-123' }, { id: 'workflow-456' }]),
336+
}),
337+
})
338+
330339
mockDbDelete.mockReturnValue({
331340
where: vi.fn().mockResolvedValue([{ id: 'workflow-123' }]),
332341
})
@@ -347,6 +356,46 @@ describe('Workflow By ID API Route', () => {
347356
expect(data.success).toBe(true)
348357
})
349358

359+
it('should prevent deletion of the last workflow in workspace', async () => {
360+
const mockWorkflow = {
361+
id: 'workflow-123',
362+
userId: 'user-123',
363+
name: 'Test Workflow',
364+
workspaceId: 'workspace-456',
365+
}
366+
367+
mockGetSession.mockResolvedValue({
368+
user: { id: 'user-123' },
369+
})
370+
371+
mockGetWorkflowById.mockResolvedValue(mockWorkflow)
372+
mockGetWorkflowAccessContext.mockResolvedValue({
373+
workflow: mockWorkflow,
374+
workspaceOwnerId: 'workspace-456',
375+
workspacePermission: 'admin',
376+
isOwner: true,
377+
isWorkspaceOwner: false,
378+
})
379+
380+
// Mock db.select() to return only 1 workflow (the one being deleted)
381+
mockDbSelect.mockReturnValue({
382+
from: vi.fn().mockReturnValue({
383+
where: vi.fn().mockResolvedValue([{ id: 'workflow-123' }]),
384+
}),
385+
})
386+
387+
const req = new NextRequest('http://localhost:3000/api/workflows/workflow-123', {
388+
method: 'DELETE',
389+
})
390+
const params = Promise.resolve({ id: 'workflow-123' })
391+
392+
const response = await DELETE(req, { params })
393+
394+
expect(response.status).toBe(400)
395+
const data = await response.json()
396+
expect(data.error).toBe('Cannot delete the only workflow in the workspace')
397+
})
398+
350399
it.concurrent('should deny deletion for non-admin users', async () => {
351400
const mockWorkflow = {
352401
id: 'workflow-123',

0 commit comments

Comments
 (0)