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:
Diffstat (limited to 'spec/controllers/graphql_controller_spec.rb')
-rw-r--r--spec/controllers/graphql_controller_spec.rb129
1 files changed, 16 insertions, 113 deletions
diff --git a/spec/controllers/graphql_controller_spec.rb b/spec/controllers/graphql_controller_spec.rb
index 75f281caa90..7aad67b01e8 100644
--- a/spec/controllers/graphql_controller_spec.rb
+++ b/spec/controllers/graphql_controller_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe GraphqlController do
+RSpec.describe GraphqlController, feature_category: :integrations do
include GraphqlHelpers
# two days is enough to make timezones irrelevant
@@ -329,11 +329,24 @@ RSpec.describe GraphqlController do
expect(assigns(:context)[:request]).to eq request
end
+
+ it 'sets `context[:remove_deprecated]` to false by default' do
+ post :execute
+
+ expect(assigns(:context)[:remove_deprecated]).to be false
+ end
+
+ it 'sets `context[:remove_deprecated]` to true when `remove_deprecated` param is truthy' do
+ post :execute, params: { remove_deprecated: '1' }
+
+ expect(assigns(:context)[:remove_deprecated]).to be true
+ end
end
describe 'Admin Mode' do
- let(:admin) { create(:admin) }
- let(:project) { create(:project) }
+ let_it_be(:admin) { create(:admin) }
+ let_it_be(:project) { create(:project) }
+
let(:graphql_query) { graphql_query_for('project', { 'fullPath' => project.full_path }, %w(id name)) }
before do
@@ -431,114 +444,4 @@ RSpec.describe GraphqlController do
expect(log_payload.dig(:exception_object)).to eq(exception)
end
end
-
- describe 'removal of deprecated items' do
- let(:mock_schema) do
- Class.new(GraphQL::Schema) do
- lazy_resolve ::Gitlab::Graphql::Lazy, :force
-
- query(Class.new(::Types::BaseObject) do
- graphql_name 'Query'
-
- field :foo, GraphQL::Types::Boolean,
- deprecated: { milestone: '0.1', reason: :renamed }
-
- field :bar, (Class.new(::Types::BaseEnum) do
- graphql_name 'BarEnum'
-
- value 'FOOBAR', value: 'foobar', deprecated: { milestone: '0.1', reason: :renamed }
- end)
-
- field :baz, GraphQL::Types::Boolean do
- argument :arg, String, required: false, deprecated: { milestone: '0.1', reason: :renamed }
- end
-
- def foo
- false
- end
-
- def bar
- 'foobar'
- end
-
- def baz(arg:)
- false
- end
- end)
- end
- end
-
- before do
- allow(GitlabSchema).to receive(:execute).and_wrap_original do |method, *args|
- mock_schema.execute(*args)
- end
- end
-
- context 'without `remove_deprecated` param' do
- let(:params) { { query: '{ foo bar baz(arg: "test") }' } }
-
- subject { post :execute, params: params }
-
- it "sets context's `remove_deprecated` value to false" do
- subject
-
- expect(assigns(:context)[:remove_deprecated]).to be false
- end
-
- it 'returns deprecated items in response' do
- subject
-
- expect(json_response).to include('data' => { 'foo' => false, 'bar' => 'FOOBAR', 'baz' => false })
- end
- end
-
- context 'with `remove_deprecated` param' do
- let(:params) { { remove_deprecated: 'true' } }
-
- subject { post :execute, params: params }
-
- it "sets context's `remove_deprecated` value to true" do
- subject
-
- expect(assigns(:context)[:remove_deprecated]).to be true
- end
-
- it 'does not allow deprecated field' do
- params[:query] = '{ foo }'
-
- subject
-
- expect(json_response).not_to include('data' => { 'foo' => false })
- expect(json_response).to include(
- 'errors' => include(a_hash_including('message' => /Field 'foo' doesn't exist on type 'Query'/))
- )
- end
-
- it 'does not allow deprecated enum value' do
- params[:query] = '{ bar }'
-
- subject
-
- expect(json_response).not_to include('data' => { 'bar' => 'FOOBAR' })
- expect(json_response).to include(
- 'errors' => include(
- a_hash_including(
- 'message' => /`Query.bar` returned `"foobar"` at `bar`, but this isn't a valid value for `BarEnum`/
- )
- )
- )
- end
-
- it 'does not allow deprecated argument' do
- params[:query] = '{ baz(arg: "test") }'
-
- subject
-
- expect(json_response).not_to include('data' => { 'bar' => 'FOOBAR' })
- expect(json_response).to include(
- 'errors' => include(a_hash_including('message' => /Field 'baz' doesn't accept argument 'arg'/))
- )
- end
- end
- end
end