gitlab-org--gitlab-foss/app/graphql/resolvers/ci/test_suite_resolver.rb

40 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::Types::ID],
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