Skip to content

Commit fb20bc1

Browse files
committed
feat: fix bug with reveal icon with id assignments
1 parent 1e25bbb commit fb20bc1

File tree

2 files changed

+83
-0
lines changed

2 files changed

+83
-0
lines changed

src/features/views/treeViewItems.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ export class EnvManagerTreeItem implements EnvTreeItem {
6565
public readonly parent: undefined;
6666
constructor(public readonly manager: InternalEnvironmentManager) {
6767
const item = new TreeItem(manager.displayName, TreeItemCollapsibleState.Collapsed);
68+
item.id = manager.id;
6869
item.contextValue = this.getContextValue();
6970
item.description = manager.description;
7071
item.tooltip = manager.tooltip ?? manager.description;
@@ -88,6 +89,7 @@ export class PythonGroupEnvTreeItem implements EnvTreeItem {
8889
) {
8990
const label = typeof group === 'string' ? group : group.name;
9091
const item = new TreeItem(label, TreeItemCollapsibleState.Collapsed);
92+
item.id = `${this.parent.manager.id}:${label}`;
9193
item.contextValue = `pythonEnvGroup;${this.parent.manager.id}:${label};`;
9294
this.treeItem = item;
9395

@@ -127,6 +129,7 @@ export class PythonEnvTreeItem implements EnvTreeItem {
127129
}
128130

129131
const item = new TreeItem(name, TreeItemCollapsibleState.Collapsed);
132+
item.id = environment.envId.id;
130133
item.contextValue = this.getContextValue();
131134

132135
// Build description with optional [uv] indicator and disambiguation suffix

src/test/features/views/treeViewItems.unit.test.ts

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
EnvManagerTreeItem,
55
getEnvironmentParentDirName,
66
PythonEnvTreeItem,
7+
PythonGroupEnvTreeItem,
78
} from '../../../features/views/treeViewItems';
89
import { InternalEnvironmentManager, PythonEnvironmentImpl } from '../../../internal.api';
910

@@ -73,6 +74,17 @@ function createMockManager(
7374

7475
suite('Test TreeView Items', () => {
7576
suite('EnvManagerTreeItem', () => {
77+
test('Sets id to manager id for tree item identification', () => {
78+
// Arrange
79+
const manager = createMockManager({ id: 'ms-python.python:venv' });
80+
81+
// Act
82+
const item = new EnvManagerTreeItem(manager);
83+
84+
// Assert
85+
assert.strictEqual(item.treeItem.id, 'ms-python.python:venv');
86+
});
87+
7688
test('Context value excludes create when manager does not support it', () => {
7789
// Arrange
7890
const manager = createMockManager({ supportsCreate: false });
@@ -127,6 +139,20 @@ suite('Test TreeView Items', () => {
127139
managerWithRemove = new EnvManagerTreeItem(createMockManager({ supportsRemove: true }));
128140
});
129141

142+
test('Sets id to environment id for tree item identification', () => {
143+
// Arrange
144+
const env = createMockEnvironment({
145+
id: 'unique-env-id-123',
146+
environmentPath: '/home/user/envs/.venv/bin/python',
147+
});
148+
149+
// Act
150+
const item = new PythonEnvTreeItem(env, managerWithoutRemove);
151+
152+
// Assert
153+
assert.strictEqual(item.treeItem.id, 'unique-env-id-123');
154+
});
155+
130156
test('Context value excludes remove and activatable when not supported', () => {
131157
// Arrange
132158
const env = createMockEnvironment({
@@ -242,6 +268,60 @@ suite('Test TreeView Items', () => {
242268
});
243269
});
244270

271+
suite('PythonGroupEnvTreeItem', () => {
272+
let parentManager: EnvManagerTreeItem;
273+
274+
setup(() => {
275+
parentManager = new EnvManagerTreeItem(createMockManager({ id: 'ms-python.python:conda' }));
276+
});
277+
278+
test('Sets id combining manager id and group name for tree item identification', () => {
279+
// Arrange & Act
280+
const item = new PythonGroupEnvTreeItem(parentManager, 'base');
281+
282+
// Assert
283+
assert.strictEqual(item.treeItem.id, 'ms-python.python:conda:base');
284+
});
285+
286+
test('Sets id correctly when group is EnvironmentGroupInfo object', () => {
287+
// Arrange
288+
const groupInfo = { name: 'dev-envs', description: 'Development environments' };
289+
290+
// Act
291+
const item = new PythonGroupEnvTreeItem(parentManager, groupInfo);
292+
293+
// Assert
294+
assert.strictEqual(item.treeItem.id, 'ms-python.python:conda:dev-envs');
295+
});
296+
297+
test('Uses string group as label', () => {
298+
// Arrange & Act
299+
const item = new PythonGroupEnvTreeItem(parentManager, 'my-group');
300+
301+
// Assert
302+
assert.strictEqual(item.treeItem.label, 'my-group');
303+
});
304+
305+
test('Uses group name from EnvironmentGroupInfo as label', () => {
306+
// Arrange
307+
const groupInfo = { name: 'production', description: 'Production environments' };
308+
309+
// Act
310+
const item = new PythonGroupEnvTreeItem(parentManager, groupInfo);
311+
312+
// Assert
313+
assert.strictEqual(item.treeItem.label, 'production');
314+
});
315+
316+
test('Sets contextValue with manager id and group name', () => {
317+
// Arrange & Act
318+
const item = new PythonGroupEnvTreeItem(parentManager, 'test-group');
319+
320+
// Assert
321+
assert.strictEqual(item.treeItem.contextValue, 'pythonEnvGroup;ms-python.python:conda:test-group;');
322+
});
323+
});
324+
245325
suite('getEnvironmentParentDirName', () => {
246326
test('Extracts parent folder from Unix path with bin directory', () => {
247327
// Arrange

0 commit comments

Comments
 (0)