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/guards', () => ({
  requirePermission: (...args: unknown[]) => mockRequirePermission(...args),
}))

vi.mock('@zync/db/queries', () => ({
  createDb: vi.fn(),
  listTeamMembers: vi.fn(),
  listPendingInvites: vi.fn(),
  updateMemberRole: vi.fn(),
  updateUserHourlyCost: vi.fn(),
  removeTenantMember: vi.fn(),
  revokePendingInvite: vi.fn(),
  approvePendingMember: vi.fn(),
  unfreezeTenantMember: vi.fn(),
  freezeMembership: vi.fn(),
  getRoleById: vi.fn(),
  getRoleByName: vi.fn(),
  getPermissionsForRole: vi.fn(),
  listTenantRolesAdmin: vi.fn(),
}))

vi.mock('../src/middleware/user-version', () => ({
  bumpUserVersion: vi.fn(),
}))

describe('/api/users/team permissions', () => {
  beforeEach(() => {
    vi.resetModules()
    mockRequirePermission.mockClear()
  })

  it('registers the spec-aligned users:manage guards', async () => {
    await import('../src/routes/users/team')

    expect(mockRequirePermission).toHaveBeenCalledWith('users:manage')
  })

  it('registers the freeze endpoints with users:freeze', async () => {
    await import('../src/routes/users/team')

    expect(mockRequirePermission).toHaveBeenCalledWith('users:freeze')
  })
})
