def test_install_package_version__not_propagated(caplog): caplog.set_level(logging.INFO) responses.add( "POST", "https://salesforce/services/data/v50.0/tooling/sobjects/PackageInstallRequest/", json={"id": "0Hf"}, ) responses.add( "GET", "https://salesforce/services/data/v50.0/tooling/query/", status=400, body="invalid cross reference id", ) responses.add( "GET", "https://salesforce/services/data/v50.0/tooling/query/", json={"records": [{"Status": "SUCCESS"}]}, ) project_config = create_project_config() org_config = OrgConfig( {"instance_url": "https://salesforce", "access_token": "TOKEN"}, "test" ) install_package_version(project_config, org_config, {"version_id": "04t"}) assert "Retrying" in caplog.text assert "Success" in caplog.text
def test_install_package_version__error(): responses.add( "POST", "https://salesforce/services/data/v50.0/tooling/sobjects/PackageInstallRequest/", json={"id": "0Hf"}, ) responses.add( "GET", "https://salesforce/services/data/v50.0/tooling/query/", json={ "records": [ { "Status": "ERROR", "Errors": {"errors": [{"message": "We have a problem."}]}, } ] }, ) project_config = create_project_config() org_config = OrgConfig( {"instance_url": "https://salesforce", "access_token": "TOKEN"}, "test" ) with pytest.raises(PackageInstallError, match="We have a problem."): install_package_version(project_config, org_config, {"version_id": "04t"})
def _install_dependency(self, dependency): package_zip = None zip_src = None if "zip_url" in dependency: self.logger.info( "Deploying unmanaged metadata from /{} of {}".format( dependency.get("subfolder") or "", dependency["zip_url"])) zip_src = self._download_extract_zip( dependency["zip_url"], subfolder=dependency.get("subfolder")) elif "repo_name" in dependency: self.logger.info( "Deploying unmanaged metadata from /{} of {}/{}".format( dependency["subfolder"], dependency["repo_owner"], dependency["repo_name"], )) gh_for_repo = self.project_config.get_github_api( dependency["repo_owner"], dependency["repo_name"]) zip_src = self._download_extract_github( gh_for_repo, dependency["repo_owner"], dependency["repo_name"], dependency["subfolder"], ref=dependency.get("ref"), ) if zip_src: # determine whether to inject namespace prefixes or not options = dependency.copy() if "unmanaged" not in options: namespace = options.get("namespace_inject") options["unmanaged"] = ( not namespace ) or namespace not in self.org_config.installed_packages package_zip = MetadataPackageZipBuilder.from_zipfile( zip_src, options=options, logger=self.logger).as_base64() elif "namespace" in dependency: self.logger.info("Installing {} version {}".format( dependency["namespace"], dependency["version"])) package_zip = InstallPackageZipBuilder( dependency["namespace"], dependency["version"], securityType=self.options["security_type"], )() if package_zip: api = self.api_class( self, package_zip, purge_on_delete=self.options["purge_on_delete"]) return api() elif "version_id" in dependency: self.logger.info(f"Installing {dependency['version_id']}") install_package_version(self.project_config, self.org_config, dependency) else: raise TaskOptionsError(f"Could not find package for {dependency}")
def _run_task(self): version = self.options["version"] self.logger.info(f"Installing {self.options['name']} {version}") if isinstance(version, str) and version.startswith("04t"): install_options = {**self.options, "version_id": version} retry_options = { "retries": self.options["retries"], "retry_interval": self.options["retry_interval"], "retry_interval_add": self.options["retry_interval_add"], } install_package_version(self.project_config, self.org_config, install_options, retry_options) else: self._retry() self.org_config.reset_installed_packages()