|
| 1 | +import os |
| 2 | +import shutil |
1 | 3 | import sys |
2 | 4 | from unittest import mock |
3 | 5 |
|
4 | 6 | import pytest |
5 | 7 |
|
6 | 8 | import pre_commit.constants as C |
| 9 | +from pre_commit import envcontext |
7 | 10 | from pre_commit import parse_shebang |
8 | | -from pre_commit.languages.node import get_default_version |
| 11 | +from pre_commit.languages import node |
| 12 | +from pre_commit.prefix import Prefix |
| 13 | +from testing.util import xfailif_windows |
9 | 14 |
|
10 | 15 |
|
11 | | -ACTUAL_GET_DEFAULT_VERSION = get_default_version.__wrapped__ |
| 16 | +ACTUAL_GET_DEFAULT_VERSION = node.get_default_version.__wrapped__ |
12 | 17 |
|
13 | 18 |
|
14 | 19 | @pytest.fixture |
@@ -45,3 +50,31 @@ def test_uses_default_when_node_and_npm_are_not_available(find_exe_mck): |
45 | 50 | def test_sets_default_on_windows(find_exe_mck): |
46 | 51 | find_exe_mck.return_value = '/path/to/exe' |
47 | 52 | assert ACTUAL_GET_DEFAULT_VERSION() == C.DEFAULT |
| 53 | + |
| 54 | + |
| 55 | +@xfailif_windows # pragma: win32 no cover |
| 56 | +def test_healthy_system_node(tmpdir): |
| 57 | + tmpdir.join('package.json').write('{"name": "t", "version": "1.0.0"}') |
| 58 | + |
| 59 | + prefix = Prefix(str(tmpdir)) |
| 60 | + node.install_environment(prefix, 'system', ()) |
| 61 | + assert node.healthy(prefix, 'system') |
| 62 | + |
| 63 | + |
| 64 | +@xfailif_windows # pragma: win32 no cover |
| 65 | +def test_unhealthy_if_system_node_goes_missing(tmpdir): |
| 66 | + bin_dir = tmpdir.join('bin').ensure_dir() |
| 67 | + node_bin = bin_dir.join('node') |
| 68 | + node_bin.mksymlinkto(shutil.which('node')) |
| 69 | + |
| 70 | + prefix_dir = tmpdir.join('prefix').ensure_dir() |
| 71 | + prefix_dir.join('package.json').write('{"name": "t", "version": "1.0.0"}') |
| 72 | + |
| 73 | + path = ('PATH', (str(bin_dir), os.pathsep, envcontext.Var('PATH'))) |
| 74 | + with envcontext.envcontext((path,)): |
| 75 | + prefix = Prefix(str(prefix_dir)) |
| 76 | + node.install_environment(prefix, 'system', ()) |
| 77 | + assert node.healthy(prefix, 'system') |
| 78 | + |
| 79 | + node_bin.remove() |
| 80 | + assert not node.healthy(prefix, 'system') |
0 commit comments