def test_get_package_config_from_repo_not_found_exception_pr(): gp = flexmock(GitProject) gp.should_receive("full_repo_name").and_return("a/b") gp.should_receive("get_file_content").and_raise(FileNotFoundError, "not found") gp.should_receive("pr_comment").and_return(None).once() with pytest.raises(PackitConfigException): PackageConfigGetter.get_package_config_from_repo( project=GitProject(repo="", service=GitService(), namespace=""), reference=None, pr_id=2, )
def test_get_package_config_from_repo_not_found_exception_existing_issue(): gp = flexmock(GitProject) gp.should_receive("full_repo_name").and_return("a/b") gp.should_receive("get_file_content").and_raise(FileNotFoundError, "not found") gp.should_receive("get_issue_list").and_return( [flexmock(title="Invalid packit config")]).once() with pytest.raises(PackitConfigException): PackageConfigGetter.get_package_config_from_repo( project=GitProject(repo="", service=GitService(), namespace=""), reference=None, )
def test_get_package_config_from_repo_alternative_config_name(): gp = flexmock(GitProject) gp.should_receive("full_repo_name").and_return("a/b") gp.should_receive("get_file_content").with_args(path=".packit.yaml", ref=None).and_raise( FileNotFoundError, "not found") gp.should_receive("get_file_content").with_args( path=".packit.yml", ref=None).and_return("---\nspecfile_path: packit.spec\n" "synced_files:\n" " - packit.spec\n" " - src: .packit.yaml\n" " dest: .packit2.yaml") config = PackageConfigGetter.get_package_config_from_repo( project=GitProject(repo="", service=GitService(), namespace=""), reference=None, spec_file_path="packit.spec", ) assert isinstance(config, PackageConfig) assert config.specfile_path == "packit.spec" assert config.synced_files == SyncFilesConfig(files_to_sync=[ SyncFilesItem(src="packit.spec", dest="packit.spec"), SyncFilesItem(src=".packit.yaml", dest=".packit2.yaml"), ]) assert config.create_pr
def get_package_config(self) -> Optional[PackageConfig]: logger.debug(f"Getting package_config:\n" f"\tproject: {self.project}\n" f"\tbase_project: {self.base_project}\n" f"\treference: {self.commit_sha}\n" f"\tpr_id: {self.pr_id}") spec_path = None if isinstance(self.base_project, PagureProject): spec_path = f"SPECS/{self.project.repo}.spec" logger.debug(f"Getting package_config from Pagure. " f"(Spec-file is expected to be in {spec_path})") package_config = PackageConfigGetter.get_package_config_from_repo( base_project=self.base_project, project=self.project, reference=self.commit_sha, pr_id=self.pr_id, fail_when_missing=False, spec_file_path=spec_path, ) # job config change note: # this is used in sync-from-downstream which is buggy - we don't need to change this if package_config: package_config.upstream_project_url = self.project_url return package_config
def get_package_config(self) -> Optional[PackageConfig]: logger.debug(f"Getting package_config:\n" f"\tproject: {self.project}\n" f"\tbase_project: {self.base_project}\n" f"\treference: {self.commit_sha}\n" f"\tpr_id: {self.pr_id}") spec_path = None if self.project_url and RepoUrl.parse(self.project_url).hostname in [ "git.centos.org", "git.stg.centos.org", ]: spec_path = f"SPECS/{self.project.repo}.spec" logger.debug(f"Getting package_config from CentOS dist-git. " f"(Spec-file is expected to be in {spec_path}.)") package_config = PackageConfigGetter.get_package_config_from_repo( base_project=self.base_project, project=self.project, reference=self.commit_sha, pr_id=self.pr_id, fail_when_missing=self.fail_when_config_file_missing, spec_file_path=spec_path, ) # job config change note: # this is used in sync-from-downstream which is buggy - we don't need to change this if package_config: package_config.upstream_project_url = self.project_url return package_config
def test_get_package_config_from_repo( content, project: GitProject, mock_spec_search: bool, spec_path: Optional[str], spec_path_option: Optional[str], reference: str, ): gp = flexmock(GitProject) gp.should_receive("full_repo_name").and_return("a/b") gp.should_receive("get_file_content").with_args( path=".packit.yaml", ref=reference).and_return(content) if mock_spec_search: gp.should_receive("get_files").and_return(["packit.spec"]).once() config = PackageConfigGetter.get_package_config_from_repo( project=project, reference=reference, spec_file_path=spec_path_option) assert isinstance(config, PackageConfig) assert config.specfile_path == spec_path assert set(config.get_all_files_to_sync().files_to_sync) == set( SyncFilesConfig(files_to_sync=[ SyncFilesItem(src="packit.spec", dest="packit.spec"), SyncFilesItem(src=".packit.yaml", dest=".packit2.yaml"), ]).files_to_sync) assert config.create_pr for j in config.jobs: assert j.specfile_path == spec_path assert j.downstream_package_name == config.downstream_package_name assert j.upstream_package_name == config.upstream_package_name
def test_get_package_config_from_repo_not_found_exception_nonexisting_issue(): flexmock(GitService).should_receive("user").and_return( flexmock().should_receive("get_username").and_return("packit").mock()) gp = flexmock(GitProject) gp.should_receive("full_repo_name").and_return("a/b") gp.should_receive("get_file_content").and_raise(FileNotFoundError, "not found") gp.should_receive("get_issue_list").and_return( [flexmock(title="issue 1"), flexmock(title="issue 2")]).once() gp.should_receive("create_issue").and_return( flexmock(url="the url")).once() with pytest.raises(PackitConfigException): PackageConfigGetter.get_package_config_from_repo( project=GitProject(repo="", service=GitService(), namespace=""), reference=None, )
def test_get_package_config_from_repo_not_found(): gp = flexmock(GitProject) gp.should_receive("full_repo_name").and_return("a/b") gp.should_receive("get_file_content").and_raise(FileNotFoundError, "not found") assert (PackageConfigGetter.get_package_config_from_repo( project=GitProject(repo="", service=GitService(), namespace=""), reference=None, pr_id=2, fail_when_missing=False, ) is None)
def test_create_issue_if_needed(issues, create_new, title, message): project = flexmock() check = lambda value: value is None # noqa project.should_receive("get_issue_list").and_return(issues).once() if create_new: project.should_receive("create_issue").with_args( title=f"[packit] {title}", body=message).and_return(flexmock(title="new issue")).once() check = lambda value: value.title == "new issue" # noqa issue_created = PackageConfigGetter.create_issue_if_needed( project, title, message) assert check(issue_created)