Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/features/views/treeViewItems.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ export class EnvManagerTreeItem implements EnvTreeItem {
public readonly parent: undefined;
constructor(public readonly manager: InternalEnvironmentManager) {
const item = new TreeItem(manager.displayName, TreeItemCollapsibleState.Collapsed);
item.id = manager.id;
item.contextValue = this.getContextValue();
item.description = manager.description;
item.tooltip = manager.tooltip ?? manager.description;
Expand All @@ -88,6 +89,7 @@ export class PythonGroupEnvTreeItem implements EnvTreeItem {
) {
const label = typeof group === 'string' ? group : group.name;
const item = new TreeItem(label, TreeItemCollapsibleState.Collapsed);
item.id = `${this.parent.manager.id}:${label}`;
item.contextValue = `pythonEnvGroup;${this.parent.manager.id}:${label};`;
this.treeItem = item;

Expand Down Expand Up @@ -127,6 +129,7 @@ export class PythonEnvTreeItem implements EnvTreeItem {
}

const item = new TreeItem(name, TreeItemCollapsibleState.Collapsed);
item.id = environment.envId.id;
item.contextValue = this.getContextValue();

// Build description with optional [uv] indicator and disambiguation suffix
Expand Down
80 changes: 80 additions & 0 deletions src/test/features/views/treeViewItems.unit.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
EnvManagerTreeItem,
getEnvironmentParentDirName,
PythonEnvTreeItem,
PythonGroupEnvTreeItem,
} from '../../../features/views/treeViewItems';
import { InternalEnvironmentManager, PythonEnvironmentImpl } from '../../../internal.api';

Expand Down Expand Up @@ -73,6 +74,17 @@ function createMockManager(

suite('Test TreeView Items', () => {
suite('EnvManagerTreeItem', () => {
test('Sets id to manager id for tree item identification', () => {
// Arrange
const manager = createMockManager({ id: 'ms-python.python:venv' });

// Act
const item = new EnvManagerTreeItem(manager);

// Assert
assert.strictEqual(item.treeItem.id, 'ms-python.python:venv');
});

test('Context value excludes create when manager does not support it', () => {
// Arrange
const manager = createMockManager({ supportsCreate: false });
Expand Down Expand Up @@ -127,6 +139,20 @@ suite('Test TreeView Items', () => {
managerWithRemove = new EnvManagerTreeItem(createMockManager({ supportsRemove: true }));
});

test('Sets id to environment id for tree item identification', () => {
// Arrange
const env = createMockEnvironment({
id: 'unique-env-id-123',
environmentPath: '/home/user/envs/.venv/bin/python',
});

// Act
const item = new PythonEnvTreeItem(env, managerWithoutRemove);

// Assert
assert.strictEqual(item.treeItem.id, 'unique-env-id-123');
});

test('Context value excludes remove and activatable when not supported', () => {
// Arrange
const env = createMockEnvironment({
Expand Down Expand Up @@ -242,6 +268,60 @@ suite('Test TreeView Items', () => {
});
});

suite('PythonGroupEnvTreeItem', () => {
let parentManager: EnvManagerTreeItem;

setup(() => {
parentManager = new EnvManagerTreeItem(createMockManager({ id: 'ms-python.python:conda' }));
});

test('Sets id combining manager id and group name for tree item identification', () => {
// Arrange & Act
const item = new PythonGroupEnvTreeItem(parentManager, 'base');

// Assert
assert.strictEqual(item.treeItem.id, 'ms-python.python:conda:base');
});

test('Sets id correctly when group is EnvironmentGroupInfo object', () => {
// Arrange
const groupInfo = { name: 'dev-envs', description: 'Development environments' };

// Act
const item = new PythonGroupEnvTreeItem(parentManager, groupInfo);

// Assert
assert.strictEqual(item.treeItem.id, 'ms-python.python:conda:dev-envs');
});

test('Uses string group as label', () => {
// Arrange & Act
const item = new PythonGroupEnvTreeItem(parentManager, 'my-group');

// Assert
assert.strictEqual(item.treeItem.label, 'my-group');
});

test('Uses group name from EnvironmentGroupInfo as label', () => {
// Arrange
const groupInfo = { name: 'production', description: 'Production environments' };

// Act
const item = new PythonGroupEnvTreeItem(parentManager, groupInfo);

// Assert
assert.strictEqual(item.treeItem.label, 'production');
});

test('Sets contextValue with manager id and group name', () => {
// Arrange & Act
const item = new PythonGroupEnvTreeItem(parentManager, 'test-group');

// Assert
assert.strictEqual(item.treeItem.contextValue, 'pythonEnvGroup;ms-python.python:conda:test-group;');
});
});

suite('getEnvironmentParentDirName', () => {
test('Extracts parent folder from Unix path with bin directory', () => {
// Arrange
Expand Down