@@ -9,12 +9,14 @@ import * as sender from '../../../common/telemetry/sender';
99import * as workspaceApis from '../../../common/workspace.apis' ;
1010import {
1111 addPythonProjectSetting ,
12+ getDefaultEnvManagerSetting ,
13+ getDefaultPkgManagerSetting ,
1214 migrateGlobalDefaultEnvManagerSetting ,
1315 setAllManagerSettings ,
1416 setEnvironmentManager ,
1517 setPackageManager ,
1618} from '../../../features/settings/settingHelpers' ;
17- import { PythonProjectsImpl } from '../../../internal.api' ;
19+ import { PythonProjectManager , PythonProjectsImpl } from '../../../internal.api' ;
1820import { MockWorkspaceConfiguration } from '../../mocks/mockWorkspaceConfig' ;
1921
2022/**
@@ -25,6 +27,55 @@ function getTestWorkspacePath(): string {
2527 return process . platform === 'win32' ? 'C:\\workspace' : '/workspace' ;
2628}
2729
30+ suite ( 'Setting Helpers - Optional Project Managers' , ( ) => {
31+ const VENV_MANAGER_ID = 'ms-python.python:venv' ;
32+ const PIP_MANAGER_ID = 'ms-python.python:pip' ;
33+ const workspacePath = getTestWorkspacePath ( ) ;
34+ const workspaceUri = Uri . file ( workspacePath ) ;
35+ const projectUri = Uri . joinPath ( workspaceUri , 'backend' ) ;
36+ const workspaceFolder : WorkspaceFolder = {
37+ uri : workspaceUri ,
38+ name : 'workspace' ,
39+ index : 0 ,
40+ } ;
41+ const project = {
42+ name : 'backend' ,
43+ uri : projectUri ,
44+ } ;
45+ const projectManager = {
46+ get : ( uri : Uri ) => ( uri . fsPath === projectUri . fsPath ? project : undefined ) ,
47+ } as unknown as PythonProjectManager ;
48+
49+ teardown ( ( ) => {
50+ sinon . restore ( ) ;
51+ } ) ;
52+
53+ function createPathOnlyProjectConfig ( ) : MockWorkspaceConfiguration {
54+ const mockConfig = new MockWorkspaceConfiguration ( ) ;
55+ ( mockConfig as any ) . get = < T > ( key : string , defaultValue ?: T ) : T | undefined => {
56+ if ( key === 'pythonProjects' ) {
57+ return [ { path : 'backend' } ] as T ;
58+ }
59+ if ( key === 'defaultEnvManager' ) {
60+ return VENV_MANAGER_ID as T ;
61+ }
62+ if ( key === 'defaultPackageManager' ) {
63+ return PIP_MANAGER_ID as T ;
64+ }
65+ return defaultValue ;
66+ } ;
67+ return mockConfig ;
68+ }
69+
70+ test ( 'uses default managers when a pythonProjects entry only specifies path' , ( ) => {
71+ sinon . stub ( workspaceApis , 'getConfiguration' ) . returns ( createPathOnlyProjectConfig ( ) ) ;
72+ sinon . stub ( workspaceApis , 'getWorkspaceFolder' ) . returns ( workspaceFolder ) ;
73+
74+ assert . strictEqual ( getDefaultEnvManagerSetting ( projectManager , projectUri ) , VENV_MANAGER_ID ) ;
75+ assert . strictEqual ( getDefaultPkgManagerSetting ( projectManager , projectUri ) , PIP_MANAGER_ID ) ;
76+ } ) ;
77+ } ) ;
78+
2879/**
2980 * These tests verify that manager edits without a project do not write settings
3081 * and are logged explicitly as ignored global edits.
0 commit comments