From 384683e861bcedacb2cb4a63c7f0b071e21377de Mon Sep 17 00:00:00 2001 From: mesalogo Date: Thu, 8 Oct 2026 00:39:03 +0800 Subject: [PATCH] test: stabilize storage loss validation races --- src/main/desktop-storage-electron-fixture.ts | 1 + src/main/desktop-storage.test.ts | 1 + src/main/readonly-query-reader.test.ts | 2 +- src/renderer/src/SettingsPanel.test.tsx | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/desktop-storage-electron-fixture.ts b/src/main/desktop-storage-electron-fixture.ts index abceea78..dd67c34b 100644 --- a/src/main/desktop-storage-electron-fixture.ts +++ b/src/main/desktop-storage-electron-fixture.ts @@ -17,6 +17,7 @@ app.setPath('userData', join(root, 'electron')) async function run(): Promise { await app.whenReady() + await chmod(root, 0o700) const options = { assistantPath: join(root, 'assistant.sqlite'), knowledgePath: join(root, 'knowledge.sqlite'), defaultRootPath: root, userDataPath: root, entryPath: join(root, 'desktop-storage-entry.mjs'), readerWorkerPath: join(root, 'readonly-query-worker.cjs'), upgradeWorkerPath: join(root, 'assistant-storage-worker.cjs') } diff --git a/src/main/desktop-storage.test.ts b/src/main/desktop-storage.test.ts index fc74916f..c89a0543 100644 --- a/src/main/desktop-storage.test.ts +++ b/src/main/desktop-storage.test.ts @@ -94,6 +94,7 @@ it('awaits a termination already in progress before close settles or capacity ca const transport = new DelayedTransport() const reader = new ReadonlyQueryReader('assistant', '', '', Date.now, { createTransport: () => transport }) const pending = reader.call('assistant.save', []) + await Promise.resolve() const rejected = expect(pending).rejects.toMatchObject({ code: 'STORAGE_UNCONFIRMED' }) transport.emit('error', new Error('host failed')) reader.resetBackoffForTest() diff --git a/src/main/readonly-query-reader.test.ts b/src/main/readonly-query-reader.test.ts index 6b18cda4..c912ce12 100644 --- a/src/main/readonly-query-reader.test.ts +++ b/src/main/readonly-query-reader.test.ts @@ -258,7 +258,7 @@ describe('assistant readonly worker', () => { // Termination races the response. Either outcome is valid here; the // dedicated crash tests cover deterministic rejection propagation. await inFlight.then( - result => expect(result).toEqual(expected[1]), + result => expect(result).toEqual(database.listConversationSummaries([conversations[3]!.id])), error => expect(error).toBeInstanceOf(ReadonlyWorkerUnavailableError), ) } finally { database.close() } diff --git a/src/renderer/src/SettingsPanel.test.tsx b/src/renderer/src/SettingsPanel.test.tsx index 0a9f8d77..0931392e 100644 --- a/src/renderer/src/SettingsPanel.test.tsx +++ b/src/renderer/src/SettingsPanel.test.tsx @@ -1892,7 +1892,7 @@ describe('SettingsPanel runtime files', () => { const modelName = kind === 'embedding' ? embeddingCatalogEntry.displayName : speechCatalog[0]!.displayName const download = await screen.findByRole('button', { name: `下载 ${modelName}` }) expect(screen.queryByText('当前来源不可下载')).not.toBeInTheDocument() - expect(screen.getByRole('button', { name: '模型下载源' })).toHaveFocus() + await waitFor(() => expect(screen.getByRole('button', { name: '模型下载源' })).toHaveFocus()) fireEvent.click(download) await waitFor(() => { if (kind === 'embedding') expect(installEmbeddingModel).toHaveBeenCalledWith(embeddingCatalogEntry.id, 'hugging-face')