diff --git a/packages/quickstart/__tests__/e2e/chat-launch.e2e.ts b/packages/quickstart/__tests__/e2e/chat-launch.e2e.ts index 2c7d862..8fc3f14 100644 --- a/packages/quickstart/__tests__/e2e/chat-launch.e2e.ts +++ b/packages/quickstart/__tests__/e2e/chat-launch.e2e.ts @@ -5,7 +5,7 @@ import { navigateToOnboarding, navigateToPlugins, CHAT_PROMPT_FILE, -} from './testing-framework/index.js'; +} from '@spotify-confidence/testing/e2e'; describe('when the user starts chat after onboarding', () => { it('includes code changes and report file in the prompt', async () => { diff --git a/packages/quickstart/__tests__/e2e/done-migration-hint.e2e.ts b/packages/quickstart/__tests__/e2e/done-migration-hint.e2e.ts index 8c258c3..55d4685 100644 --- a/packages/quickstart/__tests__/e2e/done-migration-hint.e2e.ts +++ b/packages/quickstart/__tests__/e2e/done-migration-hint.e2e.ts @@ -1,4 +1,4 @@ -import { createSession, navigateToOnboarding } from './testing-framework/index.js'; +import { createSession, navigateToOnboarding } from '@spotify-confidence/testing/e2e'; describe('Done screen migration hint', () => { it('shows /migrate-statsig hint when competitor is detected', async () => { diff --git a/packages/quickstart/__tests__/e2e/download-fallback.e2e.ts b/packages/quickstart/__tests__/e2e/download-fallback.e2e.ts index 11fa416..769a67f 100644 --- a/packages/quickstart/__tests__/e2e/download-fallback.e2e.ts +++ b/packages/quickstart/__tests__/e2e/download-fallback.e2e.ts @@ -3,7 +3,7 @@ import { navigateToPlugins, selectIdeAndOnboard, readInvocation, -} from './testing-framework/index.js'; +} from '@spotify-confidence/testing/e2e'; describe('when CLI plugin install fails', () => { it('falls back to download and references skills by file path in the prompt', async () => { diff --git a/packages/quickstart/__tests__/e2e/empty-project.e2e.ts b/packages/quickstart/__tests__/e2e/empty-project.e2e.ts index 33ff99d..b75bb26 100644 --- a/packages/quickstart/__tests__/e2e/empty-project.e2e.ts +++ b/packages/quickstart/__tests__/e2e/empty-project.e2e.ts @@ -1,4 +1,4 @@ -import { createSession } from './testing-framework/index.js'; +import { createSession } from '@spotify-confidence/testing/e2e'; describe('when the project is empty', () => { it('shows "Select framework" instead of "Start setup" on the Welcome screen', async () => { diff --git a/packages/quickstart/__tests__/e2e/global-setup.ts b/packages/quickstart/__tests__/e2e/global-setup.ts index db8cb74..c0793d3 100644 --- a/packages/quickstart/__tests__/e2e/global-setup.ts +++ b/packages/quickstart/__tests__/e2e/global-setup.ts @@ -1,8 +1,11 @@ import { mkdtempSync, rmSync } from 'node:fs'; -import { join } from 'node:path'; +import { join, resolve } from 'node:path'; import { tmpdir } from 'node:os'; -import { startMockServer, type MockServer } from './testing-framework/mocks/server.js'; -import { createMockBinDir } from './testing-framework/mocks/binaries/index.js'; +import { + startMockServer, + type MockServer, + createMockBinDir, +} from '@spotify-confidence/testing/e2e'; let mockServer: MockServer; let tempBase: string; @@ -15,6 +18,7 @@ export async function setup() { Object.assign(process.env, mockServer.envVars); process.env.E2E_MOCK_BIN_DIR = mockBinDir; + process.env.E2E_CLI_PATH = resolve(import.meta.dirname, '../../dist/bin/cli.js'); } export async function teardown() { diff --git a/packages/quickstart/__tests__/e2e/goal-flag.e2e.ts b/packages/quickstart/__tests__/e2e/goal-flag.e2e.ts index 53dce23..a6d4949 100644 --- a/packages/quickstart/__tests__/e2e/goal-flag.e2e.ts +++ b/packages/quickstart/__tests__/e2e/goal-flag.e2e.ts @@ -1,4 +1,8 @@ -import { createSession, navigatePastWelcome, navigatePastAuth } from './testing-framework/index.js'; +import { + createSession, + navigatePastWelcome, + navigatePastAuth, +} from '@spotify-confidence/testing/e2e'; describe('--features flag', () => { it('skips feature selection screen when --features is provided', async () => { diff --git a/packages/quickstart/__tests__/e2e/happy-path.e2e.ts b/packages/quickstart/__tests__/e2e/happy-path.e2e.ts index 68d5341..4a1750b 100644 --- a/packages/quickstart/__tests__/e2e/happy-path.e2e.ts +++ b/packages/quickstart/__tests__/e2e/happy-path.e2e.ts @@ -1,4 +1,4 @@ -import { createSession, simulateAuthCallback } from './testing-framework/index.js'; +import { createSession, simulateAuthCallback } from '@spotify-confidence/testing/e2e'; describe('happy-path flow', () => { it('navigates Welcome → SystemCheck → SelectGoal → Authenticate → InstallPlugins → ConnectTools → OnboardProject → Done', async () => { diff --git a/packages/quickstart/__tests__/e2e/onboarding-invocation.e2e.ts b/packages/quickstart/__tests__/e2e/onboarding-invocation.e2e.ts index a268e61..5168fa2 100644 --- a/packages/quickstart/__tests__/e2e/onboarding-invocation.e2e.ts +++ b/packages/quickstart/__tests__/e2e/onboarding-invocation.e2e.ts @@ -3,7 +3,7 @@ import { navigateToPlugins, selectIdeAndOnboard, readInvocation, -} from './testing-framework/index.js'; +} from '@spotify-confidence/testing/e2e'; const IDE_CASES = [ { diff --git a/packages/quickstart/__tests__/e2e/saved-ide.e2e.ts b/packages/quickstart/__tests__/e2e/saved-ide.e2e.ts index cc17f0e..f4dff5e 100644 --- a/packages/quickstart/__tests__/e2e/saved-ide.e2e.ts +++ b/packages/quickstart/__tests__/e2e/saved-ide.e2e.ts @@ -1,4 +1,4 @@ -import { createSession, navigatePastWelcome, buildTestJwt } from './testing-framework/index.js'; +import { createSession, navigatePastWelcome, buildTestJwt } from '@spotify-confidence/testing/e2e'; describe('when IDE is saved in config from a previous run', () => { it('auto-selects the saved IDE and skips the selection step', async () => { @@ -9,17 +9,17 @@ describe('when IDE is saved in config from a previous run', () => { await navigatePastWelcome(session); - // Auth — use existing account (token was pre-seeded) - await session.waitForText('Use existing account'); - await session.press('Enter'); - await session.waitForText('Authenticated'); - // SelectGoal await session.waitForText("Select the features you'd like to set up"); session.checkpoint(); await session.press('Space'); await session.press('Enter'); + // Auth — use existing account (token was pre-seeded) + await session.waitForText('Use existing account'); + await session.press('Enter'); + await session.waitForText('Authenticated'); + // InstallPlugins — should auto-select cursor without showing the IDE picker await session.waitForText('Plugin set up successfully'); session.checkpoint(); diff --git a/packages/quickstart/__tests__/e2e/select-goal.e2e.ts b/packages/quickstart/__tests__/e2e/select-goal.e2e.ts index e0a7b0c..4693813 100644 --- a/packages/quickstart/__tests__/e2e/select-goal.e2e.ts +++ b/packages/quickstart/__tests__/e2e/select-goal.e2e.ts @@ -1,4 +1,4 @@ -import { createSession, navigateToGoalSelection } from './testing-framework/index.js'; +import { createSession, navigateToGoalSelection } from '@spotify-confidence/testing/e2e'; describe('SelectGoal screen', () => { it('shows goal options for a browser framework', async () => { diff --git a/packages/quickstart/__tests__/e2e/skip-onboarding.e2e.ts b/packages/quickstart/__tests__/e2e/skip-onboarding.e2e.ts index 1ac1188..8f0db5b 100644 --- a/packages/quickstart/__tests__/e2e/skip-onboarding.e2e.ts +++ b/packages/quickstart/__tests__/e2e/skip-onboarding.e2e.ts @@ -1,4 +1,4 @@ -import { createSession, navigateToOnboarding } from './testing-framework/index.js'; +import { createSession, navigateToOnboarding } from '@spotify-confidence/testing/e2e'; describe('when the user skips onboarding', () => { it('shows Done screen without report file or code changes', async () => { diff --git a/packages/quickstart/__tests__/e2e/skip-tools.e2e.ts b/packages/quickstart/__tests__/e2e/skip-tools.e2e.ts index eea9879..2d08fce 100644 --- a/packages/quickstart/__tests__/e2e/skip-tools.e2e.ts +++ b/packages/quickstart/__tests__/e2e/skip-tools.e2e.ts @@ -1,4 +1,4 @@ -import { createSession, navigateToConnectTools } from './testing-framework/index.js'; +import { createSession, navigateToConnectTools } from '@spotify-confidence/testing/e2e'; describe('when the user skips connecting tools', () => { it('shows skip message and proceeds to onboarding', async () => { diff --git a/packages/quickstart/__tests__/e2e/stale-auth.e2e.ts b/packages/quickstart/__tests__/e2e/stale-auth.e2e.ts index e0845cd..cc9eb6c 100644 --- a/packages/quickstart/__tests__/e2e/stale-auth.e2e.ts +++ b/packages/quickstart/__tests__/e2e/stale-auth.e2e.ts @@ -4,7 +4,7 @@ import { navigatePastGoalSelection, simulateAuthCallback, buildTestJwt, -} from './testing-framework/index.js'; +} from '@spotify-confidence/testing/e2e'; function buildExpiredJwt(): string { return buildTestJwt({ exp: Math.floor(Date.now() / 1000) - 3600 }); diff --git a/packages/quickstart/__tests__/e2e/stale-mcp-auth.e2e.ts b/packages/quickstart/__tests__/e2e/stale-mcp-auth.e2e.ts index 23935ec..7c09ef8 100644 --- a/packages/quickstart/__tests__/e2e/stale-mcp-auth.e2e.ts +++ b/packages/quickstart/__tests__/e2e/stale-mcp-auth.e2e.ts @@ -6,7 +6,7 @@ import { navigatePastGoalSelection, navigatePastAuth, buildTestJwt, -} from './testing-framework/index.js'; +} from '@spotify-confidence/testing/e2e'; function buildExpiredJwt(): string { return buildTestJwt({ exp: Math.floor(Date.now() / 1000) - 3600 }); diff --git a/packages/quickstart/__tests__/e2e/system-check-failure.e2e.ts b/packages/quickstart/__tests__/e2e/system-check-failure.e2e.ts index 9bb8810..33b9962 100644 --- a/packages/quickstart/__tests__/e2e/system-check-failure.e2e.ts +++ b/packages/quickstart/__tests__/e2e/system-check-failure.e2e.ts @@ -1,6 +1,6 @@ import { dirname } from 'node:path'; import { isWindows } from '@spotify-confidence/testing/env'; -import { createSession } from './testing-framework/index.js'; +import { createSession } from '@spotify-confidence/testing/e2e'; describe('when system check fails', () => { it('shows error when git is missing', async () => { diff --git a/packages/quickstart/__tests__/e2e/testing-framework/terminal/index.ts b/packages/quickstart/__tests__/e2e/testing-framework/terminal/index.ts deleted file mode 100644 index e40791f..0000000 --- a/packages/quickstart/__tests__/e2e/testing-framework/terminal/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { TerminalSession } from './session.js'; -export type { KeyName, Modifiers } from '@spotify-confidence/testing/terminal'; diff --git a/packages/quickstart/__tests__/e2e/welcome-navigation.e2e.ts b/packages/quickstart/__tests__/e2e/welcome-navigation.e2e.ts index 55dcb8f..04a73d6 100644 --- a/packages/quickstart/__tests__/e2e/welcome-navigation.e2e.ts +++ b/packages/quickstart/__tests__/e2e/welcome-navigation.e2e.ts @@ -1,4 +1,4 @@ -import { createSession } from './testing-framework/index.js'; +import { createSession } from '@spotify-confidence/testing/e2e'; describe('welcome screen navigation', () => { it('navigates to About screen', async () => { diff --git a/packages/quickstart/package.json b/packages/quickstart/package.json index cbd1bac..68f2c91 100644 --- a/packages/quickstart/package.json +++ b/packages/quickstart/package.json @@ -46,7 +46,6 @@ "eslint": "^10.11.0", "ink-testing-library": "^4.0.0", "msw": "^2.15.0", - "node-pty": "1.2.0-beta.14", "prettier": "^3.9.9", "tsdown": "^0.22.14", "tsx": "^4.23.15", diff --git a/packages/testing/package.json b/packages/testing/package.json index 2408c5e..32f5645 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -10,11 +10,13 @@ "./env": "./src/env/index.ts", "./terminal": "./src/terminal/index.ts", "./msw": "./src/msw/setup.ts", - "./msw/localstorage-fake": "./src/msw/localstorage-fake.mjs" + "./msw/localstorage-fake": "./src/msw/localstorage-fake.mjs", + "./e2e": "./src/e2e/index.ts" }, "dependencies": { "@spotify-confidence/shared-kernel": "workspace:*", - "msw": "^2.15.0" + "msw": "^2.15.0", + "node-pty": "1.2.0-beta.14" }, "scripts": { "typecheck": "tsc --noEmit" diff --git a/packages/quickstart/__tests__/e2e/testing-framework/env.ts b/packages/testing/src/e2e/env.ts similarity index 93% rename from packages/quickstart/__tests__/e2e/testing-framework/env.ts rename to packages/testing/src/e2e/env.ts index a38144b..81f9a87 100644 --- a/packages/quickstart/__tests__/e2e/testing-framework/env.ts +++ b/packages/testing/src/e2e/env.ts @@ -1,4 +1,4 @@ -export { AUTH_CALLBACK_PORT } from '@spotify-confidence/core'; +export const AUTH_CALLBACK_PORT = 8084; /** * Baseline environment variables injected into every e2e terminal session. diff --git a/packages/quickstart/__tests__/e2e/testing-framework/index.ts b/packages/testing/src/e2e/index.ts similarity index 74% rename from packages/quickstart/__tests__/e2e/testing-framework/index.ts rename to packages/testing/src/e2e/index.ts index 1acf892..fda3962 100644 --- a/packages/quickstart/__tests__/e2e/testing-framework/index.ts +++ b/packages/testing/src/e2e/index.ts @@ -1,6 +1,13 @@ export { TerminalSession } from './terminal/index.js'; export { createSession } from './session-factory.js'; -export { buildTestJwt, CHAT_PROMPT_FILE, ONBOARDING_INVOCATION_FILE } from './mocks/index.js'; +export { + startMockServer, + type MockServer, + createMockBinDir, + buildTestJwt, + CHAT_PROMPT_FILE, + ONBOARDING_INVOCATION_FILE, +} from './mocks/index.js'; export { AUTH_CALLBACK_PORT } from './env.js'; export { simulateAuthCallback, readInvocation, type Invocation } from './utils.js'; export { diff --git a/packages/quickstart/__tests__/e2e/testing-framework/mocks/binaries/claude.ts b/packages/testing/src/e2e/mocks/binaries/claude.ts similarity index 100% rename from packages/quickstart/__tests__/e2e/testing-framework/mocks/binaries/claude.ts rename to packages/testing/src/e2e/mocks/binaries/claude.ts diff --git a/packages/quickstart/__tests__/e2e/testing-framework/mocks/binaries/codex.ts b/packages/testing/src/e2e/mocks/binaries/codex.ts similarity index 100% rename from packages/quickstart/__tests__/e2e/testing-framework/mocks/binaries/codex.ts rename to packages/testing/src/e2e/mocks/binaries/codex.ts diff --git a/packages/quickstart/__tests__/e2e/testing-framework/mocks/binaries/cursor.ts b/packages/testing/src/e2e/mocks/binaries/cursor.ts similarity index 100% rename from packages/quickstart/__tests__/e2e/testing-framework/mocks/binaries/cursor.ts rename to packages/testing/src/e2e/mocks/binaries/cursor.ts diff --git a/packages/quickstart/__tests__/e2e/testing-framework/mocks/binaries/fs.ts b/packages/testing/src/e2e/mocks/binaries/fs.ts similarity index 94% rename from packages/quickstart/__tests__/e2e/testing-framework/mocks/binaries/fs.ts rename to packages/testing/src/e2e/mocks/binaries/fs.ts index a0da9c9..253ad09 100644 --- a/packages/quickstart/__tests__/e2e/testing-framework/mocks/binaries/fs.ts +++ b/packages/testing/src/e2e/mocks/binaries/fs.ts @@ -1,6 +1,6 @@ import { writeFileSync, chmodSync } from 'node:fs'; import { join } from 'node:path'; -import { isWindows } from '@spotify-confidence/testing/env'; +import { isWindows } from '../../../env/index.js'; export const writeMockBinary = isWindows ? writeWindowsBinary : writeUnixBinary; diff --git a/packages/quickstart/__tests__/e2e/testing-framework/mocks/binaries/index.ts b/packages/testing/src/e2e/mocks/binaries/index.ts similarity index 100% rename from packages/quickstart/__tests__/e2e/testing-framework/mocks/binaries/index.ts rename to packages/testing/src/e2e/mocks/binaries/index.ts diff --git a/packages/quickstart/__tests__/e2e/testing-framework/mocks/binaries/streaming.ts b/packages/testing/src/e2e/mocks/binaries/streaming.ts similarity index 100% rename from packages/quickstart/__tests__/e2e/testing-framework/mocks/binaries/streaming.ts rename to packages/testing/src/e2e/mocks/binaries/streaming.ts diff --git a/packages/quickstart/__tests__/e2e/testing-framework/mocks/index.ts b/packages/testing/src/e2e/mocks/index.ts similarity index 72% rename from packages/quickstart/__tests__/e2e/testing-framework/mocks/index.ts rename to packages/testing/src/e2e/mocks/index.ts index 686ff20..4fee9b8 100644 --- a/packages/quickstart/__tests__/e2e/testing-framework/mocks/index.ts +++ b/packages/testing/src/e2e/mocks/index.ts @@ -4,4 +4,4 @@ export { CHAT_PROMPT_FILE, ONBOARDING_INVOCATION_FILE, } from './binaries/index.js'; -export { buildTestJwt } from '@spotify-confidence/testing/auth'; +export { buildTestJwt } from '../../auth/index.js'; diff --git a/packages/quickstart/__tests__/e2e/testing-framework/mocks/server.ts b/packages/testing/src/e2e/mocks/server.ts similarity index 98% rename from packages/quickstart/__tests__/e2e/testing-framework/mocks/server.ts rename to packages/testing/src/e2e/mocks/server.ts index dead6fd..b5d93b6 100644 --- a/packages/quickstart/__tests__/e2e/testing-framework/mocks/server.ts +++ b/packages/testing/src/e2e/mocks/server.ts @@ -1,5 +1,5 @@ import { createServer, type Server } from 'node:http'; -import { buildTestJwt } from '@spotify-confidence/testing/auth'; +import { buildTestJwt } from '../../auth/index.js'; import { buildMockEnv } from '../env.js'; /** diff --git a/packages/quickstart/__tests__/e2e/testing-framework/navigation.ts b/packages/testing/src/e2e/navigation.ts similarity index 100% rename from packages/quickstart/__tests__/e2e/testing-framework/navigation.ts rename to packages/testing/src/e2e/navigation.ts diff --git a/packages/quickstart/__tests__/e2e/testing-framework/session-factory.ts b/packages/testing/src/e2e/session-factory.ts similarity index 96% rename from packages/quickstart/__tests__/e2e/testing-framework/session-factory.ts rename to packages/testing/src/e2e/session-factory.ts index a6abb04..8845a3d 100644 --- a/packages/quickstart/__tests__/e2e/testing-framework/session-factory.ts +++ b/packages/testing/src/e2e/session-factory.ts @@ -2,7 +2,7 @@ import { mkdtempSync, writeFileSync } from 'node:fs'; import { tmpdir } from 'node:os'; import { delimiter, join } from 'node:path'; import { TerminalSession } from './terminal/index.js'; -import { createProjectDir, type ProjectType } from '@spotify-confidence/testing/scaffold'; +import { createProjectDir, type ProjectType } from '../scaffold/index.js'; /** * Creates an isolated {@link TerminalSession} pre-configured for e2e testing. @@ -71,6 +71,7 @@ export function createSession({ } const session = new TerminalSession({ + cliPath: process.env.E2E_CLI_PATH!, args: ['--debug', '--dir', projectDir, ...extraArgs], env: sessionEnv, cwd: projectDir, diff --git a/packages/testing/src/e2e/terminal/index.ts b/packages/testing/src/e2e/terminal/index.ts new file mode 100644 index 0000000..6f2579e --- /dev/null +++ b/packages/testing/src/e2e/terminal/index.ts @@ -0,0 +1,2 @@ +export { TerminalSession } from './session.js'; +export type { KeyName, Modifiers } from '../../terminal/index.js'; diff --git a/packages/quickstart/__tests__/e2e/testing-framework/terminal/screen-buffer.ts b/packages/testing/src/e2e/terminal/screen-buffer.ts similarity index 100% rename from packages/quickstart/__tests__/e2e/testing-framework/terminal/screen-buffer.ts rename to packages/testing/src/e2e/terminal/screen-buffer.ts diff --git a/packages/quickstart/__tests__/e2e/testing-framework/terminal/session.ts b/packages/testing/src/e2e/terminal/session.ts similarity index 95% rename from packages/quickstart/__tests__/e2e/testing-framework/terminal/session.ts rename to packages/testing/src/e2e/terminal/session.ts index 4dda831..39e5326 100644 --- a/packages/quickstart/__tests__/e2e/testing-framework/terminal/session.ts +++ b/packages/testing/src/e2e/terminal/session.ts @@ -1,15 +1,13 @@ import { spawn as ptySpawn, type IPty } from 'node-pty'; -import { resolve } from 'node:path'; import { mkdtempSync, rmSync } from 'node:fs'; import { tmpdir } from 'node:os'; import { join } from 'node:path'; import { stripAnsi } from './strip-ansi.js'; import { renderScreen, normalizeSnapshot } from './screen-buffer.js'; import { E2E_BASE_ENV } from '../env.js'; -import { overlayEnv, isWindows } from '@spotify-confidence/testing/env'; -import { resolveKey, type Modifiers } from '@spotify-confidence/testing/terminal'; +import { overlayEnv, isWindows } from '../../env/index.js'; +import { resolveKey, type Modifiers } from '../../terminal/index.js'; -const CLI_PATH = resolve(import.meta.dirname, '../../../../dist/bin/cli.js'); const DEFAULT_COLS = 100; const DEFAULT_ROWS = 40; const DEFAULT_TIMEOUT = 15_000; @@ -20,6 +18,8 @@ const DEFAULT_TIMEOUT = 15_000; * @see {@link TerminalSession} */ type SessionOptions = { + /** Absolute path to the CLI entry point (e.g. `dist/bin/cli.js`). */ + cliPath: string; /** CLI arguments appended after the binary path. @defaultValue `['--debug']` */ args?: string[]; /** Extra environment variables merged on top of the base e2e env. */ @@ -39,14 +39,14 @@ function delay(ms: number): Promise { /** * Drives a CLI process inside a pseudo-terminal for end-to-end testing. * - * Wraps `node-pty` to spawn the wizard binary in an isolated environment, + * Wraps `node-pty` to spawn a CLI binary in an isolated environment, * then exposes high-level methods for sending input, waiting for output, * and capturing snapshots. Supports the TC39 Explicit Resource Management * protocol (`using`) for automatic cleanup. * * @example * ```ts - * using session = new TerminalSession({ args: ['--debug'] }); + * using session = new TerminalSession({ cliPath: 'dist/bin/cli.js', args: ['--debug'] }); * await session.waitForText('Welcome'); * await session.press('Enter'); * expect(session.snapshot()).toMatchSnapshot('welcome'); @@ -67,8 +67,15 @@ export class TerminalSession { readonly cols: number; readonly rows: number; - constructor(options: SessionOptions = {}) { - const { args = ['--debug'], env = {}, cols = DEFAULT_COLS, rows = DEFAULT_ROWS, cwd } = options; + constructor(options: SessionOptions) { + const { + cliPath, + args = ['--debug'], + env = {}, + cols = DEFAULT_COLS, + rows = DEFAULT_ROWS, + cwd, + } = options; this.cols = cols; this.rows = rows; @@ -77,7 +84,7 @@ export class TerminalSession { this.cwd = cwd ?? process.cwd(); this.tempDirs.push(isolatedTmpDir); - this.pty = ptySpawn(process.execPath, [CLI_PATH, ...args], { + this.pty = ptySpawn(process.execPath, [cliPath, ...args], { name: 'xterm-256color', cols, rows, diff --git a/packages/quickstart/__tests__/e2e/testing-framework/terminal/strip-ansi.ts b/packages/testing/src/e2e/terminal/strip-ansi.ts similarity index 100% rename from packages/quickstart/__tests__/e2e/testing-framework/terminal/strip-ansi.ts rename to packages/testing/src/e2e/terminal/strip-ansi.ts diff --git a/packages/quickstart/__tests__/e2e/testing-framework/utils.ts b/packages/testing/src/e2e/utils.ts similarity index 100% rename from packages/quickstart/__tests__/e2e/testing-framework/utils.ts rename to packages/testing/src/e2e/utils.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a946d3b..c1629c0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -196,9 +196,6 @@ importers: msw: specifier: ^2.15.0 version: 2.15.0(@types/node@26.6.2)(typescript@6.0.3) - node-pty: - specifier: 1.2.0-beta.14 - version: 1.2.0-beta.14 prettier: specifier: ^3.9.9 version: 3.9.9 @@ -228,6 +225,9 @@ importers: msw: specifier: ^2.15.0 version: 2.15.0(@types/node@26.6.2)(typescript@6.0.3) + node-pty: + specifier: 1.2.0-beta.14 + version: 1.2.0-beta.14 devDependencies: '@types/node': specifier: ^26.6.2