From 9b5f4e97fb8859f14047c9b341f0123af789ad34 Mon Sep 17 00:00:00 2001 From: Matt Warren Date: Thu, 16 Apr 2026 12:39:14 -0700 Subject: [PATCH 1/2] Fix copilot PR feedback items --- src/Client/features/historyPanel.ts | 4 +- src/Client/tests/unit/historyManager.test.ts | 65 ++++++++++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/src/Client/features/historyPanel.ts b/src/Client/features/historyPanel.ts index 6571f09..25ad5d3 100644 --- a/src/Client/features/historyPanel.ts +++ b/src/Client/features/historyPanel.ts @@ -37,7 +37,7 @@ export class HistoryPanel { manager.onDidAddEntry((meta) => { this.treeProvider.refresh(); const item = new HistoryItem(meta); - this.treeView.reveal(item, { select: true, focus: false }); + this.treeView.reveal(item, { select: true, focus: false }).then(undefined, (err) => console.warn('Failed to reveal history item:', err)); }); } @@ -47,7 +47,7 @@ export class HistoryPanel { /** Reveals and selects a history entry in the tree view. */ revealEntry(entry: HistoryEntry): void { const item = new HistoryItem(entry); - this.treeView.reveal(item, { select: true, focus: false }); + this.treeView.reveal(item, { select: true, focus: false }).then(undefined, (err) => console.warn('Failed to reveal history item:', err)); } /** Opens a history item in the singleton results view. */ diff --git a/src/Client/tests/unit/historyManager.test.ts b/src/Client/tests/unit/historyManager.test.ts index e9a6a33..658f461 100644 --- a/src/Client/tests/unit/historyManager.test.ts +++ b/src/Client/tests/unit/historyManager.test.ts @@ -240,6 +240,71 @@ describe('HistoryManager', () => { }); }); + describe('hasEntryForQuery', () => { + it('returns true for a query that has been added', async () => { + const mgr = createManager(); + await mgr.addHistoryEntry(makeResultData('StormEvents | count')); + expect(await mgr.hasEntryForQuery('StormEvents | count')).toBe(true); + }); + + it('returns false for a query that has not been added', async () => { + const mgr = createManager(); + await mgr.addHistoryEntry(makeResultData('StormEvents | count')); + expect(await mgr.hasEntryForQuery('OtherTable | count')).toBe(false); + }); + + it('returns false when history is empty', async () => { + const mgr = createManager(); + expect(await mgr.hasEntryForQuery('StormEvents | count')).toBe(false); + }); + }); + + describe('getMatchingEntry', () => { + it('returns the matching entry for a query', async () => { + const mgr = createManager(); + await mgr.addHistoryEntry(makeResultData('StormEvents | count')); + const entry = await mgr.getMatchingEntry('StormEvents | count'); + expect(entry).toBeDefined(); + expect(entry!.queryPreview).toBe('StormEvents | count'); + }); + + it('returns the most recent entry when multiple match', async () => { + const mgr = createManager(); + await mgr.addHistoryEntry(makeResultData('StormEvents | count', 1)); + await mgr.addHistoryEntry(makeResultData('StormEvents | count', 5)); + const entry = await mgr.getMatchingEntry('StormEvents | count'); + expect(entry).toBeDefined(); + expect(entry!.rowCount).toBe(5); + }); + + it('returns undefined for a non-matching query', async () => { + const mgr = createManager(); + await mgr.addHistoryEntry(makeResultData('StormEvents | count')); + expect(await mgr.getMatchingEntry('OtherTable | count')).toBeUndefined(); + }); + }); + + describe('getEntryData', () => { + it('returns ResultData for a valid entry', async () => { + const mgr = createManager(); + await mgr.addHistoryEntry(makeResultData('StormEvents | count', 3)); + const entry = mgr.getEntries()[0]!; + const data = await mgr.getEntryData(entry); + expect(data).toBeDefined(); + expect(data!.query).toBe('StormEvents | count'); + expect(data!.tables[0]!.rows).toHaveLength(3); + }); + + it('returns undefined for a deleted entry', async () => { + const mgr = createManager(); + await mgr.addHistoryEntry(makeResultData('StormEvents | count')); + const entry = mgr.getEntries()[0]!; + await mgr.deleteEntry(entry.fileName); + const data = await mgr.getEntryData(entry); + expect(data).toBeUndefined(); + }); + }); + describe('events', () => { it('fires onDidChange when entry is added', async () => { const mgr = createManager(); From e261ff16190d6b7cd27f9750fb1eeaf13b603c07 Mon Sep 17 00:00:00 2001 From: Matt Warren Date: Thu, 16 Apr 2026 13:09:43 -0700 Subject: [PATCH 2/2] Fix test that might become flaky --- src/Client/tests/unit/historyManager.test.ts | 21 +++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/Client/tests/unit/historyManager.test.ts b/src/Client/tests/unit/historyManager.test.ts index 658f461..d8e2d49 100644 --- a/src/Client/tests/unit/historyManager.test.ts +++ b/src/Client/tests/unit/historyManager.test.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. -import { describe, it, expect, beforeEach, afterEach } from 'vitest'; +import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import * as fs from 'fs'; import * as os from 'os'; import * as path from 'path'; @@ -269,12 +269,19 @@ describe('HistoryManager', () => { }); it('returns the most recent entry when multiple match', async () => { - const mgr = createManager(); - await mgr.addHistoryEntry(makeResultData('StormEvents | count', 1)); - await mgr.addHistoryEntry(makeResultData('StormEvents | count', 5)); - const entry = await mgr.getMatchingEntry('StormEvents | count'); - expect(entry).toBeDefined(); - expect(entry!.rowCount).toBe(5); + vi.useFakeTimers(); + try { + const mgr = createManager(); + vi.setSystemTime(new Date('2025-01-01T00:00:00Z')); + await mgr.addHistoryEntry(makeResultData('StormEvents | count', 1)); + vi.setSystemTime(new Date('2025-01-01T00:00:01Z')); + await mgr.addHistoryEntry(makeResultData('StormEvents | count', 5)); + const entry = await mgr.getMatchingEntry('StormEvents | count'); + expect(entry).toBeDefined(); + expect(entry!.rowCount).toBe(5); + } finally { + vi.useRealTimers(); + } }); it('returns undefined for a non-matching query', async () => {