diff options
Diffstat (limited to 'spec/models/concerns/from_set_operator_spec.rb')
-rw-r--r-- | spec/models/concerns/from_set_operator_spec.rb | 51 |
1 files changed, 50 insertions, 1 deletions
diff --git a/spec/models/concerns/from_set_operator_spec.rb b/spec/models/concerns/from_set_operator_spec.rb index 8ebbb5550c9..1ef0d1adb08 100644 --- a/spec/models/concerns/from_set_operator_spec.rb +++ b/spec/models/concerns/from_set_operator_spec.rb @@ -3,7 +3,22 @@ require 'spec_helper' RSpec.describe FromSetOperator do - describe 'when set operator method already exists' do + let_it_be(:from_set_operator) do + Class.new do + extend FromSetOperator + define_set_operator Gitlab::SQL::Union + + def table_name + 'groups' + end + + def from(*args) + '' + end + end + end + + context 'when set operator method already exists' do let(:redefine_method) do Class.new do def self.from_union @@ -17,4 +32,38 @@ RSpec.describe FromSetOperator do it { expect { redefine_method }.to raise_exception(RuntimeError) } end + + context 'with members' do + let_it_be(:group1) { create :group } + let_it_be(:group2) { create :group } + let_it_be(:groups) do + [ + Group.where(id: group1), + Group.where(id: group2) + ] + end + + shared_examples 'set operator called with correct members' do + it do + expect(Gitlab::SQL::Union).to receive(:new).with(groups, anything).and_call_original + subject + end + end + + context 'as array' do + subject { from_set_operator.new.from_union(groups) } + + it_behaves_like 'set operator called with correct members' + + it { expect { subject }.not_to make_queries } + end + + context 'as multiple parameters' do + subject { from_set_operator.new.from_union(*groups) } + + it_behaves_like 'set operator called with correct members' + + it { expect { subject }.not_to make_queries } + end + end end |