tests/builder-introduction-request.unit.test.ts
Rama main · réplica de lectura del repositorio original.
// @vitest-environment happy-dom
import { beforeEach, expect, it, vi } from 'vitest'
import { createApp, defineComponent, h, nextTick } from 'vue'
import BuilderIntroduction from '../src/components/dashboard/BuilderIntroduction.vue'
const mocks = vi.hoisted(() => ({ api: vi.fn(), update: vi.fn(), push: vi.fn() }))
vi.mock('../src/services/capgoApi', () => ({ invokeCapgoApi: mocks.api }))
vi.mock('../src/stores/organization', () => ({ useOrganizationStore: () => ({ updateAppOnboarding: mocks.update }) }))
vi.mock('vue-i18n', () => ({ useI18n: () => ({ t: (key: string) => key }) }))
vi.mock('vue-router', () => ({ useRouter: () => ({ push: mocks.push }) }))
vi.mock('../src/components/dashboard/BuilderPresentationModal.vue', () => ({ default: defineComponent({
emits: ['start'],
setup: (_props, { emit }) => () => h('button', { onClick: () => emit('start') }, 'Start'),
}) }))
beforeEach(() => vi.resetAllMocks())
it('activates the inline checklist without navigating away from Builds', async () => {
const onboarding = { setup: { todo_list_version: 4, paths: ['builder'], selected_path: 'builder' } }
mocks.api.mockResolvedValue({ data: { onboarding }, error: null })
const host = document.createElement('div')
const app = createApp(BuilderIntroduction, { appId: 'com.example.builder' })
app.mount(host)
host.querySelector('button')!.click()
await vi.waitFor(() => expect(mocks.update).toHaveBeenCalledExactlyOnceWith('com.example.builder', onboarding))
expect(mocks.push).not.toHaveBeenCalled()
app.unmount()
})
it('retains a successful activation after leaving the page without navigating back', async () => {
let resolveRequest!: (value: unknown) => void
mocks.api.mockImplementation(() => new Promise(resolve => resolveRequest = resolve))
const host = document.createElement('div')
const app = createApp(BuilderIntroduction, { appId: 'com.example.builder' })
app.mount(host)
host.querySelector('button')!.click()
expect(mocks.api).toHaveBeenCalledExactlyOnceWith('app/com.example.builder/onboarding/builder', { method: 'POST' })
app.unmount()
const onboarding = { setup: { todo_list_version: 4, selected_path: 'builder' } }
resolveRequest({ data: { onboarding }, error: null })
await nextTick()
expect(mocks.update).toHaveBeenCalledExactlyOnceWith('com.example.builder', onboarding)
expect(mocks.push).not.toHaveBeenCalled()
})