import { beforeEach, describe, expect, it, vi } from 'vitest'

const { mockRequirePermission } = vi.hoisted(() => ({
  mockRequirePermission: vi.fn(() => async (_c: unknown, next: () => Promise<void>) => next()),
}))

vi.mock('../src/middleware/auth', () => ({
  authMiddleware: async (_c: unknown, next: () => Promise<void>) => next(),
}))

vi.mock('../src/middleware/guards', () => ({
  requirePermission: (...args: unknown[]) => mockRequirePermission(...args),
}))

vi.mock('@zync/db/queries', () => ({
  createDb: vi.fn(),
  getProjectSettings: vi.fn(),
  updateProjectSettings: vi.fn(),
  projectSettingsSchema: { safeParse: vi.fn() },
}))

describe('/api/settings/projects route permissions', () => {
  beforeEach(() => {
    vi.resetModules()
    mockRequirePermission.mockClear()
  })

  it('registers GET with projects:read', async () => {
    await import('../src/routes/settings/projects')

    expect(mockRequirePermission).toHaveBeenCalledWith('projects:read')
  })

  it('registers PATCH with projects:write', async () => {
    await import('../src/routes/settings/projects')

    expect(mockRequirePermission).toHaveBeenCalledWith('projects:write')
  })
})
