Files
orca/tests/e2e/ssh-config-host-picker.spec.ts

77 lines
2.6 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { expect, test } from './helpers/orca-app'
import { waitForSessionReady } from './helpers/store'
import {
addSshHostFormFields,
buildSshConfigBody,
closeOpenDialogs,
configHostRow,
expectSshHostListedInSettings,
makeSshConfigHostPrefix,
openSshConfigHostPicker,
openSshHostSettings,
removeSshTargetsByPrefix,
seedIsolatedSshConfig,
type SeededSshConfigHost
} from './helpers/ssh-config-host-picker'
test.use({ seedTestRepo: false })
// Use unique cleanup prefixes so workers loaded in the same millisecond cannot delete each other’s targets.
const HOST_PREFIX = makeSshConfigHostPrefix()
test.describe('SSH config host picker', () => {
test.beforeEach(async ({ orcaPage }) => {
await waitForSessionReady(orcaPage)
})
test.afterEach(async ({ orcaPage }) => {
await closeOpenDialogs(orcaPage).catch(() => undefined)
await removeSshTargetsByPrefix(orcaPage, HOST_PREFIX).catch(() => undefined)
})
test('P3: select host prefills form; Save persists; N3 identity hint', async ({
electronApp,
orcaPage
}) => {
const prod: SeededSshConfigHost = {
alias: `${HOST_PREFIX}-prod`,
hostname: 'prod.example.test',
user: 'deploy',
port: 2222
}
await seedIsolatedSshConfig(electronApp, buildSshConfigBody([prod]))
const picker = await openSshConfigHostPicker(orcaPage)
await configHostRow(picker, prod).click()
const form = orcaPage.getByRole('dialog', { name: 'Add SSH host' })
await expect(form.getByRole('heading', { name: 'Add SSH host' })).toBeVisible({
timeout: 10_000
})
const fields = addSshHostFormFields(form)
await expect(fields.host).toHaveValue(prod.hostname, { timeout: 15_000 })
await expect(fields.username).toHaveValue(prod.user)
await expect(fields.port).toHaveValue(String(prod.port))
await expect(fields.label).toHaveValue(prod.alias)
await expect(fields.identityFile).toHaveValue('')
// N3: empty Identity file explains multi-key resolve from config.
await expect(
form.getByText(new RegExp(`Left empty on purpose:.*${escapeRegExp(prod.alias)}`, 'i'))
).toBeVisible()
await expect(
orcaPage.getByText(new RegExp(`Filled from ${escapeRegExp(prod.alias)}`, 'i'))
).toBeVisible({ timeout: 5_000 })
await form.getByRole('button', { name: 'Save' }).click()
await expect(form).toBeHidden({ timeout: 10_000 })
// The saved settings card is durable; the success toast is not.
const sshSection = await openSshHostSettings(orcaPage)
await expectSshHostListedInSettings(sshSection, prod)
})
})
function escapeRegExp(value: string): string {
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
}