Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-05-18 12:10:37 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-05-18 12:10:37 +0300
commitac70f62e33c37970180e706906a8ce538155c9c5 (patch)
tree32624f461169b323a246ba15e1782e55b81afece /spec/graphql
parent5b63a652d1e07996101c2ce147da4a9eea6c89e1 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/graphql')
-rw-r--r--spec/graphql/resolvers/ci/runners_resolver_spec.rb136
-rw-r--r--spec/graphql/types/query_type_spec.rb7
2 files changed, 143 insertions, 0 deletions
diff --git a/spec/graphql/resolvers/ci/runners_resolver_spec.rb b/spec/graphql/resolvers/ci/runners_resolver_spec.rb
new file mode 100644
index 00000000000..006d6785506
--- /dev/null
+++ b/spec/graphql/resolvers/ci/runners_resolver_spec.rb
@@ -0,0 +1,136 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Resolvers::Ci::RunnersResolver do
+ include GraphqlHelpers
+
+ let_it_be(:user) { create_default(:user, :admin) }
+ let_it_be(:group) { create(:group, :public) }
+ let_it_be(:project) { create(:project, :repository, :public) }
+
+ let_it_be(:inactive_project_runner) do
+ create(:ci_runner, :project, projects: [project], active: false, contacted_at: 1.minute.ago, tag_list: %w(project_runner))
+ end
+
+ let_it_be(:offline_project_runner) do
+ create(:ci_runner, :project, projects: [project], contacted_at: 1.day.ago, tag_list: %w(project_runner active_runner))
+ end
+
+ let_it_be(:group_runner) { create(:ci_runner, :group, groups: [group], contacted_at: 1.second.ago) }
+ let_it_be(:instance_runner) { create(:ci_runner, :instance, contacted_at: 2.minutes.ago, tag_list: %w(instance_runner active_runner)) }
+
+ describe '#resolve' do
+ subject { resolve(described_class, ctx: { current_user: user }, args: args).items.to_a }
+
+ let(:args) do
+ {}
+ end
+
+ context 'without sort' do
+ it 'returns all the runners' do
+ is_expected.to contain_exactly(inactive_project_runner, offline_project_runner, group_runner, instance_runner)
+ end
+ end
+
+ context 'with a sort argument' do
+ context "set to :contacted_asc" do
+ let(:args) do
+ { sort: :contacted_asc }
+ end
+
+ it { is_expected.to eq([offline_project_runner, instance_runner, inactive_project_runner, group_runner]) }
+ end
+
+ context "set to :created_date" do
+ let(:args) do
+ { sort: :created_date }
+ end
+
+ it { is_expected.to eq([instance_runner, group_runner, offline_project_runner, inactive_project_runner]) }
+ end
+ end
+
+ context 'when type is filtered' do
+ let(:args) do
+ { type: runner_type.to_s }
+ end
+
+ context 'to instance runners' do
+ let(:runner_type) { :instance_type }
+
+ it 'returns the instance runner' do
+ is_expected.to contain_exactly(instance_runner)
+ end
+ end
+
+ context 'to group runners' do
+ let(:runner_type) { :group_type }
+
+ it 'returns the group runner' do
+ is_expected.to contain_exactly(group_runner)
+ end
+ end
+
+ context 'to project runners' do
+ let(:runner_type) { :project_type }
+
+ it 'returns the project runner' do
+ is_expected.to contain_exactly(inactive_project_runner, offline_project_runner)
+ end
+ end
+ end
+
+ context 'when status is filtered' do
+ let(:args) do
+ { status: runner_status.to_s }
+ end
+
+ context 'to active runners' do
+ let(:runner_status) { :active }
+
+ it 'returns the instance and group runners' do
+ is_expected.to contain_exactly(offline_project_runner, group_runner, instance_runner)
+ end
+ end
+
+ context 'to offline runners' do
+ let(:runner_status) { :offline }
+
+ it 'returns the offline project runner' do
+ is_expected.to contain_exactly(offline_project_runner)
+ end
+ end
+ end
+
+ context 'when tag list is filtered' do
+ let(:args) do
+ { tag_list: tag_list }
+ end
+
+ context 'with "project_runner" tag' do
+ let(:tag_list) { ['project_runner'] }
+
+ it 'returns the project_runner runners' do
+ is_expected.to contain_exactly(offline_project_runner, inactive_project_runner)
+ end
+ end
+
+ context 'with "project_runner" and "active_runner" tags as comma-separated string' do
+ let(:tag_list) { ['project_runner,active_runner'] }
+
+ it 'returns the offline_project_runner runner' do
+ is_expected.to contain_exactly(offline_project_runner)
+ end
+ end
+
+ context 'with "active_runner" and "instance_runner" tags as array' do
+ let(:tag_list) { %w[instance_runner active_runner] }
+
+ it 'returns the offline_project_runner runner' do
+ is_expected.to contain_exactly(instance_runner)
+ end
+ end
+ end
+ end
+end
diff --git a/spec/graphql/types/query_type_spec.rb b/spec/graphql/types/query_type_spec.rb
index f0e80fa8f14..9a8f2090cc1 100644
--- a/spec/graphql/types/query_type_spec.rb
+++ b/spec/graphql/types/query_type_spec.rb
@@ -25,6 +25,7 @@ RSpec.describe GitlabSchema.types['Query'] do
usage_trends_measurements
runner_platforms
runner
+ runners
]
expect(described_class).to have_graphql_fields(*expected_fields).at_least
@@ -91,6 +92,12 @@ RSpec.describe GitlabSchema.types['Query'] do
it { is_expected.to have_graphql_type(Types::Ci::RunnerType) }
end
+ describe 'runners field' do
+ subject { described_class.fields['runners'] }
+
+ it { is_expected.to have_graphql_type(Types::Ci::RunnerType.connection_type) }
+ end
+
describe 'runner_platforms field' do
subject { described_class.fields['runnerPlatforms'] }