Merge pull request #26 from Kaelio/luca-martial/demo-data-wizard-ux

feat(cli): add demo guided tour with real Orbit project data
This commit is contained in:
Luca Martial 2026-05-12 01:06:45 -04:00 committed by GitHub
commit 950fa151ce
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
104 changed files with 6779 additions and 468 deletions

View file

@ -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 = '';
@ -347,10 +352,10 @@ describe('setup status', () => {
expect(labels).toEqual([
'Set up KTX for my data',
'Check setup status',
'Try KTX with packaged demo data',
'Explore a pre-built KTX project',
'Exit',
]);
expect(labels.indexOf('Try KTX with packaged demo data')).toBe(labels.length - 2);
expect(labels.indexOf('Explore a pre-built KTX project')).toBe(labels.length - 2);
return 'exit';
});
const cancel = vi.fn();
@ -396,7 +401,7 @@ describe('setup status', () => {
'Create a new KTX project',
'Connect a coding agent to KTX',
'Check setup status',
'Try KTX with packaged demo data',
'Explore a pre-built KTX project',
'Exit',
]);
return 'exit';
@ -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 () => {