summaryrefslogtreecommitdiff
path: root/spec/controllers
diff options
context:
space:
mode:
authorNick Thomas <nick@gitlab.com>2018-04-11 00:55:02 +0100
committerNick Thomas <nick@gitlab.com>2018-04-11 00:55:02 +0100
commit3f73bdd837f9803b75eca484a0a0615db6c58c80 (patch)
tree0bd2c99d9198bfa22e7a29f375131f940033da7b /spec/controllers
parentb594ab949d1a2ceb9d949ff2641679fbdf273452 (diff)
parent37a5632483b67ddcfa4c535cc911319b25f01fb5 (diff)
downloadgitlab-ce-xterm-npm.tar.gz
Merge branch 'master' into xterm-npmxterm-npm
Diffstat (limited to 'spec/controllers')
-rw-r--r--spec/controllers/dashboard_controller_spec.rb2
-rw-r--r--spec/controllers/profiles_controller_spec.rb29
-rw-r--r--spec/controllers/projects/branches_controller_spec.rb18
-rw-r--r--spec/controllers/projects/discussions_controller_spec.rb47
-rw-r--r--spec/controllers/projects/issues_controller_spec.rb2
-rw-r--r--spec/controllers/projects/jobs_controller_spec.rb19
-rw-r--r--spec/controllers/projects/pipelines_settings_controller_spec.rb79
-rw-r--r--spec/controllers/projects/repositories_controller_spec.rb19
-rw-r--r--spec/controllers/projects/settings/ci_cd_controller_spec.rb108
9 files changed, 240 insertions, 83 deletions
diff --git a/spec/controllers/dashboard_controller_spec.rb b/spec/controllers/dashboard_controller_spec.rb
index 97c2c3fb940..3458d679107 100644
--- a/spec/controllers/dashboard_controller_spec.rb
+++ b/spec/controllers/dashboard_controller_spec.rb
@@ -11,9 +11,11 @@ describe DashboardController do
describe 'GET issues' do
it_behaves_like 'issuables list meta-data', :issue, :issues
+ it_behaves_like 'issuables requiring filter', :issues
end
describe 'GET merge requests' do
it_behaves_like 'issuables list meta-data', :merge_request, :merge_requests
+ it_behaves_like 'issuables requiring filter', :merge_requests
end
end
diff --git a/spec/controllers/profiles_controller_spec.rb b/spec/controllers/profiles_controller_spec.rb
index 03cbbb21e62..de6ef919221 100644
--- a/spec/controllers/profiles_controller_spec.rb
+++ b/spec/controllers/profiles_controller_spec.rb
@@ -84,6 +84,35 @@ describe ProfilesController, :request_store do
expect(user.username).to eq(new_username)
end
+ it 'updates a username using JSON request' do
+ sign_in(user)
+
+ put :update_username,
+ user: { username: new_username },
+ format: :json
+
+ expect(response.status).to eq(200)
+ expect(json_response['message']).to eq('Username successfully changed')
+ end
+
+ it 'renders an error message when the username was not updated' do
+ sign_in(user)
+
+ put :update_username,
+ user: { username: 'invalid username.git' },
+ format: :json
+
+ expect(response.status).to eq(422)
+ expect(json_response['message']).to match(/Username change failed/)
+ end
+
+ it 'raises a correct error when the username is missing' do
+ sign_in(user)
+
+ expect { put :update_username, user: { gandalf: 'you shall not pass' } }
+ .to raise_error(ActionController::ParameterMissing)
+ end
+
context 'with legacy storage' do
it 'moves dependent projects to new namespace' do
project = create(:project_empty_repo, :legacy_storage, namespace: namespace)
diff --git a/spec/controllers/projects/branches_controller_spec.rb b/spec/controllers/projects/branches_controller_spec.rb
index 3b9e06cb5ad..16fb377b002 100644
--- a/spec/controllers/projects/branches_controller_spec.rb
+++ b/spec/controllers/projects/branches_controller_spec.rb
@@ -398,6 +398,22 @@ describe Projects::BranchesController do
end
end
+ # We need :request_store because Gitaly only counts the queries whenever
+ # `RequestStore.active?` in GitalyClient.enforce_gitaly_request_limits
+ # And the main goal of this test is making sure TooManyInvocationsError
+ # was not raised whenever the cache is enabled yet cold.
+ context 'when cache is enabled yet cold', :request_store do
+ it 'return with a status 200' do
+ get :index,
+ namespace_id: project.namespace,
+ project_id: project,
+ state: 'all',
+ format: :html
+
+ expect(response).to have_gitlab_http_status(200)
+ end
+ end
+
context 'when branch contains an invalid UTF-8 sequence' do
before do
project.repository.create_branch("wrong-\xE5-utf8-sequence")
@@ -414,7 +430,7 @@ describe Projects::BranchesController do
end
end
- context 'when depreated sort/search/page parameters are specified' do
+ context 'when deprecated sort/search/page parameters are specified' do
it 'returns with a status 301 when sort specified' do
get :index,
namespace_id: project.namespace,
diff --git a/spec/controllers/projects/discussions_controller_spec.rb b/spec/controllers/projects/discussions_controller_spec.rb
index fcb0c2f28c8..53647749a60 100644
--- a/spec/controllers/projects/discussions_controller_spec.rb
+++ b/spec/controllers/projects/discussions_controller_spec.rb
@@ -16,6 +16,53 @@ describe Projects::DiscussionsController do
}
end
+ describe 'GET show' do
+ before do
+ sign_in user
+ end
+
+ context 'when user is not authorized to read the MR' do
+ it 'returns 404' do
+ get :show, request_params, format: :json
+
+ expect(response).to have_gitlab_http_status(404)
+ end
+ end
+
+ context 'when user is authorized to read the MR' do
+ before do
+ project.add_reporter(user)
+ end
+
+ it 'returns status 200' do
+ get :show, request_params, format: :json
+
+ expect(response).to have_gitlab_http_status(200)
+ end
+
+ it 'returns status 404 if MR does not exists' do
+ merge_request.destroy!
+
+ get :show, request_params, format: :json
+
+ expect(response).to have_gitlab_http_status(404)
+ end
+ end
+
+ context 'when user is authorized but note is LegacyDiffNote' do
+ before do
+ project.add_developer(user)
+ note.update!(type: 'LegacyDiffNote')
+ end
+
+ it 'returns status 200' do
+ get :show, request_params, format: :json
+
+ expect(response).to have_gitlab_http_status(200)
+ end
+ end
+ end
+
describe 'POST resolve' do
before do
sign_in user
diff --git a/spec/controllers/projects/issues_controller_spec.rb b/spec/controllers/projects/issues_controller_spec.rb
index 9918d52e402..01b5506b64b 100644
--- a/spec/controllers/projects/issues_controller_spec.rb
+++ b/spec/controllers/projects/issues_controller_spec.rb
@@ -974,7 +974,7 @@ describe Projects::IssuesController do
it 'returns discussion json' do
get :discussions, namespace_id: project.namespace, project_id: project, id: issue.iid
- expect(json_response.first.keys).to match_array(%w[id reply_id expanded notes diff_discussion individual_note resolvable resolve_with_issue_path resolved])
+ expect(json_response.first.keys).to match_array(%w[id reply_id expanded notes diff_discussion individual_note resolvable resolved])
end
context 'with cross-reference system note', :request_store do
diff --git a/spec/controllers/projects/jobs_controller_spec.rb b/spec/controllers/projects/jobs_controller_spec.rb
index 31046c202e6..b9a979044fe 100644
--- a/spec/controllers/projects/jobs_controller_spec.rb
+++ b/spec/controllers/projects/jobs_controller_spec.rb
@@ -513,13 +513,30 @@ describe Projects::JobsController do
end
end
+ context 'when job has a trace in database' do
+ let(:job) { create(:ci_build, pipeline: pipeline) }
+
+ before do
+ job.update_column(:trace, 'Sample trace')
+ end
+
+ it 'send a trace file' do
+ response = subject
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(response.content_type).to eq 'text/plain; charset=utf-8'
+ expect(response.body).to eq 'Sample trace'
+ end
+ end
+
context 'when job does not have a trace file' do
let(:job) { create(:ci_build, pipeline: pipeline) }
it 'returns not_found' do
response = subject
- expect(response).to have_gitlab_http_status(:not_found)
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(response.body).to eq ''
end
end
diff --git a/spec/controllers/projects/pipelines_settings_controller_spec.rb b/spec/controllers/projects/pipelines_settings_controller_spec.rb
index 913b9bd804a..694896b6bcf 100644
--- a/spec/controllers/projects/pipelines_settings_controller_spec.rb
+++ b/spec/controllers/projects/pipelines_settings_controller_spec.rb
@@ -11,82 +11,11 @@ describe Projects::PipelinesSettingsController do
sign_in(user)
end
- describe 'PATCH update' do
- subject do
- patch :update,
- namespace_id: project.namespace.to_param,
- project_id: project,
- project: {
- auto_devops_attributes: params
- }
- end
-
- context 'when updating the auto_devops settings' do
- let(:params) { { enabled: '', domain: 'mepmep.md' } }
-
- it 'redirects to the settings page' do
- subject
-
- expect(response).to have_gitlab_http_status(302)
- expect(flash[:notice]).to eq("Pipelines settings for '#{project.name}' were successfully updated.")
- end
-
- context 'following the instance default' do
- let(:params) { { enabled: '' } }
-
- it 'allows enabled to be set to nil' do
- subject
- project_auto_devops.reload
-
- expect(project_auto_devops.enabled).to be_nil
- end
- end
-
- context 'when run_auto_devops_pipeline is true' do
- before do
- expect_any_instance_of(Projects::UpdateService).to receive(:run_auto_devops_pipeline?).and_return(true)
- end
-
- context 'when the project repository is empty' do
- it 'sets a warning flash' do
- expect(subject).to set_flash[:warning]
- end
-
- it 'does not queue a CreatePipelineWorker' do
- expect(CreatePipelineWorker).not_to receive(:perform_async).with(project.id, user.id, project.default_branch, :web, any_args)
-
- subject
- end
- end
-
- context 'when the project repository is not empty' do
- let(:project) { create(:project, :repository) }
-
- it 'sets a success flash' do
- allow(CreatePipelineWorker).to receive(:perform_async).with(project.id, user.id, project.default_branch, :web, any_args)
-
- expect(subject).to set_flash[:success]
- end
-
- it 'queues a CreatePipelineWorker' do
- expect(CreatePipelineWorker).to receive(:perform_async).with(project.id, user.id, project.default_branch, :web, any_args)
-
- subject
- end
- end
- end
-
- context 'when run_auto_devops_pipeline is not true' do
- before do
- expect_any_instance_of(Projects::UpdateService).to receive(:run_auto_devops_pipeline?).and_return(false)
- end
-
- it 'does not queue a CreatePipelineWorker' do
- expect(CreatePipelineWorker).not_to receive(:perform_async).with(project.id, user.id, :web, any_args)
+ describe 'GET show' do
+ it 'redirects with 302 status code' do
+ get :show, namespace_id: project.namespace, project_id: project
- subject
- end
- end
+ expect(response).to have_gitlab_http_status(302)
end
end
end
diff --git a/spec/controllers/projects/repositories_controller_spec.rb b/spec/controllers/projects/repositories_controller_spec.rb
index 04d16e98913..c3b71458e38 100644
--- a/spec/controllers/projects/repositories_controller_spec.rb
+++ b/spec/controllers/projects/repositories_controller_spec.rb
@@ -6,7 +6,7 @@ describe Projects::RepositoriesController do
describe "GET archive" do
context 'as a guest' do
it 'responds with redirect in correct format' do
- get :archive, namespace_id: project.namespace, project_id: project, format: "zip", ref: 'master'
+ get :archive, namespace_id: project.namespace, project_id: project, id: "master", format: "zip"
expect(response.header["Content-Type"]).to start_with('text/html')
expect(response).to be_redirect
@@ -22,7 +22,20 @@ describe Projects::RepositoriesController do
end
it "uses Gitlab::Workhorse" do
- get :archive, namespace_id: project.namespace, project_id: project, ref: "master", format: "zip"
+ get :archive, namespace_id: project.namespace, project_id: project, id: "master", format: "zip"
+
+ expect(response.header[Gitlab::Workhorse::SEND_DATA_HEADER]).to start_with("git-archive:")
+ end
+
+ it 'responds with redirect to the short name archive if fully qualified' do
+ get :archive, namespace_id: project.namespace, project_id: project, id: "master/#{project.path}-master", format: "zip"
+
+ expect(assigns(:ref)).to eq("master")
+ expect(response.header[Gitlab::Workhorse::SEND_DATA_HEADER]).to start_with("git-archive:")
+ end
+
+ it 'handles legacy queries with no ref' do
+ get :archive, namespace_id: project.namespace, project_id: project, format: "zip"
expect(response.header[Gitlab::Workhorse::SEND_DATA_HEADER]).to start_with("git-archive:")
end
@@ -33,7 +46,7 @@ describe Projects::RepositoriesController do
end
it "renders Not Found" do
- get :archive, namespace_id: project.namespace, project_id: project, ref: "master", format: "zip"
+ get :archive, namespace_id: project.namespace, project_id: project, id: "master", format: "zip"
expect(response).to have_gitlab_http_status(404)
end
diff --git a/spec/controllers/projects/settings/ci_cd_controller_spec.rb b/spec/controllers/projects/settings/ci_cd_controller_spec.rb
index 293e76798ae..7dae9b85d78 100644
--- a/spec/controllers/projects/settings/ci_cd_controller_spec.rb
+++ b/spec/controllers/projects/settings/ci_cd_controller_spec.rb
@@ -1,8 +1,9 @@
require('spec_helper')
describe Projects::Settings::CiCdController do
- let(:project) { create(:project, :public, :access_requestable) }
- let(:user) { create(:user) }
+ set(:user) { create(:user) }
+ set(:project_auto_devops) { create(:project_auto_devops) }
+ let(:project) { project_auto_devops.project }
before do
project.add_master(user)
@@ -55,4 +56,107 @@ describe Projects::Settings::CiCdController do
end
end
end
+
+ describe 'PATCH update' do
+ let(:params) { { ci_config_path: '' } }
+
+ subject do
+ patch :update,
+ namespace_id: project.namespace.to_param,
+ project_id: project,
+ project: params
+ end
+
+ it 'redirects to the settings page' do
+ subject
+
+ expect(response).to have_gitlab_http_status(302)
+ expect(flash[:notice]).to eq("Pipelines settings for '#{project.name}' were successfully updated.")
+ end
+
+ context 'when updating the auto_devops settings' do
+ let(:params) { { auto_devops_attributes: { enabled: '', domain: 'mepmep.md' } } }
+
+ context 'following the instance default' do
+ let(:params) { { auto_devops_attributes: { enabled: '' } } }
+
+ it 'allows enabled to be set to nil' do
+ subject
+ project_auto_devops.reload
+
+ expect(project_auto_devops.enabled).to be_nil
+ end
+ end
+
+ context 'when run_auto_devops_pipeline is true' do
+ before do
+ expect_any_instance_of(Projects::UpdateService).to receive(:run_auto_devops_pipeline?).and_return(true)
+ end
+
+ context 'when the project repository is empty' do
+ it 'sets a warning flash' do
+ expect(subject).to set_flash[:warning]
+ end
+
+ it 'does not queue a CreatePipelineWorker' do
+ expect(CreatePipelineWorker).not_to receive(:perform_async).with(project.id, user.id, project.default_branch, :web, any_args)
+
+ subject
+ end
+ end
+
+ context 'when the project repository is not empty' do
+ let(:project) { create(:project, :repository) }
+
+ it 'sets a success flash' do
+ allow(CreatePipelineWorker).to receive(:perform_async).with(project.id, user.id, project.default_branch, :web, any_args)
+
+ expect(subject).to set_flash[:success]
+ end
+
+ it 'queues a CreatePipelineWorker' do
+ expect(CreatePipelineWorker).to receive(:perform_async).with(project.id, user.id, project.default_branch, :web, any_args)
+
+ subject
+ end
+ end
+ end
+
+ context 'when run_auto_devops_pipeline is not true' do
+ before do
+ expect_any_instance_of(Projects::UpdateService).to receive(:run_auto_devops_pipeline?).and_return(false)
+ end
+
+ it 'does not queue a CreatePipelineWorker' do
+ expect(CreatePipelineWorker).not_to receive(:perform_async).with(project.id, user.id, :web, any_args)
+
+ subject
+ end
+ end
+ end
+
+ context 'when updating general settings' do
+ context 'when build_timeout_human_readable is not specified' do
+ let(:params) { { build_timeout_human_readable: '' } }
+
+ it 'set default timeout' do
+ subject
+
+ project.reload
+ expect(project.build_timeout).to eq(3600)
+ end
+ end
+
+ context 'when build_timeout_human_readable is specified' do
+ let(:params) { { build_timeout_human_readable: '1h 30m' } }
+
+ it 'set specified timeout' do
+ subject
+
+ project.reload
+ expect(project.build_timeout).to eq(5400)
+ end
+ end
+ end
+ end
end