Split onboarding folder startup repo test

This commit is contained in:
brennanb2025
2026-05-17 21:23:18 -07:00
parent eb2f436977
commit 5ca62f5a54
2 changed files with 75 additions and 75 deletions
@@ -0,0 +1,75 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
import { getDefaultOnboardingState, getDefaultSettings } from '../../../../shared/constants'
import { createTestStore, makeWorktree } from './store-test-helpers'
const worktreeActivation = vi.hoisted(() => ({
activateAndRevealWorktree: vi.fn()
}))
vi.mock('../../lib/worktree-activation', () => ({
activateAndRevealWorktree: worktreeActivation.activateAndRevealWorktree
}))
const reposAdd = vi.fn()
const worktreesList = vi.fn()
const onboardingGet = vi.fn()
beforeEach(() => {
reposAdd.mockReset()
worktreesList.mockReset()
onboardingGet.mockReset()
worktreeActivation.activateAndRevealWorktree.mockReset()
vi.stubGlobal('window', {
api: {
repos: { add: reposAdd },
worktrees: { list: worktreesList },
onboarding: { get: onboardingGet }
}
})
})
describe('repo slice skipped-onboarding folder startup', () => {
it('only seeds the onboarding default agent for the first dismissed-onboarding folder', async () => {
reposAdd
.mockResolvedValueOnce({
repo: { id: 'folder-1', path: '/first', displayName: 'First', addedAt: 1 }
})
.mockResolvedValueOnce({
repo: { id: 'folder-2', path: '/second', displayName: 'Second', addedAt: 2 }
})
worktreesList.mockImplementation(({ repoId }: { repoId: string }) => [
makeWorktree({ id: `${repoId}::/folder`, repoId })
])
onboardingGet.mockResolvedValue({ ...getDefaultOnboardingState(), outcome: 'dismissed' })
const store = createTestStore()
store.setState({
settings: {
...getDefaultSettings('/tmp/orca-workspaces'),
defaultTuiAgent: 'codex'
}
})
await store.getState().addNonGitFolder('/first')
await store.getState().addNonGitFolder('/second')
expect(worktreeActivation.activateAndRevealWorktree).toHaveBeenNthCalledWith(
1,
'folder-1::/folder',
{
startup: {
command: 'codex',
telemetry: {
agent_kind: 'codex',
launch_source: 'onboarding',
request_kind: 'new'
}
}
}
)
expect(worktreeActivation.activateAndRevealWorktree).toHaveBeenNthCalledWith(
2,
'folder-2::/folder',
undefined
)
})
})
@@ -2,21 +2,12 @@ import { describe, expect, it, vi, beforeEach } from 'vitest'
import { createTestStore, makeWorktree } from './store-test-helpers'
import { workItemsCacheKey } from './github'
import type { Repo } from '../../../../shared/types'
import { getDefaultOnboardingState, getDefaultSettings } from '../../../../shared/constants'
import {
createCompatibleRuntimeStatusResponseIfNeeded,
type RuntimeEnvironmentCallRequest
} from '../../runtime/runtime-compatibility-test-fixture'
import { clearRuntimeCompatibilityCacheForTests } from '../../runtime/runtime-rpc-client'
const worktreeActivation = vi.hoisted(() => ({
activateAndRevealWorktree: vi.fn()
}))
vi.mock('../../lib/worktree-activation', () => ({
activateAndRevealWorktree: worktreeActivation.activateAndRevealWorktree
}))
const localRepo: Repo = {
id: 'local-repo',
path: '/local',
@@ -39,9 +30,6 @@ const reposPickFolder = vi.fn()
const reposRemove = vi.fn()
const reposUpdate = vi.fn()
const reposReorder = vi.fn()
const worktreesList = vi.fn()
const onboardingGet = vi.fn()
const onboardingUpdate = vi.fn()
const ptyKill = vi.fn()
const runtimeEnvironmentCall = vi.fn()
const runtimeEnvironmentTransportCall = vi.fn()
@@ -54,10 +42,6 @@ beforeEach(() => {
reposRemove.mockReset()
reposUpdate.mockReset()
reposReorder.mockReset()
worktreesList.mockReset()
onboardingGet.mockReset()
onboardingUpdate.mockReset()
worktreeActivation.activateAndRevealWorktree.mockReset()
ptyKill.mockReset()
runtimeEnvironmentCall.mockReset()
runtimeEnvironmentTransportCall.mockReset()
@@ -74,13 +58,6 @@ beforeEach(() => {
update: reposUpdate,
reorder: reposReorder
},
worktrees: {
list: worktreesList
},
onboarding: {
get: onboardingGet,
update: onboardingUpdate
},
pty: { kill: ptyKill },
runtimeEnvironments: { call: runtimeEnvironmentTransportCall }
}
@@ -191,58 +168,6 @@ describe('repo slice runtime routing', () => {
expect(runtimeEnvironmentCall).not.toHaveBeenCalled()
})
it('only seeds the onboarding default agent for the first dismissed-onboarding folder', async () => {
const firstFolderRepo = {
...localRepo,
id: 'folder-1',
path: '/first',
displayName: 'First'
}
const secondFolderRepo = {
...localRepo,
id: 'folder-2',
path: '/second',
displayName: 'Second'
}
reposAdd
.mockResolvedValueOnce({ repo: firstFolderRepo })
.mockResolvedValueOnce({ repo: secondFolderRepo })
worktreesList.mockImplementation(({ repoId }: { repoId: string }) => [
makeWorktree({ id: `${repoId}::/folder`, repoId })
])
onboardingGet.mockResolvedValue({ ...getDefaultOnboardingState(), outcome: 'dismissed' })
const store = createTestStore()
store.setState({
settings: {
...getDefaultSettings('/tmp/orca-workspaces'),
defaultTuiAgent: 'codex'
}
})
await store.getState().addNonGitFolder('/first')
await store.getState().addNonGitFolder('/second')
expect(worktreeActivation.activateAndRevealWorktree).toHaveBeenNthCalledWith(
1,
'folder-1::/folder',
{
startup: {
command: 'codex',
telemetry: {
agent_kind: 'codex',
launch_source: 'onboarding',
request_kind: 'new'
}
}
}
)
expect(worktreeActivation.activateAndRevealWorktree).toHaveBeenNthCalledWith(
2,
'folder-2::/folder',
undefined
)
})
it('removes repos through the active remote runtime environment', async () => {
runtimeEnvironmentCall.mockResolvedValue({
id: 'rpc-3',