diff options
Diffstat (limited to 'spec/graphql/resolvers/package_pipelines_resolver_spec.rb')
-rw-r--r-- | spec/graphql/resolvers/package_pipelines_resolver_spec.rb | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/spec/graphql/resolvers/package_pipelines_resolver_spec.rb b/spec/graphql/resolvers/package_pipelines_resolver_spec.rb new file mode 100644 index 00000000000..d48d4d8ae01 --- /dev/null +++ b/spec/graphql/resolvers/package_pipelines_resolver_spec.rb @@ -0,0 +1,84 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Resolvers::PackagePipelinesResolver do + include GraphqlHelpers + + let_it_be_with_reload(:package) { create(:package) } + let_it_be(:pipelines) { create_list(:ci_pipeline, 3, project: package.project) } + + let(:user) { package.project.owner } + let(:args) { {} } + + describe '#resolve' do + subject { resolve(described_class, obj: package, args: args, ctx: { current_user: user }) } + + before do + package.pipelines = pipelines + package.save! + end + + it { is_expected.to contain_exactly(*pipelines) } + + context 'with invalid after' do + let(:args) { { first: 1, after: 'not_json_string' } } + + it 'raises argument error' do + expect { subject }.to raise_error(Gitlab::Graphql::Errors::ArgumentError) + end + end + + context 'with invalid after key' do + let(:args) { { first: 1, after: encode_cursor(foo: 3) } } + + it 'raises argument error' do + expect { subject }.to raise_error(Gitlab::Graphql::Errors::ArgumentError) + end + end + + context 'with invalid before' do + let(:args) { { last: 1, before: 'not_json_string' } } + + it 'raises argument error' do + expect { subject }.to raise_error(Gitlab::Graphql::Errors::ArgumentError) + end + end + + context 'with invalid before key' do + let(:args) { { last: 1, before: encode_cursor(foo: 3) } } + + it 'raises argument error' do + expect { subject }.to raise_error(Gitlab::Graphql::Errors::ArgumentError) + end + end + + context 'field options' do + let(:field) do + field_options = described_class.field_options.merge( + owner: resolver_parent, + name: 'dummy_field' + ) + ::Types::BaseField.new(**field_options) + end + + it 'sets them properly' do + expect(field).not_to be_connection + expect(field.extras).to match_array([:lookahead]) + end + end + + context 'with unauthorized user' do + let_it_be(:user) { create(:user) } + + it { is_expected.to be_nil } + end + + def encode_cursor(json) + GitlabSchema.cursor_encoder.encode( + Gitlab::Json.dump(json), + nonce: true + ) + end + end +end |