From 6943f1708db62ba8a674c1c19b6eb09570d635ec Mon Sep 17 00:00:00 2001 From: Luca Martial Date: Mon, 11 May 2026 22:03:20 -0700 Subject: [PATCH] refactor(cli): remove dead demo dep from KtxSetupDeps The demo entry menu now calls runDemoTour directly, so the injectable demo property and KtxDemoArgs import are unused. Update test to mock the new module import. Co-Authored-By: Claude Opus 4.6 (1M context) --- packages/cli/src/setup.test.ts | 20 ++++++++++---------- packages/cli/src/setup.ts | 2 -- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/packages/cli/src/setup.test.ts b/packages/cli/src/setup.test.ts index e335591e..da3753af 100644 --- a/packages/cli/src/setup.test.ts +++ b/packages/cli/src/setup.test.ts @@ -4,8 +4,13 @@ import { join } from 'node:path'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import { contextBuildCommands, writeKtxSetupContextState } from './setup-context.js'; +import { runDemoTour } from './setup-demo-tour.js'; import { readKtxSetupStatus, runKtxSetup } from './setup.js'; +vi.mock('./setup-demo-tour.js', () => ({ + runDemoTour: vi.fn(async () => 0), +})); + function makeIo() { let stdout = ''; let stderr = ''; @@ -691,9 +696,8 @@ describe('setup status', () => { ); }); - it('runs the seeded demo when the first setup intent menu chooses packaged demo data', async () => { + it('runs the demo tour when the first setup intent menu chooses demo', async () => { const testIo = makeIo(); - const demo = vi.fn(async (_args: { projectDir: string }, _io: unknown) => 0); await expect( runKtxSetup( @@ -714,19 +718,15 @@ describe('setup status', () => { showEntryMenu: true, }, testIo.io, - { entryMenuDeps: { prompts: { select: vi.fn(async () => 'demo'), cancel: vi.fn() } }, demo }, + { entryMenuDeps: { prompts: { select: vi.fn(async () => 'demo'), cancel: vi.fn() } } }, ), ).resolves.toBe(0); - expect(demo).toHaveBeenCalledWith( - expect.objectContaining({ - command: 'seeded', - outputMode: 'viz', - inputMode: 'auto', - }), + expect(runDemoTour).toHaveBeenCalledWith( + { inputMode: 'auto' }, testIo.io, + expect.objectContaining({}), ); - expect(demo.mock.calls[0]?.[0].projectDir).toMatch(/ktx-demo-/); }); it('creates a project through run mode when --new is selected', async () => { diff --git a/packages/cli/src/setup.ts b/packages/cli/src/setup.ts index d72b5bb0..63369f9a 100644 --- a/packages/cli/src/setup.ts +++ b/packages/cli/src/setup.ts @@ -3,7 +3,6 @@ import { join, resolve } from 'node:path'; import { cancel, isCancel, select } from '@clack/prompts'; import { loadKtxProject } from '@ktx/context/project'; import type { KtxCliIo } from './cli-runtime.js'; -import type { KtxDemoArgs } from './demo.js'; import { formatSetupNextStepLines } from './next-steps.js'; import { isKtxSetupExitError, withSetupInterruptConfirmation } from './setup-interrupt.js'; import { @@ -146,7 +145,6 @@ export interface KtxSetupDeps { removeAgents?: typeof removeKtxAgentInstall; readyMenuDeps?: KtxSetupReadyMenuDeps; entryMenuDeps?: KtxSetupEntryMenuDeps; - demo?: (args: KtxDemoArgs, io: KtxCliIo) => Promise; } const SOURCE_DRIVERS = new Set(['dbt', 'metricflow', 'metabase', 'looker', 'lookml', 'notion']);