From db9cfbdb0ac9877cf52765fa47271d999ece5957 Mon Sep 17 00:00:00 2001 From: Brennan Benson <79079362+brennanb2025@users.noreply.github.com> Date: Thu, 29 Oct 2026 13:25:27 -0700 Subject: [PATCH] test(worktrees): cover both emoji branch naming modes (#35745) --- tests/e2e/worktree.spec.ts | 91 +++++++++++++++++++++++++------------- 1 file changed, 60 insertions(+), 31 deletions(-) diff --git a/tests/e2e/worktree.spec.ts b/tests/e2e/worktree.spec.ts index e70b21f05cb..7f5e72c78a1 100644 --- a/tests/e2e/worktree.spec.ts +++ b/tests/e2e/worktree.spec.ts @@ -1,4 +1,5 @@ import { openSidebarWorkspaceComposer } from './helpers/sidebar-project-dialog' +import { isAutoGeneratedCreatureBranchName } from '../../src/shared/branch-name-from-work' // Drive the real Create Workspace composer: old direct store creation missed #1186โ€™s React #31 render crash after #710โ€™s modal replacement. // #1191 removed StartFromField, but console/pageerror checks still reject equivalent render crashes; see tests/e2e/AGENTS.md. @@ -107,43 +108,71 @@ test.describe('Create Workspace', () => { } }) - test('creates an emoji-named worktree with a safe git branch', async ({ orcaPage }) => { - const workspaceName = '๐Ÿš€๐Ÿงชโœจ' + for (const autoRenameBranchFromWork of [true, false]) { + test(`creates an emoji-named worktree with automatic branch naming ${autoRenameBranchFromWork ? 'on' : 'off'}`, async ({ + orcaPage + }) => { + const workspaceName = autoRenameBranchFromWork ? 'โœจ๐Ÿš€๐Ÿงช' : '๐Ÿš€๐Ÿงชโœจ' + const previousSetting = await orcaPage.evaluate( + () => window.__store!.getState().settings!.autoRenameBranchFromWork + ) - try { - await openSidebarWorkspaceComposer(orcaPage) + try { + await orcaPage.evaluate(async (enabled) => { + await window + .__store!.getState() + .updateSettingsOrThrow({ autoRenameBranchFromWork: enabled }) + }, autoRenameBranchFromWork) + await openSidebarWorkspaceComposer(orcaPage) - const dialog = orcaPage.getByRole('dialog', { name: /Create (Workspace|Worktree)/i }) - await expect(dialog).toBeVisible() - await expect(dialog.locator('[data-workspace-name-input="true"]')).toBeVisible() + const dialog = orcaPage.getByRole('dialog', { name: /Create (Workspace|Worktree)/i }) + await expect(dialog).toBeVisible() + await expect(dialog.locator('[data-workspace-name-input="true"]')).toBeVisible() - const nameInput = dialog.getByPlaceholder(/Type a name/i) - await nameInput.fill(workspaceName) + const nameInput = dialog.getByPlaceholder(/Type a name/i) + await nameInput.fill(workspaceName) - const createButton = dialog.getByRole('button', { name: /Create (Workspace|Worktree)/i }) - await expect(createButton).toBeEnabled() - await createButton.click() + const createButton = dialog.getByRole('button', { name: /Create (Workspace|Worktree)/i }) + await expect(createButton).toBeEnabled() + await createButton.click() - await expect(dialog).toBeHidden({ timeout: 15_000 }) - await expect(orcaPage.getByRole('option', { name: new RegExp(workspaceName) })).toBeVisible({ - timeout: 10_000 - }) + await expect(dialog).toBeHidden({ timeout: 15_000 }) + await expect(orcaPage.getByRole('option', { name: new RegExp(workspaceName) })).toBeVisible( + { + timeout: 10_000 + } + ) - const branch = await orcaPage.evaluate((displayName) => { - const worktrees = Object.values(window.__store!.getState().worktreesByRepo).flat() - return worktrees.find((worktree) => worktree.displayName === displayName)?.branch ?? null - }, workspaceName) - expect(branch).toBe('refs/heads/rocket-test-tube-sparkles') - } finally { - await orcaPage - .evaluate(() => { - window.__store?.getState().closeModal() - }) - .catch(() => { - /* page may already be torn down */ - }) - } - }) + const worktree = await orcaPage.evaluate((displayName) => { + const worktrees = Object.values(window.__store!.getState().worktreesByRepo).flat() + const created = worktrees.find((worktree) => worktree.displayName === displayName) + return { branch: created?.branch, displayNameMode: created?.displayNameMode } + }, workspaceName) + expect(worktree.displayNameMode).toBe('fixed') + if (autoRenameBranchFromWork) { + expect(worktree.branch).toMatch(/^refs\/heads\//) + expect( + isAutoGeneratedCreatureBranchName(worktree.branch?.replace(/^refs\/heads\//, '') ?? '') + ).toBe(true) + } else { + expect(worktree.branch).toBe('refs/heads/rocket-test-tube-sparkles') + } + } finally { + await orcaPage + .evaluate(() => { + window.__store?.getState().closeModal() + }) + .catch(() => { + /* page may already be torn down */ + }) + await orcaPage.evaluate(async (enabled) => { + await window + .__store!.getState() + .updateSettingsOrThrow({ autoRenameBranchFromWork: enabled }) + }, previousSetting) + } + }) + } test('enters the Korean flag with the flag_kr shortcode suggestion', async ({ orcaPage }) => { try {