Files
sub2api/frontend/src/components/account/__tests__/OAuthAuthorizationFlow.spec.ts
T
2026-04-30 14:04:02 +08:00

57 lines
1.5 KiB
TypeScript

import { describe, expect, it, vi } from 'vitest'
import { nextTick } from 'vue'
import { mount } from '@vue/test-utils'
vi.mock('@/stores/app', () => ({
useAppStore: () => ({
showSuccess: vi.fn(),
showError: vi.fn()
})
}))
vi.mock('@/composables/useClipboard', () => ({
useClipboard: () => ({
copied: { value: false },
copyToClipboard: vi.fn()
})
}))
vi.mock('vue-i18n', async () => {
const actual = await vi.importActual<typeof import('vue-i18n')>('vue-i18n')
return {
...actual,
useI18n: () => ({
t: (key: string) => key
})
}
})
import OAuthAuthorizationFlow from '../OAuthAuthorizationFlow.vue'
describe('OAuthAuthorizationFlow', () => {
it('extracts code, state, and callback metadata from a full Kiro callback URL', async () => {
const wrapper = mount(OAuthAuthorizationFlow, {
props: {
addMethod: 'oauth',
platform: 'kiro',
authUrl: 'https://example.com/authorize',
sessionId: 'session-1'
},
global: {
stubs: {
Icon: true
}
}
})
const textarea = wrapper.get('textarea')
await textarea.setValue('http://localhost:49153/oauth/callback?code=abc123&state=state456&login_option=github')
await nextTick()
expect((textarea.element as HTMLTextAreaElement).value).toBe('abc123')
expect((wrapper.vm as any).oauthState).toBe('state456')
expect((wrapper.vm as any).oauthCallbackPath).toBe('/oauth/callback')
expect((wrapper.vm as any).oauthLoginOption).toBe('github')
})
})