def test_parse_gitlab_push(self, gitlab_push): event_object = Parser.parse_event(gitlab_push) assert isinstance(event_object, PushGitlabEvent) assert event_object.repo_namespace == "testing/packit" assert event_object.repo_name == "hello-there" assert event_object.commit_sha == "cb2859505e101785097e082529dced35bbee0c8f" assert (event_object.project_url == "https://gitlab.com/testing/packit/hello-there") assert event_object.git_ref == "test2" assert isinstance(event_object.project, GitlabProject) assert event_object.project.full_repo_name == "testing/packit/hello-there" assert not event_object.base_project flexmock(PackageConfigGetter).should_receive( "get_package_config_from_repo").with_args( base_project=event_object.base_project, project=event_object.project, pr_id=None, reference="cb2859505e101785097e082529dced35bbee0c8f", fail_when_missing=False, spec_file_path=None, ).and_return(flexmock()).once() assert event_object.package_config
def test_parse_gitlab_issue_comment(self, gitlab_issue_comment): event_object = Parser.parse_event(gitlab_issue_comment) assert isinstance(event_object, IssueCommentGitlabEvent) assert event_object.action == GitlabEventAction.opened assert event_object.issue_id == 35452477 assert event_object.issue_iid == 1 assert event_object.repo_namespace == "testing/packit" assert event_object.repo_name == "hello-there" assert (event_object.project_url == "https://gitlab.com/testing/packit/hello-there") assert event_object.user_login == "shreyaspapi" assert event_object.comment == "testing comment" assert isinstance(event_object.project, GitlabProject) assert event_object.project.full_repo_name == "testing/packit/hello-there" flexmock(PackageConfigGetter).should_receive( "get_package_config_from_repo").with_args( base_project=event_object.base_project, project=event_object.project, pr_id=None, reference=None, fail_when_missing=False, spec_file_path=None, ).and_return(flexmock()).once() assert event_object.package_config
def test_parse_testing_farm_notification_error(self, testing_farm_notification, testing_farm_results_error): request_id = "129bd474-e4d3-49e0-9dec-d994a99feebc" flexmock(TestingFarmJobHelper).should_receive( "get_request_details").with_args(request_id).and_return( testing_farm_results_error) flexmock(TFTTestRunModel).should_receive( "get_by_pipeline_id").and_return( flexmock( job_trigger=flexmock().should_receive( "get_trigger_object").and_return( PullRequestModel(pr_id=10)).once().mock(), data={ "base_project_url": "https://github.com/packit/packit" }, )) event_object = Parser.parse_event(testing_farm_notification) assert isinstance(event_object, TestingFarmResultsEvent) assert event_object.pipeline_id == request_id assert event_object.result == TestingFarmResult.error assert event_object.project_url == "https://github.com/packit/packit" assert event_object.commit_sha == "e7e3c8b688403048e7aefa64c19b79e89fe764df" assert event_object.summary == "something went wrong" assert event_object.compose == "Fedora-32" assert event_object.copr_build_id == "1810530" assert event_object.copr_chroot == "fedora-32-x86_64" assert event_object.tests assert event_object.db_trigger assert isinstance(event_object.project, GithubProject) assert event_object.project.full_repo_name == "packit/packit"
def test_parse_mr_comment(self, gitlab_mr_comment): event_object = Parser.parse_event(gitlab_mr_comment) assert isinstance(event_object, MergeRequestCommentGitlabEvent) assert event_object.action == GitlabEventAction.opened assert event_object.pr_id == 2 assert event_object.source_repo_namespace == "testing/packit" assert event_object.source_repo_name == "hello-there" assert event_object.target_repo_namespace == "testing/packit" assert event_object.target_repo_name == "hello-there" assert (event_object.project_url == "https://gitlab.com/testing/packit/hello-there") assert event_object.user_login == "shreyaspapi" assert event_object.comment == "must be reopened" assert event_object.commit_sha == "45e272a57335e4e308f3176df6e9226a9e7805a9" assert isinstance(event_object.project, GitlabProject) assert event_object.project.full_repo_name == "testing/packit/hello-there" assert isinstance(event_object.project, GitlabProject) assert event_object.base_project.full_repo_name == "testing/packit/hello-there" flexmock(PackageConfigGetter).should_receive( "get_package_config_from_repo").with_args( base_project=event_object.base_project, project=event_object.project, pr_id=2, reference="45e272a57335e4e308f3176df6e9226a9e7805a9", fail_when_missing=False, spec_file_path=None, ).and_return(flexmock()).once() assert event_object.package_config
def test_parse_github_push_branch(self, github_push_branch): event_object = Parser.parse_event(github_push_branch) assert isinstance(event_object, PushGitHubEvent) assert event_object.trigger == TheJobTriggerType.push assert event_object.repo_namespace == "packit-service" assert event_object.repo_name == "hello-world" assert event_object.commit_sha == "04885ff850b0fa0e206cd09db73565703d48f99b" assert (event_object.project_url == "https://github.com/packit-service/hello-world") assert event_object.git_ref == "build-branch" assert isinstance(event_object.project, GithubProject) assert event_object.project.full_repo_name == "packit-service/hello-world" assert not event_object.base_project flexmock(PackageConfigGetter).should_receive( "get_package_config_from_repo").with_args( base_project=event_object.base_project, project=event_object.project, pr_id=None, reference="04885ff850b0fa0e206cd09db73565703d48f99b", fail_when_missing=False, spec_file_path=None, ).and_return(flexmock()).once() assert event_object.package_config
def test_parse_check_rerun_release( clean_before_and_after, release_model, release_trigger_model, check_rerun_event_dict_commit, ): check_rerun_event_dict_commit["check_run"]["external_id"] = str( release_trigger_model.id ) event_object = Parser.parse_event(check_rerun_event_dict_commit) assert isinstance(event_object, CheckRerunReleaseEvent) assert event_object.repo_namespace == "packit" assert event_object.repo_name == "hello-world" assert event_object.commit_sha == "0e5d8b51fd5dfa460605e1497d22a76d65c6d7fd" assert event_object.project_url == "https://github.com/packit/hello-world" assert event_object.tag_name == release_model.tag_name assert event_object.git_ref == release_model.tag_name assert event_object.identifier == release_model.tag_name assert isinstance(event_object.project, GithubProject) assert event_object.project.full_repo_name == "packit/hello-world" assert ( not event_object.base_project # With Github app, we cannot work with fork repo ) assert event_object.check_name_job == "testing-farm" assert event_object.check_name_target == "fedora-rawhide-x86_64" assert event_object.targets_override == {"fedora-rawhide-x86_64"}
def test_parse_issue_comment(self, github_issue_comment_propose_update): event_object = Parser.parse_event(github_issue_comment_propose_update) assert isinstance(event_object, IssueCommentEvent) assert event_object.trigger == TheJobTriggerType.issue_comment assert event_object.action == IssueCommentAction.created assert event_object.issue_id == 512 assert event_object.repo_namespace == "packit-service" assert event_object.repo_name == "packit" assert (event_object.target_repo == f"{event_object.repo_namespace}/{event_object.repo_name}") assert event_object.base_ref == "master" assert event_object.project_url == "https://github.com/packit-service/packit" assert event_object.user_login == "phracek" assert event_object.comment == "/packit propose-update" assert isinstance(event_object.project, GithubProject) assert event_object.project.full_repo_name == "packit-service/packit" assert not event_object.base_project flexmock(PackageConfigGetter).should_receive( "get_package_config_from_repo").with_args( base_project=event_object.base_project, project=event_object.project, pr_id=None, reference=None, fail_when_missing=False, spec_file_path=None, ).and_return(flexmock()).once() assert event_object.package_config
def test_parse_github_push(self, github_push): event_object = Parser.parse_event(github_push) assert isinstance(event_object, PushGitHubEvent) assert event_object.trigger == TheJobTriggerType.push assert event_object.repo_namespace == "some-user" assert event_object.repo_name == "some-repo" assert event_object.commit_sha == "0000000000000000000000000000000000000000" assert event_object.project_url == "https://github.com/some-user/some-repo" assert event_object.git_ref == "simple-tag" assert isinstance(event_object.project, GithubProject) assert event_object.project.full_repo_name == "some-user/some-repo" assert not event_object.base_project flexmock(PackageConfigGetter).should_receive( "get_package_config_from_repo").with_args( base_project=event_object.base_project, project=event_object.project, pr_id=None, reference="0000000000000000000000000000000000000000", fail_when_missing=False, spec_file_path=None, ).and_return(flexmock()).once() assert event_object.package_config
def test_parse_pr(self, github_pr_webhook): event_object = Parser.parse_event(github_pr_webhook) assert isinstance(event_object, PullRequestGithubEvent) assert event_object.trigger == TheJobTriggerType.pull_request assert event_object.action == PullRequestAction.opened assert event_object.pr_id == 342 assert event_object.base_repo_namespace == "lbarcziova" assert event_object.base_repo_name == "packit" assert event_object.base_ref == "528b803be6f93e19ca4130bf4976f2800a3004c4" assert event_object.target_repo_namespace == "packit-service" assert event_object.target_repo_name == "packit" assert event_object.project_url == "https://github.com/packit-service/packit" assert event_object.commit_sha == "528b803be6f93e19ca4130bf4976f2800a3004c4" assert isinstance(event_object.project, GithubProject) assert event_object.project.full_repo_name == "packit-service/packit" assert (not event_object. base_project # With Github app, we cannot work with fork repo ) flexmock(PackageConfigGetter).should_receive( "get_package_config_from_repo").with_args( base_project=None, project=event_object.project, pr_id=342, reference="528b803be6f93e19ca4130bf4976f2800a3004c4", fail_when_missing=False, spec_file_path=None, ).and_return(flexmock()).once() assert event_object.package_config
def test_parse_pr_comment_created(self, github_pr_comment_created): event_object = Parser.parse_event(github_pr_comment_created) assert isinstance(event_object, PullRequestCommentGithubEvent) assert event_object.trigger == TheJobTriggerType.pr_comment assert event_object.action == PullRequestCommentAction.created assert event_object.pr_id == 9 assert event_object.base_repo_namespace == "phracek" assert event_object.base_repo_name is None # It's not present in the payload assert event_object.target_repo_namespace == "packit-service" assert event_object.target_repo_name == "hello-world" assert (event_object.project_url == "https://github.com/packit-service/hello-world") assert event_object.user_login == "phracek" assert event_object.comment == "/packit copr-build" assert isinstance(event_object.project, GithubProject) assert event_object.project.full_repo_name == "packit-service/hello-world" assert (not event_object. base_project # With Github app, we cannot work with fork repo ) flexmock(GithubProject).should_receive("get_pr").with_args( pr_id=9).and_return(flexmock(head_commit="12345")) flexmock(PackageConfigGetter).should_receive( "get_package_config_from_repo").with_args( base_project=None, project=event_object.project, pr_id=9, reference="12345", fail_when_missing=False, spec_file_path=None, ).and_return(flexmock()).once() assert event_object.package_config
def test_parse_mr(self, merge_request): event_object = Parser.parse_event(merge_request) assert isinstance(event_object, MergeRequestGitlabEvent) assert event_object.trigger == TheJobTriggerType.pull_request assert event_object.action == GitlabEventAction.opened assert event_object.object_id == 58759529 assert event_object.object_iid == 1 assert event_object.source_repo_namespace == "testing-packit" assert event_object.source_repo_name == "hello-there" assert event_object.commit_sha == "1f6a716aa7a618a9ffe56970d77177d99d100022" assert event_object.target_repo_namespace == "testing-packit" assert event_object.target_repo_name == "hello-there" assert event_object.https_url == "https://gitlab.com/testing-packit/hello-there" assert isinstance(event_object.project, GitlabProject) assert event_object.project.full_repo_name == "testing-packit/hello-there" flexmock(PackageConfigGetter).should_receive( "get_package_config_from_repo").with_args( base_project=None, project=event_object.project, pr_id=1, reference="1f6a716aa7a618a9ffe56970d77177d99d100022", fail_when_missing=False, spec_file_path=None, ).and_return(flexmock()).once() assert event_object.package_config
def build_handler(metadata=None, trigger=None): if not metadata: metadata = { "owner": "nobody", "targets": [ "fedora-29-x86_64", "fedora-30-x86_64", "fedora-31-x86_64", "fedora-rawhide-x86_64", ], } jobs = [ JobConfig( job=JobType.copr_build, trigger=trigger or JobTriggerType.pull_request, metadata=metadata, ) ] pkg_conf = PackageConfig(jobs=jobs, downstream_package_name="dummy") event = Parser.parse_pr_event(pull_request()) handler = CoprBuildHandler( config=ServiceConfig(), package_config=pkg_conf, project=GitProject("", GitService(), ""), event=event, ) handler._api = PackitAPI(ServiceConfig, pkg_conf) return handler
def test_parse_testing_farm_results(self, testing_farm_results): event_object = Parser.parse_event(testing_farm_results) assert isinstance(event_object, TestingFarmResultsEvent) assert event_object.trigger == JobTriggerType.testing_farm_results assert event_object.pipeline_id == "43e310b6-c1f1-4d3e-a95c-6c1eca235296" assert event_object.result == TestingFarmResult.passed assert event_object.repo_namespace == "packit-service" assert event_object.repo_name == "hello-world" assert event_object.ref == "pull/10/head" assert ( event_object.project_url == "https://github.com/packit-service/hello-world" ) assert event_object.commit_sha == "46597d9b66a1927b50376f73bdb1ec1a5757c330" assert event_object.message == "Error or info message to display" assert event_object.environment == "Fedora-Cloud-Base-29-1.2.x86_64.qcow2" assert event_object.copr_repo_name == "packit/packit-service-hello-world-10-stg" assert event_object.copr_chroot == "fedora-29-x86_64" assert event_object.tests assert { TestResult( name="test1", result=TestingFarmResult.failed, log_url="https://somewhere.com/43e310b6/artifacts/test1.log", ), TestResult( name="test2", result=TestingFarmResult.passed, log_url="https://somewhere.com/43e310b6/artifacts/test2.log", ), } == set(event_object.tests)
def test_parse_release(self, github_release_webhook): event_object = Parser.parse_event(github_release_webhook) assert isinstance(event_object, ReleaseEvent) assert event_object.repo_namespace == "packit-service" assert event_object.repo_name == "hello-world" assert event_object.tag_name == "0.3.0" assert (event_object.project_url == "https://github.com/packit-service/hello-world")
def test_get_project_release(self, github_release_webhook, mock_config): event_object = Parser.parse_event(github_release_webhook) assert isinstance(event_object, ReleaseEvent) assert isinstance(event_object.project, GithubProject) assert isinstance(event_object.project.service, GithubService) assert event_object.project.namespace == "packit-service" assert event_object.project.repo == "hello-world"
def test_json_testing_farm_notification(self, testing_farm_notification, testing_farm_results): flexmock(TestingFarmJobHelper).should_receive( "get_request_details").and_return(testing_farm_results) flexmock(TFTTestRunModel).should_receive( "get_by_pipeline_id").and_return( flexmock(data={"base_project_url": "abc"})) event_object = Parser.parse_event(testing_farm_notification) assert json.dumps(event_object.pipeline_id)
def test_get_project_pr(self, github_pr_webhook, mock_config): event_object = Parser.parse_event(github_pr_webhook) assert isinstance(event_object, PullRequestGithubEvent) assert isinstance(event_object.project, GithubProject) assert isinstance(event_object.project.service, GithubService) assert event_object.project.namespace == "packit-service" assert event_object.project.repo == "packit"
def test_parse_release(self, release): event_object = Parser.parse_event(release) assert isinstance(event_object, ReleaseEvent) assert event_object.trigger == JobTriggerType.release assert event_object.repo_namespace == "Codertocat" assert event_object.repo_name == "Hello-World" assert event_object.tag_name == "0.0.1" assert event_object.https_url == "https://github.com/Codertocat/Hello-World"
def test_parse_testing_farm_results(self, testing_farm_results): flexmock(TFTTestRunModel).should_receive( "get_by_pipeline_id").and_return( flexmock(job_trigger=flexmock().should_receive( "get_trigger_object").and_return(PullRequestModel( pr_id=10)).once().mock())) event_object = Parser.parse_event(testing_farm_results) assert isinstance(event_object, TestingFarmResultsEvent) assert event_object.trigger == TheJobTriggerType.testing_farm_results assert event_object.pipeline_id == "43e310b6-c1f1-4d3e-a95c-6c1eca235296" assert event_object.result == TestingFarmResult.passed assert event_object.repo_namespace == "packit-service" assert event_object.repo_name == "hello-world" assert event_object.git_ref == "pull/10/head" assert (event_object.project_url == "https://github.com/packit-service/hello-world") assert event_object.commit_sha == "46597d9b66a1927b50376f73bdb1ec1a5757c330" assert event_object.message == "Error or info message to display" assert event_object.environment == "Fedora-Cloud-Base-29-1.2.x86_64.qcow2" assert event_object.copr_repo_name == "packit/packit-service-hello-world-10-stg" assert event_object.copr_chroot == "fedora-29-x86_64" assert event_object.tests assert { TestResult( name="test1", result=TestingFarmResult.failed, log_url="https://somewhere.com/43e310b6/artifacts/test1.log", ), TestResult( name="test2", result=TestingFarmResult.passed, log_url="https://somewhere.com/43e310b6/artifacts/test2.log", ), } == set(event_object.tests) assert event_object.db_trigger assert isinstance(event_object.project, GithubProject) assert event_object.project.full_repo_name == "packit-service/hello-world" assert (not event_object. base_project # With Github app, we cannot work with fork repo ) flexmock(PackageConfigGetter).should_receive( "get_package_config_from_repo").with_args( base_project=None, project=event_object.project, pr_id=10, reference="46597d9b66a1927b50376f73bdb1ec1a5757c330", fail_when_missing=False, spec_file_path=None, ).and_return(flexmock()).once() assert event_object.package_config
def test_distgit_commit(self, distgit_commit): event_object = Parser.parse_event(distgit_commit) assert isinstance(event_object, DistGitEvent) assert event_object.topic == FedmsgTopic.dist_git_push assert event_object.repo_namespace == "rpms" assert event_object.repo_name == "buildah" assert event_object.ref == "abcd" assert event_object.branch == "master" assert event_object.msg_id == "2019-49c02775-6d37-40a9-b108-879e3511c49a"
def test_testing_farm_response_non_existing_pr(clean_before_and_after, tf_result_dict_pr): event_object = Parser.parse_event(tf_result_dict_pr) assert isinstance(event_object, TestingFarmResultsEvent) assert event_object.identifier == "687abc76d67d" assert event_object.commit_sha == "687abc76d67d" assert event_object.git_ref == "687abc76d67d" assert not event_object.db_trigger
def test_parse_github_push(self, github_push): event_object = Parser.parse_event(github_push) assert isinstance(event_object, PushGitHubEvent) assert event_object.trigger == TheJobTriggerType.push assert event_object.repo_namespace == "some-user" assert event_object.repo_name == "some-repo" assert event_object.commit_sha == "0000000000000000000000000000000000000000" assert event_object.project_url == "https://github.com/some-user/some-repo" assert event_object.git_ref == "simple-tag"
def test_get_project_testing_farm_results(self, testing_farm_results, mock_config): event_object = Parser.parse_event(testing_farm_results) assert isinstance(event_object, TestingFarmResultsEvent) assert isinstance(event_object.project, GithubProject) assert isinstance(event_object.project.service, GithubService) assert event_object.project.namespace == "packit-service" assert event_object.project.repo == "hello-world"
def test_parse_github_push_branch(self, github_push_branch): event_object = Parser.parse_event(github_push_branch) assert isinstance(event_object, PushGitHubEvent) assert event_object.trigger == TheJobTriggerType.push assert event_object.repo_namespace == "packit-service" assert event_object.repo_name == "hello-world" assert event_object.commit_sha == "04885ff850b0fa0e206cd09db73565703d48f99b" assert (event_object.project_url == "https://github.com/packit-service/hello-world") assert event_object.git_ref == "build-branch"
def test_get_project_release(self, release, mock_config): event_object = Parser.parse_event(release) assert isinstance(event_object, ReleaseEvent) project = event_object.get_project() assert isinstance(project, GithubProject) assert isinstance(project.service, GithubService) assert project.namespace == "Codertocat" assert project.repo == "Hello-World"
def test_get_project_pr(self, pull_request, mock_config): event_object = Parser.parse_event(pull_request) assert isinstance(event_object, PullRequestEvent) project = event_object.get_project() assert isinstance(project, GithubProject) assert isinstance(project.service, GithubService) assert project.namespace == "packit-service" assert project.repo == "packit"
def test_testing_farm_response_non_existing_pr(clean_before_and_after, tf_notification, tf_result): flexmock(TestingFarmJobHelper).should_receive( "get_request_details").with_args( SampleValues.pipeline_id).and_return(tf_result) event_object = Parser.parse_event(tf_notification) assert isinstance(event_object, TestingFarmResultsEvent) assert event_object.commit_sha == SampleValues.different_commit_sha assert not event_object.db_trigger
def test_testing_farm_response_non_existing_branch_push( clean_before_and_after, tf_result_dict_branch_push): event_object = Parser.parse_event(tf_result_dict_branch_push) assert isinstance(event_object, TestingFarmResultsEvent) # For backwards compatibility, unknown results are treated as pull-requests assert event_object.identifier == "687abc76d67d" assert event_object.commit_sha == "687abc76d67d" assert event_object.git_ref == "687abc76d67d" assert not event_object.db_trigger
def test_get_project_pr(self, pull_request, mock_config): event_object = Parser.parse_event(pull_request) assert isinstance(event_object, PullRequestEvent) flexmock(Config).should_receive("get_service_config").and_return( flexmock(Config)) project = event_object.get_project() assert isinstance(project, GithubProject) assert isinstance(project.service, GithubService) assert project.namespace == "packit-service" assert project.repo == "packit"
def test_testing_farm_response_non_existing_branch_push( clean_before_and_after, tf_notification, tf_result): flexmock(TestingFarmJobHelper).should_receive( "get_request_details").with_args( SampleValues.pipeline_id).and_return(tf_result) event_object = Parser.parse_event(tf_notification) assert isinstance(event_object, TestingFarmResultsEvent) # For backwards compatibility, unknown results are treated as pull-requests assert event_object.commit_sha == SampleValues.different_commit_sha assert not event_object.db_trigger