github.mock.ts•1.66 kB
import { vi } from 'vitest'
import { mockGitHubUser, mockAccessToken } from '../fixtures/auth.fixtures'
// Mock Octokit
export const mockOctokit = {
rest: {
users: {
getAuthenticated: vi.fn(),
},
},
}
vi.mock('octokit', () => ({
Octokit: vi.fn(() => mockOctokit),
}))
// Mock GitHub API responses
export function setupGitHubMocks() {
mockOctokit.rest.users.getAuthenticated.mockResolvedValue(mockGitHubUser)
}
export function setupGitHubError() {
mockOctokit.rest.users.getAuthenticated.mockRejectedValue(new Error('GitHub API error'))
}
export function setupGitHubUnauthorized() {
mockOctokit.rest.users.getAuthenticated.mockRejectedValue(new Error('Bad credentials'))
}
export function resetGitHubMocks() {
vi.clearAllMocks()
setupGitHubMocks()
}
// Mock fetch for GitHub OAuth token exchange
export function setupGitHubTokenExchange() {
global.fetch = vi.fn((url: string) => {
if (url.includes('github.com/login/oauth/access_token')) {
return Promise.resolve({
ok: true,
text: () => Promise.resolve(`access_token=${mockAccessToken}&token_type=bearer&scope=read:user`),
} as Response)
}
return Promise.reject(new Error('Unexpected fetch call'))
})
}
export function setupGitHubTokenExchangeError() {
global.fetch = vi.fn((url: string) => {
if (url.includes('github.com/login/oauth/access_token')) {
return Promise.resolve({
ok: false,
status: 400,
text: () => Promise.resolve('error=invalid_grant&error_description=Bad verification code.'),
} as Response)
}
return Promise.reject(new Error('Unexpected fetch call'))
})
}