diff --git a/src/client/pythonEnvironments/base/locators/lowLevel/pixiLocator.ts b/src/client/pythonEnvironments/base/locators/lowLevel/pixiLocator.ts index f4a3886a2120..6095e203511a 100644 --- a/src/client/pythonEnvironments/base/locators/lowLevel/pixiLocator.ts +++ b/src/client/pythonEnvironments/base/locators/lowLevel/pixiLocator.ts @@ -24,8 +24,8 @@ async function getVirtualEnvDirs(root: string): Promise { /** * Returns all virtual environment locations to look for in a workspace. */ -function getVirtualEnvRootDirs(root: string): string[] { - return [path.join(path.join(root, '.pixi'), 'envs')]; +export async function getVirtualEnvRootDirs(root: string): Promise { + return asyncFilter([path.join(path.join(root, '.pixi'), 'envs')], pathExists); } export class PixiLocator extends FSWatchingLocator { @@ -33,7 +33,7 @@ export class PixiLocator extends FSWatchingLocator { public constructor(private readonly root: string) { super( - async () => getVirtualEnvRootDirs(this.root), + () => getVirtualEnvRootDirs(this.root), async () => PythonEnvKind.Pixi, { // Note detecting kind of virtual env depends on the file structure around the diff --git a/src/test/pythonEnvironments/base/locators/lowLevel/pixiLocator.unit.test.ts b/src/test/pythonEnvironments/base/locators/lowLevel/pixiLocator.unit.test.ts index b55f61c3a771..3096ab0ccc5a 100644 --- a/src/test/pythonEnvironments/base/locators/lowLevel/pixiLocator.unit.test.ts +++ b/src/test/pythonEnvironments/base/locators/lowLevel/pixiLocator.unit.test.ts @@ -1,9 +1,13 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +import * as assert from 'assert'; import * as sinon from 'sinon'; import * as path from 'path'; -import { PixiLocator } from '../../../../../client/pythonEnvironments/base/locators/lowLevel/pixiLocator'; +import { + PixiLocator, + getVirtualEnvRootDirs, +} from '../../../../../client/pythonEnvironments/base/locators/lowLevel/pixiLocator'; import * as externalDependencies from '../../../../../client/pythonEnvironments/common/externalDependencies'; import * as platformUtils from '../../../../../client/common/utils/platform'; import { makeExecHandler, projectDirs } from '../../../common/environmentManagers/pixi.unit.test'; @@ -81,4 +85,20 @@ suite('Pixi Locator', () => { assertBasicEnvsEqual(actualEnvs, expectedEnvs); }); }); + + suite('getVirtualEnvRootDirs()', () => { + test('returns pixi envs root dir when directory exists', async () => { + pathExistsStub.resolves(true); + const root = '/path/to/project'; + const result = await getVirtualEnvRootDirs(root); + assert.deepStrictEqual(result, [path.join(root, '.pixi', 'envs')]); + }); + + test('returns empty array when .pixi/envs directory does not exist', async () => { + pathExistsStub.resolves(false); + const root = '/path/to/non-pixi-project'; + const result = await getVirtualEnvRootDirs(root); + assert.deepStrictEqual(result, []); + }); + }); });