From 5ca62f5a546d71c6e4fcbfc50c8fd29f6bfa6b40 Mon Sep 17 00:00:00 2001 From: brennanb2025 Date: Sun, 17 May 2026 21:16:40 -0700 Subject: [PATCH] Split onboarding folder startup repo test --- .../repos-onboarding-folder-startup.test.ts | 75 +++++++++++++++++++ src/renderer/src/store/slices/repos.test.ts | 75 ------------------- 2 files changed, 75 insertions(+), 75 deletions(-) create mode 100644 src/renderer/src/store/slices/repos-onboarding-folder-startup.test.ts diff --git a/src/renderer/src/store/slices/repos-onboarding-folder-startup.test.ts b/src/renderer/src/store/slices/repos-onboarding-folder-startup.test.ts new file mode 100644 index 00000000000..0634a8f951c --- /dev/null +++ b/src/renderer/src/store/slices/repos-onboarding-folder-startup.test.ts @@ -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 + ) + }) +}) diff --git a/src/renderer/src/store/slices/repos.test.ts b/src/renderer/src/store/slices/repos.test.ts index 90eabcea062..d47ec94707c 100644 --- a/src/renderer/src/store/slices/repos.test.ts +++ b/src/renderer/src/store/slices/repos.test.ts @@ -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',