diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-02-03 12:09:13 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-02-03 12:09:13 +0000 |
commit | 83916cf0a2f9254455a08a723961db34f0840df4 (patch) | |
tree | 41995d4ec0210785de1cd71853cbd1380570b2e7 /spec/controllers/graphql_controller_spec.rb | |
parent | a9c5941625be2416fbf3b514019886e8f9658416 (diff) | |
download | gitlab-ce-83916cf0a2f9254455a08a723961db34f0840df4.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/controllers/graphql_controller_spec.rb')
-rw-r--r-- | spec/controllers/graphql_controller_spec.rb | 129 |
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 |