Skip to content

Commit 456f3f1

Browse files
authored
chore: ensure bootstrap tests only write config to temp dir
1 parent 1e771a3 commit 456f3f1

File tree

4 files changed

+28
-10
lines changed

4 files changed

+28
-10
lines changed

src/algokit/core/config_commands/js_package_manager.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import enum
22
import logging
3+
from pathlib import Path
34

45
import click
56
import questionary
@@ -8,8 +9,6 @@
89

910
logger = logging.getLogger(__name__)
1011

11-
JS_PACKAGE_MANAGER_CONFIG_FILE = get_app_config_dir() / "default-js-package-manager"
12-
1312

1413
class JSPackageManager(str, enum.Enum):
1514
NPM = "npm"
@@ -19,20 +18,26 @@ def __str__(self) -> str:
1918
return self.value
2019

2120

21+
def _get_js_config_file() -> Path:
22+
return get_app_config_dir() / "default-js-package-manager"
23+
24+
2225
def get_js_package_manager() -> str | None:
2326
"""Get the default JavaScript package manager for use by AlgoKit CLI.
2427
None implies it has not been set yet, likely to be first time user.
2528
"""
2629

27-
if JS_PACKAGE_MANAGER_CONFIG_FILE.exists():
28-
return JS_PACKAGE_MANAGER_CONFIG_FILE.read_text().strip()
30+
config_file = _get_js_config_file()
31+
if config_file.exists():
32+
return config_file.read_text().strip()
2933
return None
3034

3135

3236
def save_js_package_manager(manager: str) -> None:
3337
if manager not in JSPackageManager:
3438
raise ValueError(f"Invalid JavaScript package manager: {manager}")
35-
JS_PACKAGE_MANAGER_CONFIG_FILE.write_text(manager)
39+
config_file = _get_js_config_file()
40+
config_file.write_text(manager)
3641

3742

3843
@click.command("js-package-manager", short_help="Configure the default JavaScript package manager for AlgoKit.")

src/algokit/core/config_commands/py_package_manager.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import enum
22
import logging
3+
from pathlib import Path
34

45
import click
56
import questionary
@@ -8,8 +9,6 @@
89

910
logger = logging.getLogger(__name__)
1011

11-
PY_PACKAGE_MANAGER_CONFIG_FILE = get_app_config_dir() / "default-py-package-manager"
12-
1312

1413
class PyPackageManager(str, enum.Enum):
1514
POETRY = "poetry"
@@ -19,20 +18,26 @@ def __str__(self) -> str:
1918
return self.value
2019

2120

21+
def _get_py_config_file() -> Path:
22+
return get_app_config_dir() / "default-py-package-manager"
23+
24+
2225
def get_py_package_manager() -> str | None:
2326
"""Get the default Python package manager for use by AlgoKit CLI.
2427
None implies it has not been set yet, likely to be first time user.
2528
"""
2629

27-
if PY_PACKAGE_MANAGER_CONFIG_FILE.exists():
28-
return PY_PACKAGE_MANAGER_CONFIG_FILE.read_text().strip()
30+
config_file = _get_py_config_file()
31+
if config_file.exists():
32+
return config_file.read_text().strip()
2933
return None
3034

3135

3236
def save_py_package_manager(manager: str) -> None:
3337
if manager not in PyPackageManager:
3438
raise ValueError(f"Invalid Python package manager: {manager}")
35-
PY_PACKAGE_MANAGER_CONFIG_FILE.write_text(manager)
39+
config_file = _get_py_config_file()
40+
config_file.write_text(manager)
3641

3742

3843
@click.command("py-package-manager", short_help="Configure the default Python package manager for AlgoKit.")

tests/config/test_package_managers.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
Focuses on critical user-facing functionality only.
44
"""
55

6+
import pytest
7+
68
from tests.utils.approvals import verify
79
from tests.utils.click_invoker import invoke
810

@@ -38,27 +40,31 @@ def test_py_package_manager_invalid_argument() -> None:
3840
verify(result.output)
3941

4042

43+
@pytest.mark.usefixtures("app_dir_mock")
4144
def test_js_package_manager_set_npm() -> None:
4245
"""Test setting npm as js package manager."""
4346
result = invoke("config js-package-manager npm")
4447
assert result.exit_code == 0
4548
verify(result.output)
4649

4750

51+
@pytest.mark.usefixtures("app_dir_mock")
4852
def test_js_package_manager_set_pnpm() -> None:
4953
"""Test setting pnpm as js package manager."""
5054
result = invoke("config js-package-manager pnpm")
5155
assert result.exit_code == 0
5256
verify(result.output)
5357

5458

59+
@pytest.mark.usefixtures("app_dir_mock")
5560
def test_py_package_manager_set_poetry() -> None:
5661
"""Test setting poetry as py package manager."""
5762
result = invoke("config py-package-manager poetry")
5863
assert result.exit_code == 0
5964
verify(result.output)
6065

6166

67+
@pytest.mark.usefixtures("app_dir_mock")
6268
def test_py_package_manager_set_uv() -> None:
6369
"""Test setting uv as py package manager."""
6470
result = invoke("config py-package-manager uv")

tests/utils/app_dir_mock.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ def tmp_app_dir(mocker: MockerFixture, tmp_path: Path) -> AppDirs:
1414
app_config_dir = tmp_path / "config"
1515
app_config_dir.mkdir()
1616
mocker.patch("algokit.core.sandbox.get_app_config_dir").return_value = app_config_dir
17+
mocker.patch("algokit.core.config_commands.js_package_manager.get_app_config_dir").return_value = app_config_dir
18+
mocker.patch("algokit.core.config_commands.py_package_manager.get_app_config_dir").return_value = app_config_dir
1719

1820
app_state_dir = tmp_path / "state"
1921
app_state_dir.mkdir()

0 commit comments

Comments
 (0)