コード例 #1
0
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,
        )
コード例 #2
0
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,
        )
コード例 #3
0
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
コード例 #4
0
ファイル: events.py プロジェクト: sakalosj/packit-service
    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
コード例 #5
0
ファイル: event.py プロジェクト: packit/packit-service
    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
コード例 #6
0
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
コード例 #7
0
ファイル: test_config.py プロジェクト: packit/packit-service
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,
        )
コード例 #8
0
ファイル: test_config.py プロジェクト: packit/packit-service
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)
コード例 #9
0
ファイル: test_config.py プロジェクト: packit/packit-service
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)