1+ import * as assert from 'assert' ;
2+ import * as sinon from 'sinon' ;
3+ import { LogOutputChannel } from 'vscode' ;
4+ import { VenvManager } from '../../../managers/builtin/venvManager' ;
5+ import * as helpers from '../../../managers/builtin/helpers' ;
6+
7+ suite ( 'VenvManager uv labeling tests' , ( ) => {
8+ let sandbox : sinon . SinonSandbox ;
9+
10+ setup ( ( ) => {
11+ sandbox = sinon . createSandbox ( ) ;
12+ } ) ;
13+
14+ teardown ( ( ) => {
15+ sandbox . restore ( ) ;
16+ } ) ;
17+
18+ test ( 'should display "venv" when uv is not available' , async ( ) => {
19+ // Mock isUvInstalled to return false
20+ sandbox . stub ( helpers , 'isUvInstalled' ) . resolves ( false ) ;
21+
22+ // Create mocks for required dependencies
23+ const mockNativeFinder = { } as any ;
24+ const mockApi = { } as any ;
25+ const mockBaseManager = { } as any ;
26+ const mockLog = { } as LogOutputChannel ;
27+
28+ const mockInternalRefresh = sandbox . stub ( VenvManager . prototype , 'internalRefresh' as any ) . resolves ( ) ;
29+
30+ const manager = new VenvManager ( mockNativeFinder , mockApi , mockBaseManager , mockLog ) ;
31+
32+ // Verify initial state
33+ assert . strictEqual ( manager . displayName , 'venv' ) ;
34+
35+ await manager . initialize ( ) ;
36+
37+ // Verify displayName remains unchanged when uv is not available
38+ assert . strictEqual ( manager . displayName , 'venv' ) ;
39+ assert . ok ( mockInternalRefresh . calledOnce ) ;
40+ } ) ;
41+
42+ test ( 'should display "venv [uv]" when uv is available' , async ( ) => {
43+ // Mock isUvInstalled to return true
44+ sandbox . stub ( helpers , 'isUvInstalled' ) . resolves ( true ) ;
45+
46+ // Create mocks for required dependencies
47+ const mockNativeFinder = { } as any ;
48+ const mockApi = { } as any ;
49+ const mockBaseManager = { } as any ;
50+ const mockLog = {
51+ info : sandbox . stub ( )
52+ } as any ;
53+
54+ const mockInternalRefresh = sandbox . stub ( VenvManager . prototype , 'internalRefresh' as any ) . resolves ( ) ;
55+
56+ const manager = new VenvManager ( mockNativeFinder , mockApi , mockBaseManager , mockLog ) ;
57+
58+ // Verify initial state
59+ assert . strictEqual ( manager . displayName , 'venv' ) ;
60+
61+ await manager . initialize ( ) ;
62+
63+ // Verify displayName is updated when uv is available
64+ assert . strictEqual ( manager . displayName , 'venv [uv]' ) ;
65+ assert . ok ( mockInternalRefresh . calledOnce ) ;
66+ assert . ok ( mockLog . info . calledWith ( 'uv detected - updating venv manager display name' ) ) ;
67+ } ) ;
68+
69+ test ( 'should only initialize once and preserve displayName' , async ( ) => {
70+ // Mock isUvInstalled to return true
71+ sandbox . stub ( helpers , 'isUvInstalled' ) . resolves ( true ) ;
72+
73+ // Create mocks for required dependencies
74+ const mockNativeFinder = { } as any ;
75+ const mockApi = { } as any ;
76+ const mockBaseManager = { } as any ;
77+ const mockLog = {
78+ info : sandbox . stub ( )
79+ } as any ;
80+
81+ const mockInternalRefresh = sandbox . stub ( VenvManager . prototype , 'internalRefresh' as any ) . resolves ( ) ;
82+
83+ const manager = new VenvManager ( mockNativeFinder , mockApi , mockBaseManager , mockLog ) ;
84+
85+ // Initialize multiple times
86+ await manager . initialize ( ) ;
87+ await manager . initialize ( ) ;
88+
89+ // Verify displayName is set correctly and internal refresh is called only once
90+ assert . strictEqual ( manager . displayName , 'venv [uv]' ) ;
91+ assert . ok ( mockInternalRefresh . calledOnce ) ;
92+ assert . ok ( mockLog . info . calledOnce ) ;
93+ } ) ;
94+ } ) ;
0 commit comments