| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- import { beforeEach, describe, expect, it, vi } from 'vitest'
- import { DEFAULT_EXPOSED_SCHEMAS } from '@/lib/api/self-hosted/constants'
- import { getDebuggingOperations } from '@/lib/api/self-hosted/mcp'
- const mockGetLints = vi.fn()
- // Mock getLints to capture what arguments the MCP operations pass
- vi.mock('@/lib/api/self-hosted/lints', () => ({
- getLints: (...args: unknown[]) => mockGetLints(...args),
- }))
- // Mock getProjectSettings to avoid assertSelfHosted() check
- vi.mock('@/lib/api/self-hosted/settings', () => ({
- getProjectSettings: () => ({
- app_config: {
- db_schema: 'public',
- endpoint: 'localhost',
- protocol: 'http',
- },
- service_api_keys: [{ api_key: 'test', name: 'anon key', tags: 'anon' }],
- }),
- }))
- describe('MCP advisor operations pass exposedSchemas to getLints', () => {
- const headers = { Authorization: 'Bearer test' }
- beforeEach(() => {
- vi.clearAllMocks()
- mockGetLints.mockResolvedValue({
- data: [
- {
- name: 'rls_disabled_in_public',
- title: 'RLS Disabled in Public',
- level: 'ERROR',
- categories: ['SECURITY'],
- description: 'test',
- detail: 'test',
- remediation: 'test',
- metadata: {},
- cache_key: 'test',
- },
- {
- name: 'unindexed_foreign_keys',
- title: 'Unindexed foreign keys',
- level: 'INFO',
- categories: ['PERFORMANCE'],
- description: 'test',
- detail: 'test',
- remediation: 'test',
- metadata: {},
- cache_key: 'test',
- },
- ],
- error: undefined,
- })
- })
- it('getSecurityAdvisors should pass exposedSchemas to getLints', async () => {
- const ops = getDebuggingOperations({ headers })
- await ops.getSecurityAdvisors('test-project')
- expect(mockGetLints).toHaveBeenCalledOnce()
- const callArgs = mockGetLints.mock.calls[0][0]
- expect(callArgs).toHaveProperty('exposedSchemas')
- expect(callArgs.exposedSchemas).toBeTruthy()
- })
- it('getPerformanceAdvisors should pass exposedSchemas to getLints', async () => {
- const ops = getDebuggingOperations({ headers })
- await ops.getPerformanceAdvisors('test-project')
- expect(mockGetLints).toHaveBeenCalledOnce()
- const callArgs = mockGetLints.mock.calls[0][0]
- expect(callArgs).toHaveProperty('exposedSchemas')
- expect(callArgs.exposedSchemas).toBeTruthy()
- })
- it('should use DEFAULT_EXPOSED_SCHEMAS constant', async () => {
- const ops = getDebuggingOperations({ headers })
- await ops.getSecurityAdvisors('test-project')
- const callArgs = mockGetLints.mock.calls[0][0]
- expect(callArgs.exposedSchemas).toBe(DEFAULT_EXPOSED_SCHEMAS)
- })
- it('getSecurityAdvisors should filter to SECURITY category', async () => {
- const ops = getDebuggingOperations({ headers })
- const result = await ops.getSecurityAdvisors('test-project')
- expect(result).toHaveLength(1)
- expect((result as Array<{ name: string }>)[0].name).toBe('rls_disabled_in_public')
- })
- it('getPerformanceAdvisors should filter to PERFORMANCE category', async () => {
- const ops = getDebuggingOperations({ headers })
- const result = await ops.getPerformanceAdvisors('test-project')
- expect(result).toHaveLength(1)
- expect((result as Array<{ name: string }>)[0].name).toBe('unindexed_foreign_keys')
- })
- })
|