@@ -51,40 +51,11 @@ def _make_fake_venv(path: Path) -> Path:
5151 return path
5252
5353
54- def test_create_venv_prefers_manager_mapping (test_workspace : Path , monkeypatch ) -> None :
55- # Simulate a Poetry-managed project
56- pyproject = test_workspace / "pyproject.toml"
57- pyproject .write_text ("[tool.poetry]\n name = 'demo'\n " , encoding = "utf-8" )
58-
54+ def test_resolve_existing_venv_prefers_local (monkeypatch , test_workspace : Path ) -> None :
5955 parent = DummyParent ()
6056 parent .workspace_dir = str (test_workspace )
6157 mgr = VenvManager (parent )
6258
63- called : dict [str , str ] = {}
64-
65- def fake_create (workspace_dir : str , venv_path : str | None = None ) -> None :
66- called ["workspace" ] = workspace_dir
67- called ["venv_path" ] = venv_path or ""
68-
69- monkeypatch .setattr (mgr , "create_venv_with_manager" , fake_create )
70- monkeypatch .setattr (mgr , "_is_tool_available" , lambda tool : True )
71-
72- mgr .create_venv_if_needed (str (test_workspace ))
73-
74- assert called .get ("workspace" ) == str (test_workspace )
75- assert called .get ("venv_path" , "" ).endswith (os .path .join ("" , ".venv" ))
76-
77-
78- def test_resolve_existing_venv_prefers_manager (
79- monkeypatch , test_workspace : Path
80- ) -> None :
81- parent = DummyParent ()
82- parent .workspace_dir = str (test_workspace )
83- mgr = VenvManager (parent )
84-
85- monkeypatch .setattr (
86- mgr , "_detect_manager_existing_venv" , lambda base : "/tmp/manager-venv"
87- )
8859 called = {"select" : False }
8960
9061 def fake_select (_base : str ) -> str | None :
@@ -95,149 +66,8 @@ def fake_select(_base: str) -> str | None:
9566
9667 result = mgr .resolve_existing_venv (str (test_workspace ))
9768
98- assert result == "/tmp/manager-venv"
99- assert called ["select" ] is False
100-
101-
102- def test_install_requirements_prefers_manager (
103- monkeypatch , test_workspace : Path
104- ) -> None :
105- parent = DummyParent ()
106- mgr = VenvManager (parent )
107-
108- called : dict [str , str ] = {}
109-
110- def fake_install (workspace_dir : str , venv_path : str | None = None ) -> None :
111- called ["workspace" ] = workspace_dir
112-
113- monkeypatch .setattr (mgr , "install_dependencies_with_manager" , fake_install )
114- monkeypatch .setattr (mgr , "_detect_environment_manager" , lambda path : "poetry" )
115- monkeypatch .setattr (
116- mgr ,
117- "_get_requirements_file" ,
118- lambda _path : (_ for _ in ()).throw (AssertionError ("should not call" )),
119- )
120-
121- mgr .install_requirements_if_needed (str (test_workspace ))
122-
123- assert called .get ("workspace" ) == str (test_workspace )
124-
125-
126- def test_detect_manager_existing_venv_poetry (test_workspace : Path , monkeypatch ) -> None :
127- pyproject = test_workspace / "pyproject.toml"
128- pyproject .write_text ("[tool.poetry]\n name = 'demo'\n " , encoding = "utf-8" )
129- venv_path = _make_fake_venv (test_workspace / "poetry-venv" )
130-
131- mgr = VenvManager (DummyParent ())
132- monkeypatch .setattr (mgr , "_is_tool_available" , lambda tool : True )
133- monkeypatch .setattr (
134- mgr , "_run_cmd_capture" , lambda cmd , cwd , timeout = 5 : str (venv_path )
135- )
136-
137- result = mgr ._detect_manager_existing_venv (str (test_workspace ))
138- assert result == str (venv_path )
139-
140-
141- def test_detect_manager_existing_venv_pipenv (test_workspace : Path , monkeypatch ) -> None :
142- pipfile = test_workspace / "Pipfile"
143- pipfile .write_text ("[packages]\n " , encoding = "utf-8" )
144- venv_path = _make_fake_venv (test_workspace / "pipenv-venv" )
145-
146- mgr = VenvManager (DummyParent ())
147- monkeypatch .setattr (mgr , "_is_tool_available" , lambda tool : True )
148- monkeypatch .setattr (
149- mgr , "_run_cmd_capture" , lambda cmd , cwd , timeout = 5 : str (venv_path )
150- )
151-
152- result = mgr ._detect_manager_existing_venv (str (test_workspace ))
153- assert result == str (venv_path )
154-
155-
156- def test_detect_manager_existing_venv_pdm (test_workspace : Path , monkeypatch ) -> None :
157- pyproject = test_workspace / "pyproject.toml"
158- pyproject .write_text ("[tool.pdm]\n " , encoding = "utf-8" )
159- venv_path = _make_fake_venv (test_workspace / "pdm-venv" )
160-
161- mgr = VenvManager (DummyParent ())
162- monkeypatch .setattr (mgr , "_is_tool_available" , lambda tool : True )
163- monkeypatch .setattr (
164- mgr , "_run_cmd_capture" , lambda cmd , cwd , timeout = 5 : str (venv_path )
165- )
166-
167- result = mgr ._detect_manager_existing_venv (str (test_workspace ))
168- assert result == str (venv_path )
169-
170-
171- def test_detect_manager_existing_venv_conda_prefix (
172- test_workspace : Path , monkeypatch
173- ) -> None :
174- venv_path = _make_fake_venv (test_workspace / "conda-env" )
175- env_file = test_workspace / "environment.yml"
176- env_file .write_text (f"name: demo\n prefix: { venv_path } \n " , encoding = "utf-8" )
177-
178- mgr = VenvManager (DummyParent ())
179- monkeypatch .setattr (mgr , "_is_tool_available" , lambda tool : True )
180-
181- result = mgr ._detect_manager_existing_venv (str (test_workspace ))
182- assert result == str (venv_path )
183-
184-
185- def test_detect_manager_existing_venv_conda_name (
186- test_workspace : Path , monkeypatch
187- ) -> None :
188- venv_path = _make_fake_venv (test_workspace / "conda-name-env" )
189- env_file = test_workspace / "environment.yml"
190- env_name = venv_path .name
191- env_file .write_text (f"name: { env_name } \n " , encoding = "utf-8" )
192-
193- mgr = VenvManager (DummyParent ())
194- monkeypatch .setattr (mgr , "_is_tool_available" , lambda tool : True )
195-
196- class _FakeResult :
197- returncode = 0
198- stdout = f'{{"envs": ["{ venv_path } "]}}'
199- stderr = ""
200-
201- monkeypatch .setattr (
202- "Core.Venv_Manager.Manager.subprocess.run" , lambda * a , ** k : _FakeResult ()
203- )
204-
205- result = mgr ._detect_manager_existing_venv (str (test_workspace ))
206- assert result == str (venv_path )
207-
208-
209- def test_create_venv_with_manager_fallback (monkeypatch , test_workspace : Path ) -> None :
210- mgr = VenvManager (DummyParent ())
211- monkeypatch .setattr (mgr , "_detect_environment_manager" , lambda path : "poetry" )
212- monkeypatch .setattr (mgr , "_is_tool_available" , lambda tool : False )
213- called : dict [str , bool ] = {}
214-
215- def fake_create (path : str , prefer_manager : bool = True ):
216- called ["prefer_manager" ] = prefer_manager
217-
218- monkeypatch .setattr (mgr , "create_venv_if_needed" , fake_create )
219-
220- mgr .create_venv_with_manager (str (test_workspace ))
221- assert called .get ("prefer_manager" ) is False
222-
223-
224- def test_install_dependencies_with_manager_fallback (
225- monkeypatch , test_workspace : Path
226- ) -> None :
227- mgr = VenvManager (DummyParent ())
228- monkeypatch .setattr (mgr , "_detect_environment_manager" , lambda path : "poetry" )
229- monkeypatch .setattr (mgr , "_is_tool_available" , lambda tool : False )
230- called : dict [str , bool ] = {}
231-
232- def fake_install (path : str , force_pip : bool = False ):
233- called ["force_pip" ] = force_pip
234- called ["path" ] = path
235-
236- monkeypatch .setattr (mgr , "install_requirements_if_needed" , fake_install )
237-
238- mgr .install_dependencies_with_manager (str (test_workspace ))
239- assert called .get ("force_pip" ) is True
240- assert called .get ("path" ) == str (test_workspace )
69+ assert result == "/tmp/local-venv"
70+ assert called ["select" ] is True
24171
24272
24373def test_pip_break_system_args_enabled_only_on_linux_system_python (monkeypatch ) -> None :
0 commit comments