1# frozen_string_literal: true 2 3require 'spec_helper' 4 5RSpec.describe Resolvers::DesignManagement::Version::DesignAtVersionResolver do 6 include GraphqlHelpers 7 8 include_context 'four designs in three versions' 9 10 let(:current_user) { authorized_user } 11 let(:gql_context) { { current_user: current_user } } 12 13 let(:version) { third_version } 14 let(:design) { design_a } 15 16 let(:all_singular_args) do 17 { 18 id: global_id_of(dav(design)), 19 design_id: global_id_of(design), 20 filename: design.filename 21 } 22 end 23 24 shared_examples 'a bad argument' do 25 let(:err_class) { ::Gitlab::Graphql::Errors::ArgumentError } 26 27 it 'raises an appropriate error' do 28 expect { resolve_objects }.to raise_error(err_class) 29 end 30 end 31 32 describe '#resolve' do 33 describe 'passing combinations of arguments' do 34 context 'passing no arguments' do 35 let(:args) { {} } 36 37 it_behaves_like 'a bad argument' 38 end 39 40 context 'passing all arguments' do 41 let(:args) { all_singular_args } 42 43 it_behaves_like 'a bad argument' 44 end 45 46 context 'passing any two arguments' do 47 let(:args) { all_singular_args.slice(*all_singular_args.keys.sample(2)) } 48 49 it_behaves_like 'a bad argument' 50 end 51 end 52 53 %i[id design_id filename].each do |arg| 54 describe "passing #{arg}" do 55 let(:args) { all_singular_args.slice(arg) } 56 57 it 'finds the design' do 58 expect(resolve_objects).to eq(dav(design)) 59 end 60 61 context 'when the user cannot see designs' do 62 let(:current_user) { create(:user) } 63 64 it 'returns nothing' do 65 expect(resolve_objects).to be_nil 66 end 67 end 68 end 69 end 70 71 describe 'attempting to retrieve an object not visible at this version' do 72 let(:design) { design_d } 73 74 %i[id design_id filename].each do |arg| 75 describe "passing #{arg}" do 76 let(:args) { all_singular_args.slice(arg) } 77 78 it 'does not find the design' do 79 expect(resolve_objects).to be_nil 80 end 81 end 82 end 83 end 84 end 85 86 def resolve_objects 87 resolve(described_class, obj: version, args: args, ctx: gql_context) 88 end 89 90 def dav(design) 91 build(:design_at_version, design: design, version: version) 92 end 93end 94