diff --git a/webview-ui/src/components/package-manager/__tests__/PackageManagerViewStateManager.test.ts b/webview-ui/src/components/package-manager/__tests__/PackageManagerViewStateManager.test.ts index 7ce6a0fb0e..3b264cc464 100644 --- a/webview-ui/src/components/package-manager/__tests__/PackageManagerViewStateManager.test.ts +++ b/webview-ui/src/components/package-manager/__tests__/PackageManagerViewStateManager.test.ts @@ -37,9 +37,15 @@ describe("PackageManagerViewStateManager", () => { beforeEach(() => { jest.clearAllMocks() + jest.useFakeTimers() manager = new PackageManagerViewStateManager() }) + afterEach(() => { + jest.clearAllTimers() + jest.useRealTimers() + }) + describe("Initial State", () => { it("should initialize with default state", () => { const state = manager.getState() @@ -110,14 +116,6 @@ describe("PackageManagerViewStateManager", () => { }) describe("Race Conditions", () => { - beforeEach(() => { - jest.useFakeTimers() - }) - - afterEach(() => { - jest.useRealTimers() - }) - it("should handle rapid tab switching during initial load", async () => { // Start initial load await manager.transition({ type: "FETCH_ITEMS" }) @@ -268,14 +266,6 @@ describe("PackageManagerViewStateManager", () => { }) describe("Error Handling", () => { - beforeEach(() => { - jest.useFakeTimers() - }) - - afterEach(() => { - jest.useRealTimers() - }) - it("should handle fetch timeout", async () => { await manager.transition({ type: "FETCH_ITEMS" }) @@ -312,14 +302,6 @@ describe("PackageManagerViewStateManager", () => { }) describe("Filter Behavior", () => { - beforeEach(() => { - jest.useFakeTimers() - }) - - afterEach(() => { - jest.useRealTimers() - }) - it("should debounce filter updates", async () => { // Reset mock before test ;(vscode.postMessage as jest.Mock).mockClear() @@ -468,14 +450,6 @@ describe("PackageManagerViewStateManager", () => { }) describe("Fetch Timeout Handling", () => { - beforeEach(() => { - jest.useFakeTimers() - }) - - afterEach(() => { - jest.useRealTimers() - }) - it("should handle fetch timeout", async () => { await manager.transition({ type: "FETCH_ITEMS" }) @@ -591,8 +565,8 @@ describe("PackageManagerViewStateManager", () => { const state = manager.getState() expect(state.filters).toEqual(filters) - // Wait for debounce - await new Promise((resolve) => setTimeout(resolve, 300)) + // Fast-forward past debounce time + jest.advanceTimersByTime(300) expect(vscode.postMessage).toHaveBeenCalledWith({ type: "filterPackageManagerItems", diff --git a/webview-ui/src/components/package-manager/components/PackageManagerItemCard.tsx b/webview-ui/src/components/package-manager/components/PackageManagerItemCard.tsx index 2214fd294c..5a4a63faac 100644 --- a/webview-ui/src/components/package-manager/components/PackageManagerItemCard.tsx +++ b/webview-ui/src/components/package-manager/components/PackageManagerItemCard.tsx @@ -5,7 +5,7 @@ import { vscode } from "@/utils/vscode" import { groupItemsByType, GroupedItems } from "../utils/grouping" import { ExpandableSection } from "./ExpandableSection" import { TypeGroup } from "./TypeGroup" -import { ViewState } from "../state/PackageManagerViewStateManager" +import { ViewState } from "../PackageManagerViewStateManager" interface PackageManagerItemCardProps { item: PackageManagerItem @@ -104,7 +104,7 @@ export const PackageManagerItemCard: React.FC = ({ onClick={() => { if (filters.tags.includes(tag)) { setFilters({ - tags: filters.tags.filter((t) => t !== tag), + tags: filters.tags.filter((t: string) => t !== tag), }) } else { setFilters({