def test_npm_install_install( self, caplog: LogCaptureFixture, colorize: bool, fake_process: FakeProcess, is_noninteractive: bool, mocker: MockerFixture, runway_context: MockRunwayContext, tmp_path: Path, use_ci: bool, ) -> None: """Test npm_install install.""" caplog.set_level(logging.INFO, logger=MODULE) mocker.patch(f"{MODULE}.use_npm_ci", return_value=use_ci) mocker.patch.object(RunwayModuleNpm, "check_for_npm") mocker.patch.object(RunwayModuleNpm, "warn_on_boto_env_vars") runway_context.env.ci = is_noninteractive runway_context.env.vars["RUNWAY_COLORIZE"] = str(colorize) cmd: List[Any] = [NPM_BIN, "install"] if not colorize: cmd.append("--no-color") fake_process.register_subprocess(cmd, returncode=0) RunwayModuleNpm(runway_context, module_root=tmp_path).npm_install() assert "running npm install..." in caplog.messages assert fake_process.call_count(cmd) == 1
def test_init_npm_not_found(self, mocker: MockerFixture, runway_context: MockRunwayContext, tmp_path: Path) -> None: """Test __init__ raise NpmNotFound.""" mock_check_for_npm = mocker.patch.object(RunwayModuleNpm, "check_for_npm", side_effect=NpmNotFound) mock_warn_on_boto_env_vars = mocker.patch.object( RunwayModuleNpm, "warn_on_boto_env_vars") with pytest.raises(NpmNotFound): RunwayModuleNpm(runway_context, module_root=tmp_path) mock_check_for_npm.assert_called_once() mock_warn_on_boto_env_vars.assert_not_called()
def test_npm_install_skip( self, caplog: LogCaptureFixture, mocker: MockerFixture, runway_context: MockRunwayContext, tmp_path: Path, ) -> None: """Test npm_install skip.""" caplog.set_level(logging.INFO, logger=MODULE) mocker.patch.object(RunwayModuleNpm, "check_for_npm") mocker.patch.object(RunwayModuleNpm, "warn_on_boto_env_vars") RunwayModuleNpm(runway_context, module_root=tmp_path, options={ "skip_npm_ci": True }).npm_install() assert "skipped npm ci/npm install" in caplog.messages
def test_log_npm_command( self, caplog: LogCaptureFixture, mocker: MockerFixture, runway_context: MockRunwayContext, tmp_path: Path, ) -> None: """Test log_npm_command.""" caplog.set_level(logging.DEBUG, logger=MODULE) mock_format_npm_command_for_logging = mocker.patch( f"{MODULE}.format_npm_command_for_logging", return_value="success") mocker.patch.object(RunwayModuleNpm, "check_for_npm") mocker.patch.object(RunwayModuleNpm, "warn_on_boto_env_vars") obj = RunwayModuleNpm(runway_context, module_root=tmp_path) obj.log_npm_command(["test"]) assert "node command: success" in caplog.messages mock_format_npm_command_for_logging.assert_called_once_with(["test"])
def test_package_json_missing( self, caplog: LogCaptureFixture, mocker: MockerFixture, runway_context: MockRunwayContext, tmp_path: Path, ) -> None: """Test package_json_missing.""" caplog.set_level(logging.DEBUG, logger=MODULE) mocker.patch.object(RunwayModuleNpm, "check_for_npm") mocker.patch.object(RunwayModuleNpm, "warn_on_boto_env_vars") obj = RunwayModuleNpm(context=runway_context, module_root=tmp_path) assert obj.package_json_missing() assert ["module is missing package.json"] == caplog.messages (tmp_path / "package.json").touch() assert not obj.package_json_missing()
def test_init(self, mocker: MockerFixture, runway_context: MockRunwayContext, tmp_path: Path) -> None: """Test __init__.""" mock_check_for_npm = mocker.patch.object(RunwayModuleNpm, "check_for_npm") mock_warn_on_boto_env_vars = mocker.patch.object( RunwayModuleNpm, "warn_on_boto_env_vars") obj = RunwayModuleNpm( runway_context, module_root=tmp_path, options={"options": "test"}, parameters={"parameters": "test"}, ) assert obj.ctx == runway_context assert not obj.explicitly_enabled assert obj.logger assert obj.name == tmp_path.name assert obj.options == {"options": "test"} assert obj.parameters == {"parameters": "test"} assert obj.path == tmp_path mock_check_for_npm.assert_called_once_with(logger=obj.logger) mock_warn_on_boto_env_vars.assert_called_once_with( runway_context.env.vars, logger=obj.logger)