diff --git a/packages/databricks-vscode/src/ui/unity-catalog/UnityCatalogTreeDataProvider.test.ts b/packages/databricks-vscode/src/ui/unity-catalog/UnityCatalogTreeDataProvider.test.ts index 9580e19c4..0f8f2d6ef 100644 --- a/packages/databricks-vscode/src/ui/unity-catalog/UnityCatalogTreeDataProvider.test.ts +++ b/packages/databricks-vscode/src/ui/unity-catalog/UnityCatalogTreeDataProvider.test.ts @@ -352,6 +352,36 @@ describe(__filename, () => { assert.strictEqual(item.copyText, "cat"); }); + it("getTreeItem sets volume url with volumes path segment", async () => { + const stubManager = { + onDidChangeState: () => ({dispose() {}}), + databricksWorkspace: { + host: new URL("https://adb-123.azuredatabricks.net/"), + }, + } as unknown as ConnectionManager; + + const provider = new UnityCatalogTreeDataProvider( + stubManager, + stubStateStorage + ); + disposables.push(provider); + + const volume: UnityCatalogTreeNode = { + kind: "volume", + catalogName: "cat", + schemaName: "sch", + name: "ev", + fullName: "cat.sch.ev", + }; + const item = provider.getTreeItem(volume) as UnityCatalogTreeItem; + + assert(item.url, "url should be set"); + assert( + item.url!.includes("explore/data/volumes/cat/sch/ev"), + `url should contain explore/data/volumes/cat/sch/ev, got: ${item.url}` + ); + }); + it("getTreeItem omits url when no host", async () => { const provider = new UnityCatalogTreeDataProvider( instance(mockConnectionManager), diff --git a/packages/databricks-vscode/src/ui/unity-catalog/UnityCatalogTreeDataProvider.ts b/packages/databricks-vscode/src/ui/unity-catalog/UnityCatalogTreeDataProvider.ts index 6c9f549e4..d4dd52d4f 100644 --- a/packages/databricks-vscode/src/ui/unity-catalog/UnityCatalogTreeDataProvider.ts +++ b/packages/databricks-vscode/src/ui/unity-catalog/UnityCatalogTreeDataProvider.ts @@ -118,6 +118,9 @@ export class UnityCatalogTreeDataProvider case "function": path = `functions/${fullNamePath}`; break; + case "volume": + path = `volumes/${fullNamePath}`; + break; } return this.getExploreUrl(path); }