Commit 88b5921a authored by Maxime Orefice's avatar Maxime Orefice

Expose test reports with attachment on pipeline

parent 00286b2f
......@@ -172,9 +172,15 @@ class Projects::PipelinesController < Projects::ApplicationController
if pipeline_test_report == :error
render json: { status: :error_parsing_report }
else
test_reports = if params[:scope] == "with_attachment"
pipeline_test_report.with_attachment!
else
pipeline_test_report
end
render json: TestReportSerializer
.new(current_user: @current_user)
.represent(pipeline_test_report)
.represent(test_reports)
end
end
end
......
......@@ -788,6 +788,28 @@ describe Projects::PipelinesController do
expect(json_response['status']).to eq('error_parsing_report')
end
end
context 'when test_report contains attachment and scope is with_attachment as a URL param' do
let(:pipeline) { create(:ci_pipeline, :with_test_reports_attachment, project: project) }
it 'returns a test reports with attachment' do
get_test_report_json(scope: 'with_attachment')
expect(response).to have_gitlab_http_status(:ok)
expect(json_response["test_suites"]).to be_present
end
end
context 'when test_report does not contain attachment and scope is with_attachment as a URL param' do
let(:pipeline) { create(:ci_pipeline, :with_test_reports, project: project) }
it 'returns a test reports with empty values' do
get_test_report_json(scope: 'with_attachment')
expect(response).to have_gitlab_http_status(:ok)
expect(json_response["test_suites"]).to be_empty
end
end
end
context 'when feature is disabled' do
......@@ -805,12 +827,17 @@ describe Projects::PipelinesController do
end
end
def get_test_report_json
get :test_report, params: {
def get_test_report_json(**args)
params = {
namespace_id: project.namespace,
project_id: project,
id: pipeline.id
},
}
params.merge!(args) if args
get :test_report,
params: params,
format: :json
end
......
......@@ -311,6 +311,12 @@ FactoryBot.define do
end
end
trait :test_reports_with_attachment do
after(:build) do |build|
build.job_artifacts << create(:ci_job_artifact, :junit_with_attachment, job: build)
end
end
trait :coverage_reports do
after(:build) do |build|
build.job_artifacts << create(:ci_job_artifact, :cobertura, job: build)
......
......@@ -99,6 +99,16 @@ FactoryBot.define do
end
end
trait :junit_with_attachment do
file_type { :junit }
file_format { :gzip }
after(:build) do |artifact, evaluator|
artifact.file = fixture_file_upload(
Rails.root.join('spec/fixtures/junit/junit_with_attachment.xml.gz'), 'application/x-gzip')
end
end
trait :junit_with_ant do
file_type { :junit }
file_format { :gzip }
......
......@@ -67,6 +67,14 @@ FactoryBot.define do
end
end
trait :with_test_reports_attachment do
status { :success }
after(:build) do |pipeline, evaluator|
pipeline.builds << build(:ci_build, :test_reports_with_attachment, pipeline: pipeline, project: pipeline.project)
end
end
trait :with_coverage_reports do
status { :success }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment