You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			113 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			113 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Python
		
	
| """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)
 |