From a97e0cf81b5394b3a2b73d927b4efe675bc85208 Mon Sep 17 00:00:00 2001 From: kinbald Date: Mon, 7 Mar 2022 23:46:14 +0100 Subject: [PATCH 1/3] feat(object): add pipeline test report summary support --- gitlab/v4/objects/pipelines.py | 20 ++++++++++ tests/unit/objects/test_pipelines.py | 55 +++++++++++++++++++++++++++- 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/gitlab/v4/objects/pipelines.py b/gitlab/v4/objects/pipelines.py index ec4e8e45e..0c2f22eae 100644 --- a/gitlab/v4/objects/pipelines.py +++ b/gitlab/v4/objects/pipelines.py @@ -35,6 +35,8 @@ "ProjectPipelineScheduleManager", "ProjectPipelineTestReport", "ProjectPipelineTestReportManager", + "ProjectPipelineTestReportSummary", + "ProjectPipelineTestReportSummaryManager", ] @@ -52,6 +54,7 @@ class ProjectPipeline(RefreshMixin, ObjectDeleteMixin, RESTObject): bridges: "ProjectPipelineBridgeManager" jobs: "ProjectPipelineJobManager" test_report: "ProjectPipelineTestReportManager" + test_report_summary: "ProjectPipelineTestReportSummaryManager" variables: "ProjectPipelineVariableManager" @cli.register_custom_action("ProjectPipeline") @@ -251,3 +254,20 @@ def get( self, id: Optional[Union[int, str]] = None, **kwargs: Any ) -> Optional[ProjectPipelineTestReport]: return cast(Optional[ProjectPipelineTestReport], super().get(id=id, **kwargs)) + + +class ProjectPipelineTestReportSummary(RESTObject): + _id_attr = None + + +class ProjectPipelineTestReportSummaryManager(GetWithoutIdMixin, RESTManager): + _path = "/projects/{project_id}/pipelines/{pipeline_id}/test_report_summary" + _obj_cls = ProjectPipelineTestReportSummary + _from_parent_attrs = {"project_id": "project_id", "pipeline_id": "id"} + + def get( + self, id: Optional[Union[int, str]] = None, **kwargs: Any + ) -> Optional[ProjectPipelineTestReportSummary]: + return cast( + Optional[ProjectPipelineTestReportSummary], super().get(id=id, **kwargs) + ) diff --git a/tests/unit/objects/test_pipelines.py b/tests/unit/objects/test_pipelines.py index 3412f6d7a..e4d2b9e7f 100644 --- a/tests/unit/objects/test_pipelines.py +++ b/tests/unit/objects/test_pipelines.py @@ -4,7 +4,11 @@ import pytest import responses -from gitlab.v4.objects import ProjectPipeline, ProjectPipelineTestReport +from gitlab.v4.objects import ( + ProjectPipeline, + ProjectPipelineTestReport, + ProjectPipelineTestReportSummary, +) pipeline_content = { "id": 46, @@ -66,6 +70,32 @@ } +test_report_summary_content = { + "total": { + "time": 1904, + "count": 3363, + "success": 3351, + "failed": 0, + "skipped": 12, + "error": 0, + "suite_error": None, + }, + "test_suites": [ + { + "name": "test", + "total_time": 1904, + "total_count": 3363, + "success_count": 3351, + "failed_count": 0, + "skipped_count": 12, + "error_count": 0, + "build_ids": [66004], + "suite_error": None, + } + ], +} + + @pytest.fixture def resp_get_pipeline(): with responses.RequestsMock() as rsps: @@ -118,6 +148,19 @@ def resp_get_pipeline_test_report(): yield rsps +@pytest.fixture +def resp_get_pipeline_test_report_summary(): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.GET, + url="http://localhost/api/v4/projects/1/pipelines/1/test_report_summary", + json=test_report_summary_content, + content_type="application/json", + status=200, + ) + yield rsps + + def test_get_project_pipeline(project, resp_get_pipeline): pipeline = project.pipelines.get(1) assert isinstance(pipeline, ProjectPipeline) @@ -144,3 +187,13 @@ def test_get_project_pipeline_test_report(project, resp_get_pipeline_test_report assert isinstance(test_report, ProjectPipelineTestReport) assert test_report.total_time == 5 assert test_report.test_suites[0]["name"] == "Secure" + + +def test_get_project_pipeline_test_report_summary( + project, resp_get_pipeline_test_report_summary +): + pipeline = project.pipelines.get(1, lazy=True) + test_report_summary = pipeline.test_report_summary.get() + assert isinstance(test_report_summary, ProjectPipelineTestReportSummary) + assert test_report_summary.total["count"] == 3363 + assert test_report_summary.test_suites[0]["name"] == "test" From d78afb36e26f41d727dee7b0952d53166e0df850 Mon Sep 17 00:00:00 2001 From: kinbald Date: Mon, 7 Mar 2022 23:47:14 +0100 Subject: [PATCH 2/3] docs: add pipeline test report summary support --- docs/gl_objects/pipelines_and_jobs.rst | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/docs/gl_objects/pipelines_and_jobs.rst b/docs/gl_objects/pipelines_and_jobs.rst index 1628dc7bb..919e1c581 100644 --- a/docs/gl_objects/pipelines_and_jobs.rst +++ b/docs/gl_objects/pipelines_and_jobs.rst @@ -367,3 +367,27 @@ Examples Get the test report for a pipeline:: test_report = pipeline.test_report.get() + +Pipeline test report summary +==================== + +Get a pipeline’s test report summary. + +Reference +--------- + +* v4 API + + + :class:`gitlab.v4.objects.ProjectPipelineTestReportSummary` + + :class:`gitlab.v4.objects.ProjectPipelineTestReportSummaryManager` + + :attr:`gitlab.v4.objects.ProjectPipeline.test_report)summary` + +* GitLab API: https://docs.gitlab.com/ee/api/pipelines.html#get-a-pipelines-test-report-summary + +Examples +-------- + +Get the test report summary for a pipeline:: + + test_report_summary = pipeline.test_report_summary.get() + From 2828b10505611194bebda59a0e9eb41faf24b77b Mon Sep 17 00:00:00 2001 From: kinbald Date: Wed, 9 Mar 2022 17:53:47 +0100 Subject: [PATCH 3/3] docs: fix typo and incorrect style --- docs/gl_objects/pipelines_and_jobs.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/gl_objects/pipelines_and_jobs.rst b/docs/gl_objects/pipelines_and_jobs.rst index 919e1c581..a05d968a4 100644 --- a/docs/gl_objects/pipelines_and_jobs.rst +++ b/docs/gl_objects/pipelines_and_jobs.rst @@ -369,7 +369,7 @@ Get the test report for a pipeline:: test_report = pipeline.test_report.get() Pipeline test report summary -==================== +============================ Get a pipeline’s test report summary. @@ -380,7 +380,7 @@ Reference + :class:`gitlab.v4.objects.ProjectPipelineTestReportSummary` + :class:`gitlab.v4.objects.ProjectPipelineTestReportSummaryManager` - + :attr:`gitlab.v4.objects.ProjectPipeline.test_report)summary` + + :attr:`gitlab.v4.objects.ProjectPipeline.test_report_summary` * GitLab API: https://docs.gitlab.com/ee/api/pipelines.html#get-a-pipelines-test-report-summary