Skip to content

Commit 490071a

Browse files
Copiloteleanorjboyd
andcommitted
Implement Pipenv manager refresh on expansion with tests
Co-authored-by: eleanorjboyd <26030610+eleanorjboyd@users.noreply.github.com>
1 parent 9739b8f commit 490071a

2 files changed

Lines changed: 66 additions & 0 deletions

File tree

src/features/views/envManagersView.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,12 @@ export class EnvManagerView implements TreeDataProvider<EnvTreeItem>, Disposable
9595
if (element.kind === EnvTreeItemKind.manager) {
9696
const manager = (element as EnvManagerTreeItem).manager;
9797
const views: EnvTreeItem[] = [];
98+
99+
// Refresh Pipenv manager when expanded to pick up newly created environments
100+
if (manager.name === 'pipenv') {
101+
await manager.refresh(undefined);
102+
}
103+
98104
const envs = await manager.getEnvironments('all');
99105
envs.filter((e) => !e.group).forEach((env) => {
100106
const view = new PythonEnvTreeItem(env, element as EnvManagerTreeItem, this.selected.get(env.envId.id));
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import * as assert from 'assert';
2+
import * as sinon from 'sinon';
3+
import { InternalEnvironmentManager } from '../../../internal.api';
4+
5+
suite('EnvManagerView Logic Tests', () => {
6+
test('Pipenv manager should be identified by name', () => {
7+
// Create pipenv manager with correct name
8+
const pipenvManager = new InternalEnvironmentManager('pipenv-manager', {
9+
name: 'pipenv',
10+
displayName: 'Pipenv',
11+
description: 'Pipenv environment manager',
12+
preferredPackageManagerId: 'pip',
13+
refresh: () => Promise.resolve(),
14+
getEnvironments: () => Promise.resolve([]),
15+
resolve: () => Promise.resolve(undefined),
16+
set: () => Promise.resolve(),
17+
get: () => Promise.resolve(undefined),
18+
});
19+
20+
// Create other manager with different name
21+
const otherManager = new InternalEnvironmentManager('other-manager', {
22+
name: 'other',
23+
displayName: 'Other',
24+
description: 'Other environment manager',
25+
preferredPackageManagerId: 'pip',
26+
refresh: () => Promise.resolve(),
27+
getEnvironments: () => Promise.resolve([]),
28+
resolve: () => Promise.resolve(undefined),
29+
set: () => Promise.resolve(),
30+
get: () => Promise.resolve(undefined),
31+
});
32+
33+
// Test that pipenv manager is correctly identified
34+
assert.strictEqual(pipenvManager.name, 'pipenv');
35+
assert.strictEqual(otherManager.name, 'other');
36+
});
37+
38+
test('Refresh method exists on manager and can be called', async () => {
39+
const refreshSpy = sinon.spy();
40+
41+
const manager = new InternalEnvironmentManager('test-manager', {
42+
name: 'pipenv',
43+
displayName: 'Pipenv',
44+
description: 'Test manager',
45+
preferredPackageManagerId: 'pip',
46+
refresh: refreshSpy,
47+
getEnvironments: () => Promise.resolve([]),
48+
resolve: () => Promise.resolve(undefined),
49+
set: () => Promise.resolve(),
50+
get: () => Promise.resolve(undefined),
51+
});
52+
53+
// Call refresh method
54+
await manager.refresh(undefined);
55+
56+
// Verify spy was called
57+
assert.strictEqual(refreshSpy.calledOnce, true);
58+
assert.strictEqual(refreshSpy.calledWith(undefined), true);
59+
});
60+
});

0 commit comments

Comments
 (0)