| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- """Test yarn registry replacement"""
- # Copyright (c) Jupyter Development Team.
- # Distributed under the terms of the Modified BSD License.
- import logging
- import subprocess
- from os.path import join as pjoin
- from unittest.mock import patch
- from jupyterlab import commands
- from .test_jupyterlab import AppHandlerTest
- class TestAppHandlerRegistry(AppHandlerTest):
- def test_node_not_available(self):
- # patch should be applied on `jupyterlab.commands` and not on `jupyterlab_server.process`
- # See https://docs.python.org/3/library/unittest.mock.html#where-to-patch
- with patch("jupyterlab.commands.which") as which:
- which.side_effect = ValueError("Command not found")
- logger = logging.getLogger("jupyterlab")
- config = commands._yarn_config(logger)
- which.assert_called_once_with("node")
- self.assertDictEqual(config, {"yarn config": {}, "npm config": {}})
- def test_yarn_config(self):
- with patch("subprocess.check_output") as check_output:
- yarn_registry = "https://private.yarn/manager"
- check_output.return_value = b"\n".join(
- [
- b'{"type":"info","data":"yarn config"}',
- b'{"type":"inspect","data":{"registry":"'
- + bytes(yarn_registry, "utf-8")
- + b'"}}',
- b'{"type":"info","data":"npm config"}',
- b'{"type":"inspect","data":{"registry":"'
- + bytes(yarn_registry, "utf-8")
- + b'"}}',
- ]
- )
- logger = logging.getLogger("jupyterlab")
- config = commands._yarn_config(logger)
- self.assertDictEqual(
- config,
- {
- "yarn config": {"registry": yarn_registry},
- "npm config": {"registry": yarn_registry},
- },
- )
- def test_yarn_config_failure(self):
- with patch("subprocess.check_output") as check_output:
- check_output.side_effect = subprocess.CalledProcessError(
- 1, ["yarn", "config", "list"], b"", stderr=b"yarn config failed."
- )
- logger = logging.getLogger("jupyterlab")
- config = commands._yarn_config(logger)
- self.assertDictEqual(config, {"yarn config": {}, "npm config": {}})
- def test_get_registry(self):
- with patch("subprocess.check_output") as check_output:
- yarn_registry = "https://private.yarn/manager"
- check_output.return_value = b"\n".join(
- [
- b'{"type":"info","data":"yarn config"}',
- b'{"type":"inspect","data":{"registry":"'
- + bytes(yarn_registry, "utf-8")
- + b'"}}',
- b'{"type":"info","data":"npm config"}',
- b'{"type":"inspect","data":{"registry":"'
- + bytes(yarn_registry, "utf-8")
- + b'"}}',
- ]
- )
- handler = commands.AppOptions()
- self.assertEqual(handler.registry, yarn_registry)
- def test_populate_staging(self):
- with patch("subprocess.check_output") as check_output:
- yarn_registry = "https://private.yarn/manager"
- check_output.return_value = b"\n".join(
- [
- b'{"type":"info","data":"yarn config"}',
- b'{"type":"inspect","data":{"registry":"'
- + bytes(yarn_registry, "utf-8")
- + b'"}}',
- b'{"type":"info","data":"npm config"}',
- b'{"type":"inspect","data":{"registry":"'
- + bytes(yarn_registry, "utf-8")
- + b'"}}',
- ]
- )
- staging = pjoin(self.app_dir, "staging")
- handler = commands._AppHandler(commands.AppOptions())
- handler._populate_staging()
- lock_path = pjoin(staging, "yarn.lock")
- with open(lock_path) as f:
- lock = f.read()
- # yarn >=2.x does not record the registry in the lockfile
- self.assertNotIn(commands.YARN_DEFAULT_REGISTRY, lock)
- self.assertNotIn(yarn_registry, lock)
|