mirror of
https://github.com/stablyai/orca.git
synced 2026-10-30 08:37:49 +00:00
test(worktrees): cover both emoji branch naming modes (#35745)
This commit is contained in:
+60
-31
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user