diff options
Diffstat (limited to 'spec/finders/concerns')
-rw-r--r-- | spec/finders/concerns/finder_methods_spec.rb | 51 | ||||
-rw-r--r-- | spec/finders/concerns/finder_with_cross_project_access_spec.rb | 4 |
2 files changed, 41 insertions, 14 deletions
diff --git a/spec/finders/concerns/finder_methods_spec.rb b/spec/finders/concerns/finder_methods_spec.rb index 195449d70c3..09ec8110129 100644 --- a/spec/finders/concerns/finder_methods_spec.rb +++ b/spec/finders/concerns/finder_methods_spec.rb @@ -12,7 +12,7 @@ RSpec.describe FinderMethods do end def execute - Project.all.order(id: :desc) + Project.where.not(name: 'foo').order(id: :desc) end private @@ -21,22 +21,30 @@ RSpec.describe FinderMethods do end end - let(:user) { create(:user) } - let(:finder) { finder_class.new(user) } - let(:authorized_project) { create(:project) } - let(:unauthorized_project) { create(:project) } + let_it_be(:user) { create(:user) } + let_it_be(:authorized_project) { create(:project) } + let_it_be(:unmatched_project) { create(:project, name: 'foo') } + let_it_be(:unauthorized_project) { create(:project) } - before do + subject(:finder) { finder_class.new(user) } + + before_all do authorized_project.add_developer(user) + unmatched_project.add_developer(user) end + # rubocop:disable Rails/FindById describe '#find_by!' do it 'returns the project if the user has access' do expect(finder.find_by!(id: authorized_project.id)).to eq(authorized_project) end - it 'raises not found when the project is not found' do - expect { finder.find_by!(id: 0) }.to raise_error(ActiveRecord::RecordNotFound) + it 'raises not found when the project is not found by id' do + expect { finder.find_by!(id: non_existing_record_id) }.to raise_error(ActiveRecord::RecordNotFound) + end + + it 'raises not found when the project is not found by filter' do + expect { finder.find_by!(id: unmatched_project.id) }.to raise_error(ActiveRecord::RecordNotFound) end it 'raises not found the user does not have access' do @@ -53,19 +61,34 @@ RSpec.describe FinderMethods do finder.find_by!(id: authorized_project.id) end end + # rubocop:enable Rails/FindById describe '#find' do it 'returns the project if the user has access' do expect(finder.find(authorized_project.id)).to eq(authorized_project) end - it 'raises not found when the project is not found' do - expect { finder.find(0) }.to raise_error(ActiveRecord::RecordNotFound) + it 'raises not found when the project is not found by id' do + expect { finder.find(non_existing_record_id) }.to raise_error(ActiveRecord::RecordNotFound) + end + + it 'raises not found when the project is not found by filter' do + expect { finder.find(unmatched_project.id) }.to raise_error(ActiveRecord::RecordNotFound) end it 'raises not found the user does not have access' do expect { finder.find(unauthorized_project.id) }.to raise_error(ActiveRecord::RecordNotFound) end + + it 'ignores ordering' do + # Memoise the finder result so we can add message expectations to it + relation = finder.execute + allow(finder).to receive(:execute).and_return(relation) + + expect(relation).to receive(:reorder).with(nil).and_call_original + + finder.find(authorized_project.id) + end end describe '#find_by' do @@ -73,8 +96,12 @@ RSpec.describe FinderMethods do expect(finder.find_by(id: authorized_project.id)).to eq(authorized_project) end - it 'returns nil when the project is not found' do - expect(finder.find_by(id: 0)).to be_nil + it 'returns nil when the project is not found by id' do + expect(finder.find_by(id: non_existing_record_id)).to be_nil + end + + it 'returns nil when the project is not found by filter' do + expect(finder.find_by(id: unmatched_project.id)).to be_nil end it 'returns nil when the user does not have access' do diff --git a/spec/finders/concerns/finder_with_cross_project_access_spec.rb b/spec/finders/concerns/finder_with_cross_project_access_spec.rb index 116b523bd99..0798528c200 100644 --- a/spec/finders/concerns/finder_with_cross_project_access_spec.rb +++ b/spec/finders/concerns/finder_with_cross_project_access_spec.rb @@ -93,11 +93,11 @@ RSpec.describe FinderWithCrossProjectAccess do it 'checks the accessibility of the subject directly' do expect_access_check_on_result - finder.find_by!(id: result.id) + finder.find(result.id) end it 're-enables the check after the find failed' do - finder.find_by!(id: non_existing_record_id) rescue ActiveRecord::RecordNotFound + finder.find(non_existing_record_id) rescue ActiveRecord::RecordNotFound expect(finder.instance_variable_get(:@should_skip_cross_project_check)) .to eq(false) |