From ad91533205c221299b96b848f12eefc920600fcf Mon Sep 17 00:00:00 2001 From: Smartsheet-JB-Brown Date: Mon, 14 Apr 2025 22:47:56 -0700 Subject: [PATCH] re add default source when all sources are deleted --- .../PackageManagerViewStateManager.ts | 7 ++- .../PackageManagerViewStateManager.test.ts | 49 +++++++++++++++++-- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/webview-ui/src/components/package-manager/PackageManagerViewStateManager.ts b/webview-ui/src/components/package-manager/PackageManagerViewStateManager.ts index 0f63e74d9e..e7b9f956f7 100644 --- a/webview-ui/src/components/package-manager/PackageManagerViewStateManager.ts +++ b/webview-ui/src/components/package-manager/PackageManagerViewStateManager.ts @@ -1,6 +1,7 @@ import { PackageManagerItem, PackageManagerSource } from "../../../../src/services/package-manager/types" import { vscode } from "../../utils/vscode" import { WebviewMessage } from "../../../../src/shared/WebviewMessage" +import { DEFAULT_PACKAGE_MANAGER_SOURCE } from "../../../../src/services/package-manager/constants" export interface ViewState { allItems: PackageManagerItem[] @@ -275,12 +276,14 @@ export class PackageManagerViewStateManager { case "UPDATE_SOURCES": { const { sources } = transition.payload as TransitionPayloads["UPDATE_SOURCES"] - this.state.sources = sources + // If all sources are removed, add the default source + const updatedSources = sources.length === 0 ? [DEFAULT_PACKAGE_MANAGER_SOURCE] : sources + this.state.sources = updatedSources this.notifyStateChange() vscode.postMessage({ type: "packageManagerSources", - sources, + sources: updatedSources, } as WebviewMessage) if (this.state.activeTab === "browse") { 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 3b264cc464..4c8aa86b29 100644 --- a/webview-ui/src/components/package-manager/__tests__/PackageManagerViewStateManager.test.ts +++ b/webview-ui/src/components/package-manager/__tests__/PackageManagerViewStateManager.test.ts @@ -231,12 +231,24 @@ describe("PackageManagerViewStateManager", () => { jest.runAllTimers() const state = manager.getState() - expect(state.sources).toEqual([]) + expect(state.sources).toEqual([ + { + url: "https://github.com/RooVetGit/Roo-Code-Packages", + name: "Roo Code Package Manager Template", + enabled: true, + }, + ]) - // Should send the final sources state to webview + // Should send the final sources state to webview with default source expect(vscode.postMessage).toHaveBeenLastCalledWith({ type: "packageManagerSources", - sources: [], + sources: [ + { + url: "https://github.com/RooVetGit/Roo-Code-Packages", + name: "Roo Code Package Manager Template", + enabled: true, + }, + ], }) }) @@ -494,6 +506,37 @@ describe("PackageManagerViewStateManager", () => { // Filter behavior tests are already covered in the previous describe block describe("Source Management", () => { + it("should re-add default source when all sources are removed", async () => { + // Add some test sources + const sources = [ + { url: "https://github.com/test/repo1", enabled: true }, + { url: "https://github.com/test/repo2", enabled: true }, + ] + + await manager.transition({ + type: "UPDATE_SOURCES", + payload: { sources }, + }) + + // Remove all sources + await manager.transition({ + type: "UPDATE_SOURCES", + payload: { sources: [] }, + }) + + // Verify that the default source was automatically re-added + expect(vscode.postMessage).toHaveBeenLastCalledWith({ + type: "packageManagerSources", + sources: [ + { + url: "https://github.com/RooVetGit/Roo-Code-Packages", + name: "Roo Code Package Manager Template", + enabled: true, + }, + ], + }) + }) + it("should handle UPDATE_SOURCES transition", async () => { const sources = [ { url: "https://github.com/test/repo", enabled: true },