summaryrefslogtreecommitdiff
path: root/spec/requests/ide_controller_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/requests/ide_controller_spec.rb')
-rw-r--r--spec/requests/ide_controller_spec.rb174
1 files changed, 173 insertions, 1 deletions
diff --git a/spec/requests/ide_controller_spec.rb b/spec/requests/ide_controller_spec.rb
index 805c1f1d82b..4f127e07b6b 100644
--- a/spec/requests/ide_controller_spec.rb
+++ b/spec/requests/ide_controller_spec.rb
@@ -3,7 +3,11 @@
require 'spec_helper'
RSpec.describe IdeController do
- let(:user) { create(:user) }
+ let_it_be(:project) { create(:project, :public) }
+ let_it_be(:creator) { project.creator }
+ let_it_be(:other_user) { create(:user) }
+
+ let(:user) { creator }
before do
sign_in(user)
@@ -14,4 +18,172 @@ RSpec.describe IdeController do
get ide_url
end
+
+ describe '#index', :aggregate_failures do
+ subject { get route }
+
+ shared_examples 'user cannot push code' do
+ include ProjectForksHelper
+
+ let(:user) { other_user }
+
+ context 'when user does not have fork' do
+ it 'does not instantiate forked_project instance var and return 200' do
+ subject
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(assigns(:project)).to eq project
+ expect(assigns(:forked_project)).to be_nil
+ end
+ end
+
+ context 'when user has have fork' do
+ let!(:fork) { fork_project(project, user, repository: true) }
+
+ it 'instantiates forked_project instance var and return 200' do
+ subject
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(assigns(:project)).to eq project
+ expect(assigns(:forked_project)).to eq fork
+ end
+ end
+ end
+
+ context '/-/ide' do
+ let(:route) { '/-/ide' }
+
+ it 'does not instantiate any instance var and return 200' do
+ subject
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(assigns(:project)).to be_nil
+ expect(assigns(:branch)).to be_nil
+ expect(assigns(:path)).to be_nil
+ expect(assigns(:merge_request)).to be_nil
+ expect(assigns(:forked_project)).to be_nil
+ end
+ end
+
+ context '/-/ide/project' do
+ let(:route) { '/-/ide/project' }
+
+ it 'does not instantiate any instance var and return 200' do
+ subject
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(assigns(:project)).to be_nil
+ expect(assigns(:branch)).to be_nil
+ expect(assigns(:path)).to be_nil
+ expect(assigns(:merge_request)).to be_nil
+ expect(assigns(:forked_project)).to be_nil
+ end
+ end
+
+ context '/-/ide/project/:project' do
+ let(:route) { "/-/ide/project/#{project.full_path}" }
+
+ it 'instantiates project instance var and return 200' do
+ subject
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(assigns(:project)).to eq project
+ expect(assigns(:branch)).to be_nil
+ expect(assigns(:path)).to be_nil
+ expect(assigns(:merge_request)).to be_nil
+ expect(assigns(:forked_project)).to be_nil
+ end
+
+ it_behaves_like 'user cannot push code'
+
+ %w(edit blob tree).each do |action|
+ context "/-/ide/project/:project/#{action}" do
+ let(:route) { "/-/ide/project/#{project.full_path}/#{action}" }
+
+ it 'instantiates project instance var and return 200' do
+ subject
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(assigns(:project)).to eq project
+ expect(assigns(:branch)).to be_nil
+ expect(assigns(:path)).to be_nil
+ expect(assigns(:merge_request)).to be_nil
+ expect(assigns(:forked_project)).to be_nil
+ end
+
+ it_behaves_like 'user cannot push code'
+
+ context "/-/ide/project/:project/#{action}/:branch" do
+ let(:route) { "/-/ide/project/#{project.full_path}/#{action}/master" }
+
+ it 'instantiates project and branch instance vars and return 200' do
+ subject
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(assigns(:project)).to eq project
+ expect(assigns(:branch)).to eq 'master'
+ expect(assigns(:path)).to be_nil
+ expect(assigns(:merge_request)).to be_nil
+ expect(assigns(:forked_project)).to be_nil
+ end
+
+ it_behaves_like 'user cannot push code'
+
+ context "/-/ide/project/:project/#{action}/:branch/-" do
+ let(:route) { "/-/ide/project/#{project.full_path}/#{action}/branch/slash/-" }
+
+ it 'instantiates project and branch instance vars and return 200' do
+ subject
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(assigns(:project)).to eq project
+ expect(assigns(:branch)).to eq 'branch/slash'
+ expect(assigns(:path)).to be_nil
+ expect(assigns(:merge_request)).to be_nil
+ expect(assigns(:forked_project)).to be_nil
+ end
+
+ it_behaves_like 'user cannot push code'
+
+ context "/-/ide/project/:project/#{action}/:branch/-/:path" do
+ let(:route) { "/-/ide/project/#{project.full_path}/#{action}/master/-/foo/.bar" }
+
+ it 'instantiates project, branch, and path instance vars and return 200' do
+ subject
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(assigns(:project)).to eq project
+ expect(assigns(:branch)).to eq 'master'
+ expect(assigns(:path)).to eq 'foo/.bar'
+ expect(assigns(:merge_request)).to be_nil
+ expect(assigns(:forked_project)).to be_nil
+ end
+
+ it_behaves_like 'user cannot push code'
+ end
+ end
+ end
+ end
+ end
+
+ context '/-/ide/project/:project/merge_requests/:merge_request_id' do
+ let!(:merge_request) { create(:merge_request, source_project: project, target_project: project) }
+
+ let(:route) { "/-/ide/project/#{project.full_path}/merge_requests/#{merge_request.id}" }
+
+ it 'instantiates project and merge_request instance vars and return 200' do
+ subject
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(assigns(:project)).to eq project
+ expect(assigns(:branch)).to be_nil
+ expect(assigns(:path)).to be_nil
+ expect(assigns(:merge_request)).to eq merge_request.id.to_s
+ expect(assigns(:forked_project)).to be_nil
+ end
+
+ it_behaves_like 'user cannot push code'
+ end
+ end
+ end
end