import { beforeEach, describe, expect, it, vi } from 'vitest' import { flushPromises, mount } from '@vue/test-utils' import PendingOAuthCreateAccountForm from '../PendingOAuthCreateAccountForm.vue' const sendVerifyCode = vi.fn() vi.mock('vue-i18n', async () => { const actual = await vi.importActual('vue-i18n') return { ...actual, useI18n: () => ({ t: (key: string) => key }) } }) vi.mock('@/api/auth', async () => { const actual = await vi.importActual('@/api/auth') return { ...actual, sendVerifyCode: (...args: any[]) => sendVerifyCode(...args) } }) describe('PendingOAuthCreateAccountForm', () => { beforeEach(() => { sendVerifyCode.mockReset() }) it('emits trimmed email, password, and verify code on submit', async () => { const wrapper = mount(PendingOAuthCreateAccountForm, { props: { providerName: 'LinuxDo', testIdPrefix: 'linuxdo', initialEmail: 'prefill@example.com', isSubmitting: false } }) await wrapper.get('[data-testid="linuxdo-create-account-email"]').setValue(' user@example.com ') await wrapper.get('[data-testid="linuxdo-create-account-password"]').setValue('secret-123') await wrapper.get('[data-testid="linuxdo-create-account-verify-code"]').setValue(' 246810 ') await wrapper.get('form').trigger('submit.prevent') expect(wrapper.emitted('submit')).toEqual([ [ { email: 'user@example.com', password: 'secret-123', verifyCode: '246810' } ] ]) }) it('sends a verify code for the trimmed email value', async () => { sendVerifyCode.mockResolvedValue({ message: 'sent', countdown: 60 }) const wrapper = mount(PendingOAuthCreateAccountForm, { props: { providerName: 'LinuxDo', testIdPrefix: 'linuxdo', initialEmail: '', isSubmitting: false } }) await wrapper.get('[data-testid="linuxdo-create-account-email"]').setValue(' user@example.com ') await wrapper.get('[data-testid="linuxdo-create-account-send-code"]').trigger('click') await flushPromises() expect(sendVerifyCode).toHaveBeenCalledWith({ email: 'user@example.com' }) }) })