/** * Tests for OAuth credentials API route * * @vitest-environment node */ import { hybridAuthMockFns, permissionsMock, workflowsUtilsMock } from '@sim/testing' import { NextRequest } from 'next/server' import { beforeEach, describe, expect, it, vi } from 'vitest' vi.mock('@/lib/credentials/oauth', () => ({ syncWorkspaceOAuthCredentialsForUser: vi.fn(), })) vi.mock('@/lib/workflows/utils', () => workflowsUtilsMock) vi.mock('@/lib/workspaces/permissions/utils', () => permissionsMock) import { GET } from '@/app/api/auth/oauth/credentials/route' describe('OAuth Credentials API Route', () => { function createMockRequestWithQuery(method = 'GET', queryParams = ''): NextRequest { const url = `http://localhost:3000/api/auth/oauth/credentials${queryParams}` return new NextRequest(new URL(url), { method }) } beforeEach(() => { vi.clearAllMocks() }) it('should handle unauthenticated user', async () => { hybridAuthMockFns.mockCheckSessionOrInternalAuth.mockResolvedValueOnce({ success: false, error: 'Authentication required', }) const req = createMockRequestWithQuery('GET', '?provider=google') const response = await GET(req) const data = await response.json() expect(response.status).toBe(401) expect(data.error).toBe('User not authenticated') }) it('should handle missing provider parameter', async () => { hybridAuthMockFns.mockCheckSessionOrInternalAuth.mockResolvedValueOnce({ success: true, userId: 'user-123', authType: 'session', }) const req = createMockRequestWithQuery('GET') const response = await GET(req) const data = await response.json() expect(response.status).toBe(400) expect(data.error).toBe('Provider or credentialId is required') }) it('should handle no credentials found', async () => { hybridAuthMockFns.mockCheckSessionOrInternalAuth.mockResolvedValueOnce({ success: true, userId: 'user-123', authType: 'session', }) const req = createMockRequestWithQuery('GET', '?provider=github') const response = await GET(req) const data = await response.json() expect(response.status).toBe(200) expect(data.credentials).toHaveLength(0) }) it('should return empty credentials when no workspace context', async () => { hybridAuthMockFns.mockCheckSessionOrInternalAuth.mockResolvedValueOnce({ success: true, userId: 'user-123', authType: 'session', }) const req = createMockRequestWithQuery('GET', '?provider=google-email') const response = await GET(req) const data = await response.json() expect(response.status).toBe(200) expect(data.credentials).toHaveLength(0) }) })