예제 #1
0
def release_model():
    yield ProjectReleaseModel.get_or_create(
        tag_name="v1.0.2",
        commit_hash="aksjdaksjdla",
        namespace="the-namespace",
        repo_name="the-repo-name",
    )
예제 #2
0
 def db_trigger(self) -> Optional[AbstractTriggerDbType]:
     return ProjectReleaseModel.get_or_create(
         tag_name=self.tag_name,
         namespace=self.repo_namespace,
         repo_name=self.repo_name,
         commit_hash=self.commit_sha,
     )
예제 #3
0
def test_issue_comment_propose_update_handler(
    mock_issue_comment_functionality, issue_comment_propose_update_event
):
    flexmock(PackitAPI).should_receive("sync_release").and_return(
        PullRequest(
            title="foo",
            description="bar",
            target_branch="baz",
            source_branch="yet",
            id=1,
            status=PRStatus.open,
            url="https://xyz",
            author="me",
            created=datetime.now(),
        )
    )
    flexmock(
        GithubProject,
        get_files=lambda ref, filter_regex: [],
        get_web_url=lambda: "https://github.com/the-namespace/the-repo",
        is_private=lambda: False,
    )
    flexmock(IssueCommentEvent, db_trigger=ProjectReleaseModel())
    results = SteveJobs().process_message(issue_comment_propose_update_event)
    assert first_dict_value(results["jobs"])["success"]
예제 #4
0
def release_model():
    yield ProjectReleaseModel.get_or_create(
        tag_name=SampleValues.tag_name,
        commit_hash=SampleValues.commit_sha,
        namespace=SampleValues.repo_namespace,
        repo_name=SampleValues.repo_name,
        project_url=SampleValues.project_url,
    )
예제 #5
0
    def db_trigger(self) -> Optional[AbstractTriggerDbType]:
        if not self._db_trigger:

            # TODO, do a better job
            # Probably, try to recreate original classes.
            if self.event_type in {
                    "PullRequestGithubEvent",
                    "PullRequestPagureEvent",
                    "MergeRequestGitlabEvent",
                    "PullRequestCommentGithubEvent",
                    "MergeRequestCommentGitlabEvent",
                    "PullRequestCommentPagureEvent",
                    "CheckRerunPullRequestEvent",
            }:
                self._db_trigger = PullRequestModel.get_or_create(
                    pr_id=self.pr_id,
                    namespace=self.project.namespace,
                    repo_name=self.project.repo,
                    project_url=self.project_url,
                )
            elif self.event_type in {
                    "PushGitHubEvent",
                    "PushGitlabEvent",
                    "PushPagureEvent",
                    "CheckRerunCommitEvent",
            }:
                self._db_trigger = GitBranchModel.get_or_create(
                    branch_name=self.git_ref,
                    namespace=self.project.namespace,
                    repo_name=self.project.repo,
                    project_url=self.project_url,
                )

            elif self.event_type in {"ReleaseEvent", "CheckRerunReleaseEvent"}:
                self._db_trigger = ProjectReleaseModel.get_or_create(
                    tag_name=self.tag_name,
                    namespace=self.project.namespace,
                    repo_name=self.project.repo,
                    project_url=self.project_url,
                    commit_hash=self.commit_sha,
                )
            elif self.event_type in {
                    "IssueCommentEvent",
                    "IssueCommentGitlabEvent",
            }:
                self._db_trigger = IssueModel.get_or_create(
                    issue_id=self.issue_id,
                    namespace=self.project.namespace,
                    repo_name=self.project.repo,
                    project_url=self.project_url,
                )
            else:
                logger.warning(
                    "We don't know, what to search in the database for this event data."
                )

        return self._db_trigger
예제 #6
0
 def db_trigger(self):
     if not self._db_trigger and self.data.trigger_id is not None:
         if self.data.trigger in (
                 TheJobTriggerType.pull_request,
                 TheJobTriggerType.pr_comment,
                 TheJobTriggerType.pr_label,
         ):
             self._db_trigger = PullRequestModel.get_by_id(
                 self.data.trigger_id)
         elif self.data.trigger == TheJobTriggerType.issue_comment:
             self._db_trigger = IssueModel.get_by_id(self.data.trigger_id)
         elif self.data.trigger == TheJobTriggerType.release:
             self._db_trigger = ProjectReleaseModel.get_by_id(
                 self.data.trigger_id)
         elif self.data.trigger == TheJobTriggerType.push:
             self._db_trigger = GitBranchModel.get_by_id(
                 self.data.trigger_id)
     return self._db_trigger
예제 #7
0
def mock_release_functionality(request):
    packit_yaml = (
        "{'specfile_path': 'the-specfile.spec', 'synced_files': [], 'jobs':"
        + str(request.param)
        + "}"
    )
    flexmock(
        GithubProject,
        full_repo_name="packit/hello-world",
        get_file_content=lambda path, ref: packit_yaml,
        get_files=lambda ref, filter_regex: ["the-specfile.spec"],
        get_web_url=lambda: "https://github.com/the-namespace/the-repo",
        get_pr=lambda pr_id: flexmock(head_commit="12345"),
    )
    flexmock(Github, get_repo=lambda full_name_or_id: None)

    config = ServiceConfig()
    config.command_handler_work_dir = SANDCASTLE_WORK_DIR
    flexmock(ServiceConfig).should_receive("get_service_config").and_return(config)
    trigger = JobTriggerModel(type=JobConfigTriggerType.release, id=123)
    flexmock(AddReleaseDbTrigger).should_receive("db_trigger").and_return(trigger)
    flexmock(ProjectReleaseModel).should_receive("get_by_id").with_args(123).and_return(
        trigger
    )
    flexmock(LocalProject, refresh_the_arguments=lambda: None)
    flexmock(JobTriggerModel).should_receive("get_by_id").with_args(123456).and_return(
        trigger
    )
    flexmock(trigger).should_receive("get_trigger_object").and_return(
        ProjectReleaseModel(tag_name="0.1.0")
    )
    flexmock(ProjectReleaseModel).should_receive("get_or_create").with_args(
        tag_name="0.1.0",
        namespace="packit",
        repo_name="hello-world",
        project_url="https://github.com/packit/hello-world",
        commit_hash="0e5d8b51fd5dfa460605e1497d22a76d65c6d7fd",
    ).and_return(flexmock(id=12, job_config_trigger_type=JobConfigTriggerType.release))
    flexmock(JobTriggerModel).should_receive("get_or_create").and_return(
        flexmock(id=123456)
    )