41 lines
1 KiB
Ruby
41 lines
1 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Resolvers
|
||
|
module Ci
|
||
|
class TestSuiteResolver < BaseResolver
|
||
|
include Gitlab::Graphql::Authorize::AuthorizeResource
|
||
|
|
||
|
type ::Types::Ci::TestSuiteType, null: true
|
||
|
authorize :read_build
|
||
|
authorizes_object!
|
||
|
|
||
|
alias_method :pipeline, :object
|
||
|
|
||
|
argument :build_ids, [GraphQL::ID_TYPE],
|
||
|
required: true,
|
||
|
description: 'IDs of the builds used to run the test suite.'
|
||
|
|
||
|
def resolve(build_ids:)
|
||
|
builds = pipeline.latest_builds.id_in(build_ids).presence
|
||
|
return unless builds
|
||
|
|
||
|
TestSuiteSerializer
|
||
|
.new(project: pipeline.project, current_user: @current_user)
|
||
|
.represent(load_test_suite_data(builds), details: true)
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def load_test_suite_data(builds)
|
||
|
suite = builds.sum do |build|
|
||
|
build.collect_test_reports!(Gitlab::Ci::Reports::TestReports.new)
|
||
|
end
|
||
|
|
||
|
Gitlab::Ci::Reports::TestFailureHistory.new(suite.failed.values, pipeline.project).load!
|
||
|
|
||
|
suite
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|