diff --git a/gitlab4j-api/src/main/java/org/gitlab4j/api/PipelineApi.java b/gitlab4j-api/src/main/java/org/gitlab4j/api/PipelineApi.java index d43e3d28d..90826adc5 100644 --- a/gitlab4j-api/src/main/java/org/gitlab4j/api/PipelineApi.java +++ b/gitlab4j-api/src/main/java/org/gitlab4j/api/PipelineApi.java @@ -14,6 +14,7 @@ import org.gitlab4j.api.models.PipelineFilter; import org.gitlab4j.api.models.PipelineSchedule; import org.gitlab4j.api.models.PipelineStatus; +import org.gitlab4j.api.models.TestReportSummary; import org.gitlab4j.api.models.Trigger; import org.gitlab4j.api.models.Variable; import org.gitlab4j.models.Constants; @@ -794,6 +795,28 @@ public void deletePipelineScheduleVariable(Object projectIdOrPath, Long pipeline key); } + /** + * Get the test report summary for a pipeline. + * + *
GET /projects/:id/pipelines/:pipeline_id/test_report_summary
+ * + * @param projectIdOrPath projectIdOrPath the project in the form of an Long(ID), String(path), or Project instance, required + * @param pipelineId the pipeline ID + * @return the test report summary for the pipeline + */ + public TestReportSummary getTestReportSummaryForPipeline(Object projectIdOrPath, long pipelineId) + throws GitLabApiException { + Response response = get( + Response.Status.OK, + null, + "projects", + getProjectIdOrPath(projectIdOrPath), + "pipelines", + pipelineId, + "test_report_summary"); + return response.readEntity(TestReportSummary.class); + } + /** * Get a list of the project pipeline triggers for the specified project. * diff --git a/gitlab4j-api/src/test/java/org/gitlab4j/api/TestPipelineApi.java b/gitlab4j-api/src/test/java/org/gitlab4j/api/TestPipelineApi.java index af681133d..d28c198bc 100644 --- a/gitlab4j-api/src/test/java/org/gitlab4j/api/TestPipelineApi.java +++ b/gitlab4j-api/src/test/java/org/gitlab4j/api/TestPipelineApi.java @@ -22,6 +22,7 @@ import org.gitlab4j.api.models.Project; import org.gitlab4j.api.models.RepositoryFile; import org.gitlab4j.api.models.RepositoryFileResponse; +import org.gitlab4j.api.models.TestReportSummary; import org.gitlab4j.api.models.Trigger; import org.gitlab4j.api.models.Variable; import org.gitlab4j.models.Constants; @@ -401,4 +402,12 @@ public void testGetBridges() throws GitLabApiException { .collect(Collectors.toSet()); assertNotNull(bridges); } + + @Test + @Disabled("disable till 'Move the test infrastructure to Testcontainers #925'") + public void testGetTestReportSummary() throws GitLabApiException { + TestReportSummary testReportSummary = + gitLabApi.getPipelineApi().getTestReportSummaryForPipeline(testProject, 4L); + assertNotNull(testReportSummary); + } } diff --git a/gitlab4j-models/src/main/java/org/gitlab4j/api/models/TestReportStats.java b/gitlab4j-models/src/main/java/org/gitlab4j/api/models/TestReportStats.java new file mode 100644 index 000000000..7e04d8867 --- /dev/null +++ b/gitlab4j-models/src/main/java/org/gitlab4j/api/models/TestReportStats.java @@ -0,0 +1,78 @@ +package org.gitlab4j.api.models; + +import java.io.Serializable; + +import org.gitlab4j.models.utils.JacksonJson; + +public class TestReportStats implements Serializable { + private static final long serialVersionUID = 1L; + + private Long time; + private Long count; + private Long success; + private Long failed; + private Long skipped; + private Long error; + private String suiteError; + + public Long getTime() { + return time; + } + + public void setTime(Long time) { + this.time = time; + } + + public Long getCount() { + return count; + } + + public void setCount(Long count) { + this.count = count; + } + + public Long getSuccess() { + return success; + } + + public void setSuccess(Long success) { + this.success = success; + } + + public Long getFailed() { + return failed; + } + + public void setFailed(Long failed) { + this.failed = failed; + } + + public Long getSkipped() { + return skipped; + } + + public void setSkipped(Long skipped) { + this.skipped = skipped; + } + + public Long getError() { + return error; + } + + public void setError(Long error) { + this.error = error; + } + + public String getSuiteError() { + return suiteError; + } + + public void setSuiteError(String suiteError) { + this.suiteError = suiteError; + } + + @Override + public String toString() { + return (JacksonJson.toJsonString(this)); + } +} diff --git a/gitlab4j-models/src/main/java/org/gitlab4j/api/models/TestReportSummary.java b/gitlab4j-models/src/main/java/org/gitlab4j/api/models/TestReportSummary.java new file mode 100644 index 000000000..bb46201ee --- /dev/null +++ b/gitlab4j-models/src/main/java/org/gitlab4j/api/models/TestReportSummary.java @@ -0,0 +1,34 @@ +package org.gitlab4j.api.models; + +import java.io.Serializable; +import java.util.List; + +import org.gitlab4j.models.utils.JacksonJson; + +public class TestReportSummary implements Serializable { + private static final long serialVersionUID = 1L; + + private TestReportStats total; + private List testSuites; + + public TestReportStats getTotal() { + return total; + } + + public void setTotal(TestReportStats total) { + this.total = total; + } + + public List getTestSuites() { + return testSuites; + } + + public void setTestSuites(List testSuites) { + this.testSuites = testSuites; + } + + @Override + public String toString() { + return (JacksonJson.toJsonString(this)); + } +} diff --git a/gitlab4j-models/src/main/java/org/gitlab4j/api/models/TestSuite.java b/gitlab4j-models/src/main/java/org/gitlab4j/api/models/TestSuite.java new file mode 100644 index 000000000..0df6c2b8d --- /dev/null +++ b/gitlab4j-models/src/main/java/org/gitlab4j/api/models/TestSuite.java @@ -0,0 +1,97 @@ +package org.gitlab4j.api.models; + +import java.io.Serializable; +import java.util.List; + +import org.gitlab4j.models.utils.JacksonJson; + +public class TestSuite implements Serializable { + private static final long serialVersionUID = 1L; + + private String name; + private Long totalTime; + private Long totalCount; + private Long successCount; + private Long failedCount; + private Long skippedCount; + private Long errorCount; + private List buildIds; + private String suiteError; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getTotalTime() { + return totalTime; + } + + public void setTotalTime(Long totalTime) { + this.totalTime = totalTime; + } + + public Long getTotalCount() { + return totalCount; + } + + public void setTotalCount(Long totalCount) { + this.totalCount = totalCount; + } + + public Long getSuccessCount() { + return successCount; + } + + public void setSuccessCount(Long successCount) { + this.successCount = successCount; + } + + public Long getFailedCount() { + return failedCount; + } + + public void setFailedCount(Long failedCount) { + this.failedCount = failedCount; + } + + public Long getSkippedCount() { + return skippedCount; + } + + public void setSkippedCount(Long skippedCount) { + this.skippedCount = skippedCount; + } + + public Long getErrorCount() { + return errorCount; + } + + public void setErrorCount(Long errorCount) { + this.errorCount = errorCount; + } + + public List getBuildIds() { + return buildIds; + } + + public void setBuildIds(List buildIds) { + this.buildIds = buildIds; + } + + public String getSuiteError() { + return suiteError; + } + + public void setSuiteError(String suiteError) { + this.suiteError = suiteError; + } + + @Override + public String toString() { + return (JacksonJson.toJsonString(this)); + } +} diff --git a/gitlab4j-models/src/test/java/org/gitlab4j/models/TestGitLabApiBeans.java b/gitlab4j-models/src/test/java/org/gitlab4j/models/TestGitLabApiBeans.java index a2b8720a9..59d834b7f 100644 --- a/gitlab4j-models/src/test/java/org/gitlab4j/models/TestGitLabApiBeans.java +++ b/gitlab4j-models/src/test/java/org/gitlab4j/models/TestGitLabApiBeans.java @@ -410,6 +410,13 @@ public void testPipelineSchedule() throws Exception { assertTrue(compareJson(pipelineSchedule, "pipeline-schedule.json")); } + @Test + public void testPipelineTestReportSummary() throws Exception { + TestReportSummary testReportSummary = + unmarshalResource(TestReportSummary.class, "pipeline-test-report-summary.json"); + assertTrue(compareJson(testReportSummary, "pipeline-test-report-summary.json")); + } + @Test public void testPipelineVariables() throws Exception { List variables = unmarshalResourceList(Variable.class, "pipeline-variables.json"); diff --git a/gitlab4j-models/src/test/resources/org/gitlab4j/models/pipeline-test-report-summary.json b/gitlab4j-models/src/test/resources/org/gitlab4j/models/pipeline-test-report-summary.json new file mode 100644 index 000000000..c7f0f8066 --- /dev/null +++ b/gitlab4j-models/src/test/resources/org/gitlab4j/models/pipeline-test-report-summary.json @@ -0,0 +1,26 @@ +{ + "total": { + "time": 1904, + "count": 3363, + "success": 3351, + "failed": 0, + "skipped": 12, + "error": 0, + "suite_error": "An error" + }, + "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": "Another error" + } + ] +}