113 lines
3.0 KiB
TypeScript
113 lines
3.0 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
|
|
const { get, post } = vi.hoisted(() => ({
|
|
get: vi.fn(),
|
|
post: vi.fn(),
|
|
}))
|
|
|
|
vi.mock('@/api/client', () => ({
|
|
apiClient: {
|
|
get,
|
|
post,
|
|
},
|
|
}))
|
|
|
|
import {
|
|
bindUserAuthIdentity,
|
|
getAuthIdentityMigrationReportSummary,
|
|
listAuthIdentityMigrationReports,
|
|
resolveAuthIdentityMigrationReport,
|
|
} from '@/api/admin/users'
|
|
|
|
describe('admin users auth identity migration reports API', () => {
|
|
beforeEach(() => {
|
|
get.mockReset()
|
|
post.mockReset()
|
|
})
|
|
|
|
it('lists migration reports with pagination and report type filter', async () => {
|
|
const response = {
|
|
items: [],
|
|
total: 0,
|
|
page: 2,
|
|
page_size: 10,
|
|
pages: 0,
|
|
}
|
|
get.mockResolvedValue({ data: response })
|
|
|
|
const result = await listAuthIdentityMigrationReports({
|
|
page: 2,
|
|
pageSize: 10,
|
|
reportType: 'oidc_synthetic_email_requires_manual_recovery',
|
|
})
|
|
|
|
expect(get).toHaveBeenCalledWith('/admin/users/auth-identity-migration-reports', {
|
|
params: {
|
|
page: 2,
|
|
page_size: 10,
|
|
report_type: 'oidc_synthetic_email_requires_manual_recovery',
|
|
},
|
|
})
|
|
expect(result).toBe(response)
|
|
})
|
|
|
|
it('loads migration report summary', async () => {
|
|
const response = {
|
|
total: 2,
|
|
open_total: 1,
|
|
resolved_total: 1,
|
|
by_type: {
|
|
oidc_synthetic_email_requires_manual_recovery: 2,
|
|
},
|
|
}
|
|
get.mockResolvedValue({ data: response })
|
|
|
|
const result = await getAuthIdentityMigrationReportSummary()
|
|
|
|
expect(get).toHaveBeenCalledWith('/admin/users/auth-identity-migration-reports/summary')
|
|
expect(result).toBe(response)
|
|
})
|
|
|
|
it('submits report resolution note', async () => {
|
|
const response = {
|
|
id: 7,
|
|
resolution_note: 'resolved by admin',
|
|
}
|
|
post.mockResolvedValue({ data: response })
|
|
|
|
const result = await resolveAuthIdentityMigrationReport(7, 'resolved by admin')
|
|
|
|
expect(post).toHaveBeenCalledWith('/admin/users/auth-identity-migration-reports/7/resolve', {
|
|
resolution_note: 'resolved by admin',
|
|
})
|
|
expect(result).toBe(response)
|
|
})
|
|
|
|
it('binds a canonical auth identity to a user for remediation', async () => {
|
|
const response = {
|
|
identity_id: 11,
|
|
provider_type: 'oidc',
|
|
provider_key: 'https://issuer.example',
|
|
provider_subject: 'subject-123',
|
|
}
|
|
post.mockResolvedValue({ data: response })
|
|
|
|
const result = await bindUserAuthIdentity(42, {
|
|
provider_type: 'oidc',
|
|
provider_key: 'https://issuer.example',
|
|
provider_subject: 'subject-123',
|
|
issuer: 'https://issuer.example',
|
|
metadata: { source: 'migration-report' },
|
|
})
|
|
|
|
expect(post).toHaveBeenCalledWith('/admin/users/42/auth-identities', {
|
|
provider_type: 'oidc',
|
|
provider_key: 'https://issuer.example',
|
|
provider_subject: 'subject-123',
|
|
issuer: 'https://issuer.example',
|
|
metadata: { source: 'migration-report' },
|
|
})
|
|
expect(result).toBe(response)
|
|
})
|
|
})
|