From 87be6b29323728f3531fc1f0714749cf8d7acd16 Mon Sep 17 00:00:00 2001 From: OrcaWin <293788423+OrcaWin@users.noreply.github.com> Date: Thu, 30 Jul 2026 00:35:55 -0700 Subject: [PATCH] test(workspace): seed Jira source context --- ...rkspace-linked-item-project-switch.spec.ts | 45 ++++++++++++++++--- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/tests/e2e/new-workspace-linked-item-project-switch.spec.ts b/tests/e2e/new-workspace-linked-item-project-switch.spec.ts index f8308e62a17..9970f3696f0 100644 --- a/tests/e2e/new-workspace-linked-item-project-switch.spec.ts +++ b/tests/e2e/new-workspace-linked-item-project-switch.spec.ts @@ -20,6 +20,7 @@ import type { Page } from '@stablyai/playwright-test' import { test, expect } from './helpers/orca-app' import { waitForActiveWorktree, waitForSessionReady } from './helpers/store' import type { LinkedWorkItemSummary } from '../../src/renderer/src/lib/new-workspace' +import type { TaskSourceContext } from '../../src/shared/task-source-context' const SECOND_PROJECT_NAME = 'linked-item-second-project' @@ -53,20 +54,52 @@ async function addSecondProject(page: Page, repoPath: string): Promise { async function openComposerWithLinkedWorkItem( page: Page, linkedWorkItem: LinkedWorkItemSummary, - prefilledName: string + prefilledName: string, + taskSourceContext: TaskSourceContext | null = null ): Promise { await page.evaluate( - ({ linkedWorkItem, prefilledName }) => { + ({ linkedWorkItem, prefilledName, taskSourceContext }) => { const store = window.__store if (!store) { throw new Error('window.__store is not available') } - store.getState().openModal('new-workspace-composer', { linkedWorkItem, prefilledName }) + store.getState().openModal('new-workspace-composer', { + linkedWorkItem, + prefilledName, + taskSourceContext + }) }, - { linkedWorkItem, prefilledName } + { linkedWorkItem, prefilledName, taskSourceContext } ) } +async function getJiraSourceContext(page: Page): Promise { + return page.evaluate(() => { + const state = window.__store?.getState() + const activeWorktreeId = state?.activeWorktreeId + const setup = state?.projectHostSetups.find((candidate) => + state.worktreesByRepo[candidate.repoId]?.some((worktree) => worktree.id === activeWorktreeId) + ) + if (!setup) { + throw new Error('Active project host setup is unavailable') + } + return { + kind: 'task-source', + provider: 'jira', + projectId: setup.projectId, + hostId: setup.hostId, + projectHostSetupId: setup.id, + repoId: setup.repoId, + providerIdentity: { + provider: 'jira', + siteId: 'e2e-jira-site', + siteUrl: 'https://example.atlassian.net', + projectKey: 'RDG' + } + } + }) +} + async function switchComposerProject(page: Page, projectName: string): Promise { const composer = page.getByRole('dialog') const combobox = composer.getByRole('combobox', { name: 'Project' }) @@ -94,6 +127,7 @@ test.describe('New workspace composer linked item across project switches', () = }) test('keeps a Jira issue linked when the project changes', async ({ orcaPage }) => { + const jiraSourceContext = await getJiraSourceContext(orcaPage) await openComposerWithLinkedWorkItem( orcaPage, { @@ -104,7 +138,8 @@ test.describe('New workspace composer linked item across project switches', () = url: 'https://example.atlassian.net/browse/RDG-344', jiraIdentifier: 'RDG-344' }, - 'rdg-344-nuxtjs-nextjs' + 'rdg-344-nuxtjs-nextjs', + jiraSourceContext ) const composer = orcaPage.getByRole('dialog')