From 964221537fff78cb19026f23d6fa06fcc24f6a4e Mon Sep 17 00:00:00 2001 From: digua Date: Sun, 26 Jul 2026 12:00:29 +0800 Subject: [PATCH] feat(demo): reduce example sessions --- .../src/services/demo-import.test.ts | 47 +++++++------------ .../node-runtime/src/services/demo-import.ts | 7 +-- src/services/import/browser.test.ts | 47 +++++-------------- src/services/import/browser.ts | 7 +-- 4 files changed, 31 insertions(+), 77 deletions(-) diff --git a/packages/node-runtime/src/services/demo-import.test.ts b/packages/node-runtime/src/services/demo-import.test.ts index 8693da7d..06e0fcba 100644 --- a/packages/node-runtime/src/services/demo-import.test.ts +++ b/packages/node-runtime/src/services/demo-import.test.ts @@ -40,11 +40,10 @@ describe('importDemoSessions', () => { const sourceLatest = sourceTimestamp('2000-12-10', '22:30:00') const documents = [ createDemoDocument('group', [sourceTimestamp('2000-02-01', '09:00:00'), sourceLatest]), - createDemoDocument('private-a', [sourceTimestamp('2000-02-01', '08:30:00')]), - createDemoDocument('private-b', [sourceTimestamp('2000-06-01', '10:00:00')]), - createDemoDocument('private-c', [sourceTimestamp('2000-12-09', '21:00:00')]), + createDemoDocument('private-wukong', [sourceTimestamp('2000-06-01', '10:00:00')]), ] let downloadIndex = 0 + const requestedUrls: string[] = [] const imported: Array<{ name: string; document: any }> = [] const progress: DemoImportProgress[] = [] const now = new Date('2026-07-25T04:00:00.000Z') @@ -53,8 +52,9 @@ describe('importDemoSessions', () => { locale: 'cn', tempPrefix: 'demo-service-test-', targetTimeZone: 'America/Los_Angeles', - fetchImpl: async function (this: unknown) { + fetchImpl: async function (this: unknown, input) { assert.equal(this, globalThis) + requestedUrls.push(String(input)) return new Response(documents[downloadIndex++], { status: 200 }) }, now: () => now, @@ -73,25 +73,19 @@ describe('importDemoSessions', () => { assert.deepEqual(result, { success: true, groupSessionId: 'session-1', - privateSessionIds: ['session-2', 'session-3', 'session-4'], + privateSessionIds: ['session-2'], }) - assert.equal(imported.length, 4) + assert.deepEqual(requestedUrls, [ + 'https://chatlab.fun/assets/demo/cn/demo-group.json', + 'https://chatlab.fun/assets/demo/cn/demo-private-B-wukong.json', + ]) + assert.equal(imported.length, 2) assert.equal(imported[0].document.messages[1].timestamp, latestTimestamp) - assert.equal(imported[1].document.messages[0].timestamp, sourceTimestamp('2000-02-01', '08:30:00') + offset) + assert.equal(imported[1].document.messages[0].timestamp, sourceTimestamp('2000-06-01', '10:00:00') + offset) assert.ok(imported.every(({ document }) => document.chatlab.exportedAt === Math.floor(now.getTime() / 1000))) assert.deepEqual( progress.map(({ stage, current }) => `${stage}:${current}`), - [ - 'downloading:1', - 'downloading:2', - 'downloading:3', - 'downloading:4', - 'importing:1', - 'importing:2', - 'importing:3', - 'importing:4', - 'done:4', - ] + ['downloading:1', 'downloading:2', 'importing:1', 'importing:2', 'done:2'] ) assert.ok(imported.every(({ name }) => !fs.existsSync(name))) }) @@ -100,12 +94,7 @@ describe('importDemoSessions', () => { let importCount = 0 let downloadIndex = 0 const progress: DemoImportProgress[] = [] - const responses = [ - createDemoDocument('group', [sourceTimestamp('2000-12-10', '22:30:00')]), - 'x'.repeat(128), - createDemoDocument('private-b', [sourceTimestamp('2000-12-09', '21:00:00')]), - createDemoDocument('private-c', [sourceTimestamp('2000-12-08', '21:00:00')]), - ] + const responses = [createDemoDocument('group', [sourceTimestamp('2000-12-10', '22:30:00')]), 'x'.repeat(128)] const result = await importDemoSessions({ locale: 'en', @@ -131,9 +120,7 @@ describe('importDemoSessions', () => { const rolledBackSessionIds: string[] = [] const documents = [ createDemoDocument('group', [sourceTimestamp('2000-12-10', '22:30:00')]), - createDemoDocument('private-a', [sourceTimestamp('2000-12-09', '21:00:00')]), - createDemoDocument('private-b', [sourceTimestamp('2000-12-08', '21:00:00')]), - createDemoDocument('private-c', [sourceTimestamp('2000-12-07', '21:00:00')]), + createDemoDocument('private-wukong', [sourceTimestamp('2000-12-08', '21:00:00')]), ] const result = await importDemoSessions({ @@ -142,7 +129,7 @@ describe('importDemoSessions', () => { fetchImpl: async () => new Response(documents[downloadIndex++], { status: 200 }), importFile: async () => { importCount += 1 - if (importCount === 3) return { success: false, error: 'third import failed' } + if (importCount === 2) return { success: false, error: 'second import failed' } return { success: true, sessionId: `session-${importCount}` } }, deleteSession: async (sessionId) => { @@ -151,7 +138,7 @@ describe('importDemoSessions', () => { }) assert.equal(result.success, false) - assert.match(result.error ?? '', /third import failed/) - assert.deepEqual(rolledBackSessionIds, ['session-2', 'session-1']) + assert.match(result.error ?? '', /second import failed/) + assert.deepEqual(rolledBackSessionIds, ['session-1']) }) }) diff --git a/packages/node-runtime/src/services/demo-import.ts b/packages/node-runtime/src/services/demo-import.ts index a52b596c..0603aecf 100644 --- a/packages/node-runtime/src/services/demo-import.ts +++ b/packages/node-runtime/src/services/demo-import.ts @@ -5,12 +5,7 @@ import { appLogger } from '../logging/app-logger' import { createChatLabTempDir, removeChatLabTempDir } from '../temp-workspace' const DEMO_BASE_URL = 'https://chatlab.fun/assets/demo' -const DEMO_FILES = [ - 'demo-group.json', - 'demo-private-A-cuilan.json', - 'demo-private-B-wukong.json', - 'demo-private-C-spider.json', -] as const +const DEMO_FILES = ['demo-group.json', 'demo-private-B-wukong.json'] as const export interface DemoImportProgress { stage: 'downloading' | 'importing' | 'done' | 'error' diff --git a/src/services/import/browser.test.ts b/src/services/import/browser.test.ts index 571ff65c..5be10be4 100644 --- a/src/services/import/browser.test.ts +++ b/src/services/import/browser.test.ts @@ -125,16 +125,14 @@ describe('BrowserImportAdapter', () => { await assert.rejects(adapter.incrementalImport('session-one', createFile()), /not available in Web WASM/i) }) - it('downloads and imports the four localized demo files through the browser runtime', async () => { + it('downloads and imports the group and Wukong demo files through the browser runtime', async () => { const requestedUrls: string[] = [] const importedFiles: string[] = [] const importedDocuments: any[] = [] const sourceLatest = demoTimestamp('2000-12-10', '22:30:00') const documents = [ createDemoDocument('group', [demoTimestamp('2000-02-01', '09:00:00'), sourceLatest]), - createDemoDocument('private-a', [demoTimestamp('2000-02-01', '08:30:00')]), - createDemoDocument('private-b', [demoTimestamp('2000-06-01', '10:00:00')]), - createDemoDocument('private-c', [demoTimestamp('2000-12-09', '21:00:00')]), + createDemoDocument('private-wukong', [demoTimestamp('2000-06-01', '10:00:00')]), ] const now = new Date('2026-07-25T04:00:00.000Z') let downloadIndex = 0 @@ -170,40 +168,21 @@ describe('BrowserImportAdapter', () => { const result = await adapter.importDemo('cn', (event) => progress.push(event.stage)) - assert.deepEqual(requestedUrls, [ - '/api/demo/cn/demo-group.json', - '/api/demo/cn/demo-private-A-cuilan.json', - '/api/demo/cn/demo-private-B-wukong.json', - '/api/demo/cn/demo-private-C-spider.json', - ]) - assert.deepEqual(importedFiles, [ - 'demo-group.json', - 'demo-private-A-cuilan.json', - 'demo-private-B-wukong.json', - 'demo-private-C-spider.json', - ]) + assert.deepEqual(requestedUrls, ['/api/demo/cn/demo-group.json', '/api/demo/cn/demo-private-B-wukong.json']) + assert.deepEqual(importedFiles, ['demo-group.json', 'demo-private-B-wukong.json']) const expectedLatest = new Date(now) expectedLatest.setDate(expectedLatest.getDate() - 1) expectedLatest.setHours(22, 30, 0, 0) const latestTimestamp = Math.floor(expectedLatest.getTime() / 1000) const offset = latestTimestamp - sourceLatest assert.equal(importedDocuments[0].messages[1].timestamp, latestTimestamp) - assert.equal(importedDocuments[1].messages[0].timestamp, demoTimestamp('2000-02-01', '08:30:00') + offset) + assert.equal(importedDocuments[1].messages[0].timestamp, demoTimestamp('2000-06-01', '10:00:00') + offset) assert.ok(importedDocuments.every((document) => document.chatlab.exportedAt === Math.floor(now.getTime() / 1000))) - assert.deepEqual(progress, [ - 'downloading', - 'downloading', - 'downloading', - 'downloading', - 'importing', - 'importing', - 'importing', - 'importing', - ]) + assert.deepEqual(progress, ['downloading', 'downloading', 'importing', 'importing']) assert.deepEqual(result, { success: true, groupSessionId: 'session-1', - privateSessionIds: ['session-2', 'session-3', 'session-4'], + privateSessionIds: ['session-2'], }) }) @@ -272,13 +251,11 @@ describe('BrowserImportAdapter', () => { it('deletes sessions created earlier in the batch when a later demo import fails', async () => { const deletedSessionIds: string[] = [] - const importError = new Error('third import failed') + const importError = new Error('second import failed') let importCount = 0 const documents = [ createDemoDocument('group', [demoTimestamp('2000-12-10', '22:30:00')]), - createDemoDocument('private-a', [demoTimestamp('2000-12-09', '21:00:00')]), - createDemoDocument('private-b', [demoTimestamp('2000-12-08', '20:00:00')]), - createDemoDocument('private-c', [demoTimestamp('2000-12-07', '19:00:00')]), + createDemoDocument('private-wukong', [demoTimestamp('2000-12-08', '20:00:00')]), ] let downloadIndex = 0 const rpc = { @@ -288,7 +265,7 @@ describe('BrowserImportAdapter', () => { ): Promise> { if (type === 'import.start') { importCount += 1 - if (importCount === 3) throw importError + if (importCount === 2) throw importError return { sessionId: `session-${importCount}`, formatId: 'chatlab', @@ -314,8 +291,8 @@ describe('BrowserImportAdapter', () => { const result = await adapter.importDemo('en') assert.equal(result.success, false) - assert.match(result.error ?? '', /third import failed/) - assert.deepEqual(deletedSessionIds, ['session-2', 'session-1']) + assert.match(result.error ?? '', /second import failed/) + assert.deepEqual(deletedSessionIds, ['session-1']) }) it('forwards browser-safe format identifiers to the worker runtime', async () => { diff --git a/src/services/import/browser.ts b/src/services/import/browser.ts index 96e86f08..cc13c5a1 100644 --- a/src/services/import/browser.ts +++ b/src/services/import/browser.ts @@ -18,12 +18,7 @@ import type { const DEMO_BASE_URL = '/api/demo' const DEMO_DOWNLOAD_TIMEOUT_MS = 60_000 -const DEMO_FILES = [ - 'demo-group.json', - 'demo-private-A-cuilan.json', - 'demo-private-B-wukong.json', - 'demo-private-C-spider.json', -] as const +const DEMO_FILES = ['demo-group.json', 'demo-private-B-wukong.json'] as const export class BrowserImportAdapter implements ImportAdapter { private activeImport: AbortController | undefined