diff --git a/src/objectExplorer/nodes/treeNodeInfo.ts b/src/objectExplorer/nodes/treeNodeInfo.ts index 300e230f40..cd0d9b7e6a 100644 --- a/src/objectExplorer/nodes/treeNodeInfo.ts +++ b/src/objectExplorer/nodes/treeNodeInfo.ts @@ -10,6 +10,7 @@ import { ObjectExplorerUtils } from "../objectExplorerUtils"; import * as Constants from "../../constants/constants"; import { ITreeNodeInfo, ObjectMetadata } from "vscode-mssql"; import { IConnectionProfile } from "../../models/interfaces"; +import { generateGuid } from "../../models/utils"; export class TreeNodeInfo extends vscode.TreeItem implements ITreeNodeInfo { private _nodePath: string; @@ -68,9 +69,9 @@ export class TreeNodeInfo extends vscode.TreeItem implements ITreeNodeInfo { this.id = this.generateId(); } - // Gernating a unique ID for the node + // Generating a unique ID for the node protected generateId(): string { - return `${this._connectionProfile?.id}-${this._nodePath}-${Date.now()}`; + return `${this._connectionProfile?.id}-${this._nodePath}-${generateGuid()}`; } public static fromNodeInfo( diff --git a/test/unit/treeNodeInfo.test.ts b/test/unit/treeNodeInfo.test.ts new file mode 100644 index 0000000000..f171f5acf0 --- /dev/null +++ b/test/unit/treeNodeInfo.test.ts @@ -0,0 +1,40 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { expect } from "chai"; +import { TreeNodeInfo } from "../../src/objectExplorer/nodes/treeNodeInfo"; + +suite("TreeNodeInfo", () => { + test("When creating multiple TreeNodeInfo in quick succession, the nodePath should be unique", () => { + const node1 = new TreeNodeInfo( + "node_label", + undefined, + undefined, + "node_path", + undefined, + undefined, + "session_id", + undefined, + undefined, + undefined, + undefined, + ); + + const node2 = new TreeNodeInfo( + "node_label", + undefined, + undefined, + "node_path", + undefined, + undefined, + "session_id", + undefined, + undefined, + undefined, + undefined, + ); + expect(node1.id).to.not.equal(node2.id, "Node IDs should be unique"); + }); +});