diff options
author | charlieablett <cablett@gitlab.com> | 2019-06-16 13:12:56 +0300 |
---|---|---|
committer | charlieablett <cablett@gitlab.com> | 2019-07-03 13:53:13 +0300 |
commit | 8b809837f44bbebdac65eebadb09a45fb60c6a65 (patch) | |
tree | f4c4d929f6dcd74c939290eaf1d79f809b6032fe /spec/graphql | |
parent | 9b06890d1d6901b840fb321c9b99264c2e8813f7 (diff) |
Enumerate fields with Gitaly calls
- Add a complexity of 1 if Gitaly is called at least once
- Add an error notification if `calls_gitaly` isn't right for a
particular field
Diffstat (limited to 'spec/graphql')
-rw-r--r-- | spec/graphql/types/base_field_spec.rb | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/spec/graphql/types/base_field_spec.rb b/spec/graphql/types/base_field_spec.rb index 0d3c3e37daf..ebdfa3eaf4d 100644 --- a/spec/graphql/types/base_field_spec.rb +++ b/spec/graphql/types/base_field_spec.rb @@ -22,6 +22,24 @@ describe Types::BaseField do expect(field.to_graphql.complexity).to eq 1 end + describe '#base_complexity' do + context 'with no gitaly calls' do + it 'defaults to 1' do + field = described_class.new(name: 'test', type: GraphQL::STRING_TYPE, null: true) + + expect(field.base_complexity).to eq 1 + end + end + + context 'with a gitaly call' do + it 'adds 1 to the default value' do + field = described_class.new(name: 'test', type: GraphQL::STRING_TYPE, null: true, calls_gitaly: true) + + expect(field.base_complexity).to eq 2 + end + end + end + it 'has specified value' do field = described_class.new(name: 'test', type: GraphQL::STRING_TYPE, null: true, complexity: 12) @@ -52,5 +70,68 @@ describe Types::BaseField do end end end + + context 'calls_gitaly' do + context 'for fields with a resolver' do + it 'adds 1 if true' do + field = described_class.new(name: 'test', type: GraphQL::STRING_TYPE, null: true, calls_gitaly: true) + + expect(field.to_graphql.complexity).to eq 2 + end + end + + context 'for fields without a resolver' do + it 'adds 1 if true' do + field = described_class.new(name: 'test', type: GraphQL::STRING_TYPE, null: true, calls_gitaly: true) + + expect(field.to_graphql.complexity).to eq 2 + end + end + + it 'defaults to false' do + field = described_class.new(name: 'test', type: GraphQL::STRING_TYPE, null: true) + + expect(field.base_complexity).to eq Types::BaseField::DEFAULT_COMPLEXITY + end + + it 'is overridden by declared complexity value' do + field = described_class.new(name: 'test', type: GraphQL::STRING_TYPE, null: true, calls_gitaly: true, complexity: 12) + + expect(field.to_graphql.complexity).to eq 12 + end + end + + describe '#calls_gitaly_check' do + let(:gitaly_field) { described_class.new(name: 'test', type: GraphQL::STRING_TYPE, null: true, calls_gitaly: true) } + let(:no_gitaly_field) { described_class.new(name: 'test', type: GraphQL::STRING_TYPE, null: true, calls_gitaly: false) } + + context 'if there are no Gitaly calls' do + before do + allow(Gitlab::GitalyClient).to receive(:get_request_count).and_return(0) + end + + it 'does not raise an error if calls_gitaly is false' do + expect { no_gitaly_field.send(:calls_gitaly_check) }.not_to raise_error + end + + it 'raises an error if calls_gitaly: true appears' do + expect { gitaly_field.send(:calls_gitaly_check) }.to raise_error(/please add `calls_gitaly: true`/) + end + end + + context 'if there is at least 1 Gitaly call' do + before do + allow(Gitlab::GitalyClient).to receive(:get_request_count).and_return(1) + end + + it 'does not raise an error if calls_gitaly is true' do + expect { gitaly_field.send(:calls_gitaly_check) }.not_to raise_error + end + + it 'raises an error if calls_gitaly is not decalared' do + expect { no_gitaly_field.send(:calls_gitaly_check) }.to raise_error(/please remove `calls_gitaly: true`/) + end + end + end end end |