Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/spec/lib
diff options
context:
space:
mode:
authorAndreas Brandl <abrandl@gitlab.com>2018-04-11 18:45:22 +0300
committerAndreas Brandl <abrandl@gitlab.com>2018-04-13 16:59:45 +0300
commitc4e4258721ae08718a69d73e5046119e4db2f5ef (patch)
tree6669e7c658fd30d06a14a31bee9b4bd849e402b6 /spec/lib
parentab98308db7d907e5fad53d2b1e3435960a1665cd (diff)
Validate project path prior to hitting the database.
Closes #45247.
Diffstat (limited to 'spec/lib')
-rw-r--r--spec/lib/api/helpers_spec.rb42
1 files changed, 42 insertions, 0 deletions
diff --git a/spec/lib/api/helpers_spec.rb b/spec/lib/api/helpers_spec.rb
index 3c4deba4712..58a49124ce6 100644
--- a/spec/lib/api/helpers_spec.rb
+++ b/spec/lib/api/helpers_spec.rb
@@ -3,6 +3,48 @@ require 'spec_helper'
describe API::Helpers do
subject { Class.new.include(described_class).new }
+ describe '#find_project' do
+ let(:project) { create(:project) }
+
+ shared_examples 'project finder' do
+ context 'when project exists' do
+ it 'returns requested project' do
+ expect(subject.find_project(existing_id)).to eq(project)
+ end
+
+ it 'returns nil' do
+ expect(subject.find_project(non_existing_id)).to be_nil
+ end
+ end
+ end
+
+ context 'when ID is used as an argument' do
+ let(:existing_id) { project.id }
+ let(:non_existing_id) { (Project.maximum(:id) || 0) + 1 }
+
+ it_behaves_like 'project finder'
+ end
+
+ context 'when PATH is used as an argument' do
+ let(:existing_id) { project.full_path }
+ let(:non_existing_id) { 'something/else' }
+
+ it_behaves_like 'project finder'
+
+ context 'with an invalid PATH' do
+ let(:non_existing_id) { 'undefined' } # path without slash
+
+ it_behaves_like 'project finder'
+
+ it 'does not hit the database' do
+ expect(Project).not_to receive(:find_by_full_path)
+
+ subject.find_project(non_existing_id)
+ end
+ end
+ end
+ end
+
describe '#find_namespace' do
let(:namespace) { create(:namespace) }