summaryrefslogtreecommitdiff
path: root/spec/controllers/projects
diff options
context:
space:
mode:
Diffstat (limited to 'spec/controllers/projects')
-rw-r--r--spec/controllers/projects/analytics/cycle_analytics/stages_controller_spec.rb1
-rw-r--r--spec/controllers/projects/artifacts_controller_spec.rb6
-rw-r--r--spec/controllers/projects/blame_controller_spec.rb2
-rw-r--r--spec/controllers/projects/ci/daily_build_group_report_results_controller_spec.rb74
-rw-r--r--spec/controllers/projects/ci/lints_controller_spec.rb9
-rw-r--r--spec/controllers/projects/cycle_analytics_controller_spec.rb12
-rw-r--r--spec/controllers/projects/deploy_keys_controller_spec.rb4
-rw-r--r--spec/controllers/projects/environments_controller_spec.rb126
-rw-r--r--spec/controllers/projects/feature_flags_controller_spec.rb6
-rw-r--r--spec/controllers/projects/grafana_api_controller_spec.rb4
-rw-r--r--spec/controllers/projects/graphs_controller_spec.rb15
-rw-r--r--spec/controllers/projects/jobs_controller_spec.rb136
-rw-r--r--spec/controllers/projects/labels_controller_spec.rb8
-rw-r--r--spec/controllers/projects/merge_requests/drafts_controller_spec.rb73
-rw-r--r--spec/controllers/projects/merge_requests_controller_spec.rb91
-rw-r--r--spec/controllers/projects/notes_controller_spec.rb2
-rw-r--r--spec/controllers/projects/pipeline_schedules_controller_spec.rb3
-rw-r--r--spec/controllers/projects/pipelines/tests_controller_spec.rb11
-rw-r--r--spec/controllers/projects/pipelines_controller_spec.rb87
-rw-r--r--spec/controllers/projects/project_members_controller_spec.rb32
-rw-r--r--spec/controllers/projects/registry/tags_controller_spec.rb2
-rw-r--r--spec/controllers/projects/releases_controller_spec.rb2
-rw-r--r--spec/controllers/projects/service_desk_controller_spec.rb5
-rw-r--r--spec/controllers/projects/settings/integrations_controller_spec.rb8
-rw-r--r--spec/controllers/projects/settings/merge_requests_controller_spec.rb52
-rw-r--r--spec/controllers/projects/tree_controller_spec.rb6
26 files changed, 540 insertions, 237 deletions
diff --git a/spec/controllers/projects/analytics/cycle_analytics/stages_controller_spec.rb b/spec/controllers/projects/analytics/cycle_analytics/stages_controller_spec.rb
index 8903592ba15..b9e569b1647 100644
--- a/spec/controllers/projects/analytics/cycle_analytics/stages_controller_spec.rb
+++ b/spec/controllers/projects/analytics/cycle_analytics/stages_controller_spec.rb
@@ -16,7 +16,6 @@ RSpec.describe Projects::Analytics::CycleAnalytics::StagesController do
end
before do
- stub_feature_flags(use_vsa_aggregated_tables: false)
sign_in(user)
end
diff --git a/spec/controllers/projects/artifacts_controller_spec.rb b/spec/controllers/projects/artifacts_controller_spec.rb
index 958fcd4360c..263f488ddbf 100644
--- a/spec/controllers/projects/artifacts_controller_spec.rb
+++ b/spec/controllers/projects/artifacts_controller_spec.rb
@@ -488,7 +488,7 @@ RSpec.describe Projects::ArtifactsController do
context 'with regular branch' do
before do
pipeline.update!(ref: 'master',
- sha: project.commit('master').sha)
+ sha: project.commit('master').sha)
get :latest_succeeded, params: params_from_ref('master')
end
@@ -499,7 +499,7 @@ RSpec.describe Projects::ArtifactsController do
context 'with branch name containing slash' do
before do
pipeline.update!(ref: 'improve/awesome',
- sha: project.commit('improve/awesome').sha)
+ sha: project.commit('improve/awesome').sha)
get :latest_succeeded, params: params_from_ref('improve/awesome')
end
@@ -510,7 +510,7 @@ RSpec.describe Projects::ArtifactsController do
context 'with branch name and path containing slashes' do
before do
pipeline.update!(ref: 'improve/awesome',
- sha: project.commit('improve/awesome').sha)
+ sha: project.commit('improve/awesome').sha)
get :latest_succeeded, params: params_from_ref('improve/awesome', job.name, 'file/README.md')
end
diff --git a/spec/controllers/projects/blame_controller_spec.rb b/spec/controllers/projects/blame_controller_spec.rb
index bf475f6135a..62a544bb3fc 100644
--- a/spec/controllers/projects/blame_controller_spec.rb
+++ b/spec/controllers/projects/blame_controller_spec.rb
@@ -41,7 +41,7 @@ RSpec.describe Projects::BlameController do
end
context "invalid branch, valid file" do
- let(:id) { 'invalid-branch/files/ruby/missing_file.rb'}
+ let(:id) { 'invalid-branch/files/ruby/missing_file.rb' }
it { is_expected.to respond_with(:not_found) }
end
diff --git a/spec/controllers/projects/ci/daily_build_group_report_results_controller_spec.rb b/spec/controllers/projects/ci/daily_build_group_report_results_controller_spec.rb
index 3c4376909f8..e5bffb7c265 100644
--- a/spec/controllers/projects/ci/daily_build_group_report_results_controller_spec.rb
+++ b/spec/controllers/projects/ci/daily_build_group_report_results_controller_spec.rb
@@ -59,12 +59,13 @@ RSpec.describe Projects::Ci::DailyBuildGroupReportResultsController do
expect(response).to have_gitlab_http_status(:ok)
expect(response.headers['Content-Type']).to eq('text/csv; charset=utf-8')
- expect(csv_response).to eq([
- %w[date group_name coverage],
- ['2020-03-09', 'rspec', '79.0'],
- ['2020-03-08', 'rspec', '77.0'],
- ['2019-12-10', 'karma', '81.0']
- ])
+ expect(csv_response).to eq(
+ [
+ %w[date group_name coverage],
+ ['2020-03-09', 'rspec', '79.0'],
+ ['2020-03-08', 'rspec', '77.0'],
+ ['2019-12-10', 'karma', '81.0']
+ ])
end
context 'when given date range spans more than 90 days' do
@@ -72,12 +73,13 @@ RSpec.describe Projects::Ci::DailyBuildGroupReportResultsController do
let(:end_date) { '2020-03-09' }
it 'limits the result to 90 days from the given start_date' do
- expect(csv_response).to eq([
- %w[date group_name coverage],
- ['2020-03-09', 'rspec', '79.0'],
- ['2020-03-08', 'rspec', '77.0'],
- ['2019-12-10', 'karma', '81.0']
- ])
+ expect(csv_response).to eq(
+ [
+ %w[date group_name coverage],
+ ['2020-03-09', 'rspec', '79.0'],
+ ['2020-03-08', 'rspec', '77.0'],
+ ['2019-12-10', 'karma', '81.0']
+ ])
end
end
@@ -89,29 +91,8 @@ RSpec.describe Projects::Ci::DailyBuildGroupReportResultsController do
it 'serves the results in JSON' do
expect(response).to have_gitlab_http_status(:ok)
- expect(json_response).to eq([
- {
- 'group_name' => 'rspec',
- 'data' => [
- { 'date' => '2020-03-09', 'coverage' => 79.0 },
- { 'date' => '2020-03-08', 'coverage' => 77.0 }
- ]
- },
- {
- 'group_name' => 'karma',
- 'data' => [
- { 'date' => '2019-12-10', 'coverage' => 81.0 }
- ]
- }
- ])
- end
-
- context 'when given date range spans more than 90 days' do
- let(:start_date) { '2019-12-09' }
- let(:end_date) { '2020-03-09' }
-
- it 'limits the result to 90 days from the given start_date' do
- expect(json_response).to eq([
+ expect(json_response).to eq(
+ [
{
'group_name' => 'rspec',
'data' => [
@@ -126,6 +107,29 @@ RSpec.describe Projects::Ci::DailyBuildGroupReportResultsController do
]
}
])
+ end
+
+ context 'when given date range spans more than 90 days' do
+ let(:start_date) { '2019-12-09' }
+ let(:end_date) { '2020-03-09' }
+
+ it 'limits the result to 90 days from the given start_date' do
+ expect(json_response).to eq(
+ [
+ {
+ 'group_name' => 'rspec',
+ 'data' => [
+ { 'date' => '2020-03-09', 'coverage' => 79.0 },
+ { 'date' => '2020-03-08', 'coverage' => 77.0 }
+ ]
+ },
+ {
+ 'group_name' => 'karma',
+ 'data' => [
+ { 'date' => '2019-12-10', 'coverage' => 81.0 }
+ ]
+ }
+ ])
end
end
diff --git a/spec/controllers/projects/ci/lints_controller_spec.rb b/spec/controllers/projects/ci/lints_controller_spec.rb
index d778739be38..403f99145fc 100644
--- a/spec/controllers/projects/ci/lints_controller_spec.rb
+++ b/spec/controllers/projects/ci/lints_controller_spec.rb
@@ -143,10 +143,11 @@ RSpec.describe Projects::Ci::LintsController do
it_behaves_like 'returns a successful validation'
it 'assigns result with errors' do
- expect(parsed_body['errors']).to match_array([
- 'jobs rubocop config should implement a script: or a trigger: keyword',
- 'jobs config should contain at least one visible job'
- ])
+ expect(parsed_body['errors']).to match_array(
+ [
+ 'jobs rubocop config should implement a script: or a trigger: keyword',
+ 'jobs config should contain at least one visible job'
+ ])
end
context 'with dry_run mode' do
diff --git a/spec/controllers/projects/cycle_analytics_controller_spec.rb b/spec/controllers/projects/cycle_analytics_controller_spec.rb
index ccd213fdffa..f5dd8abd67b 100644
--- a/spec/controllers/projects/cycle_analytics_controller_spec.rb
+++ b/spec/controllers/projects/cycle_analytics_controller_spec.rb
@@ -30,6 +30,18 @@ RSpec.describe Projects::CycleAnalyticsController do
let(:request_params) { { namespace_id: project.namespace, project_id: project } }
let(:target_id) { 'p_analytics_valuestream' }
end
+
+ it_behaves_like 'Snowplow event tracking' do
+ subject { get :show, params: request_params, format: :html }
+
+ let(:request_params) { { namespace_id: project.namespace, project_id: project } }
+ let(:feature_flag_name) { :route_hll_to_snowplow_phase2 }
+ let(:category) { described_class.name }
+ let(:action) { 'perform_analytics_usage_action' }
+ let(:namespace) { project.namespace }
+ let(:label) { 'redis_hll_counters.analytics.analytics_total_unique_counts_monthly' }
+ let(:property) { 'p_analytics_valuestream' }
+ end
end
include_examples GracefulTimeoutHandling
diff --git a/spec/controllers/projects/deploy_keys_controller_spec.rb b/spec/controllers/projects/deploy_keys_controller_spec.rb
index 821f7fca73d..308146ce792 100644
--- a/spec/controllers/projects/deploy_keys_controller_spec.rb
+++ b/spec/controllers/projects/deploy_keys_controller_spec.rb
@@ -27,8 +27,8 @@ RSpec.describe Projects::DeployKeysController do
end
context 'when json requested' do
- let(:project2) { create(:project, :internal)}
- let(:project_private) { create(:project, :private)}
+ let(:project2) { create(:project, :internal) }
+ let(:project_private) { create(:project, :private) }
let(:deploy_key_internal) { create(:deploy_key) }
let(:deploy_key_actual) { create(:deploy_key) }
diff --git a/spec/controllers/projects/environments_controller_spec.rb b/spec/controllers/projects/environments_controller_spec.rb
index 1a6edab795d..16a43bae674 100644
--- a/spec/controllers/projects/environments_controller_spec.rb
+++ b/spec/controllers/projects/environments_controller_spec.rb
@@ -32,6 +32,11 @@ RSpec.describe Projects::EnvironmentsController do
get :index, params: environment_params
end
+
+ it_behaves_like 'tracking unique visits', :index do
+ let(:request_params) { environment_params }
+ let(:target_id) { 'users_visiting_environments_pages' }
+ end
end
context 'when requesting JSON response for folders' do
@@ -68,6 +73,24 @@ RSpec.describe Projects::EnvironmentsController do
expect(json_response['stopped_count']).to eq 1
end
+ it 'handles search option properly' do
+ get :index, params: environment_params(format: :json, search: 'staging/r')
+
+ expect(environments.map { |env| env['name'] } ).to contain_exactly('staging/review-1', 'staging/review-2')
+ expect(json_response['available_count']).to eq 2
+ expect(json_response['stopped_count']).to eq 1
+ end
+
+ it 'ignores search option if is shorter than a minimum' do
+ get :index, params: environment_params(format: :json, search: 'st')
+
+ expect(environments.map { |env| env['name'] } ).to contain_exactly('production',
+ 'staging/review-1',
+ 'staging/review-2')
+ expect(json_response['available_count']).to eq 3
+ expect(json_response['stopped_count']).to eq 1
+ end
+
it 'sets the polling interval header' do
subject
@@ -149,29 +172,43 @@ RSpec.describe Projects::EnvironmentsController do
end
describe 'GET folder' do
- before do
- create(:environment, project: project,
- name: 'staging-1.0/review',
- state: :available)
- create(:environment, project: project,
- name: 'staging-1.0/zzz',
- state: :available)
- end
-
context 'when using default format' do
it 'responds with HTML' do
get :folder, params: {
- namespace_id: project.namespace,
- project_id: project,
- id: 'staging-1.0'
- }
+ namespace_id: project.namespace,
+ project_id: project,
+ id: 'staging-1.0'
+ }
- expect(response).to be_ok
+ expect(response).to have_gitlab_http_status(:ok)
expect(response).to render_template 'folder'
end
+
+ it_behaves_like 'tracking unique visits', :folder do
+ let(:request_params) do
+ {
+ namespace_id: project.namespace,
+ project_id: project,
+ id: 'staging-1.0'
+ }
+ end
+
+ let(:target_id) { 'users_visiting_environments_pages' }
+ end
end
context 'when using JSON format' do
+ before do
+ create(:environment, project: project,
+ name: 'staging-1.0/review',
+ state: :available)
+ create(:environment, project: project,
+ name: 'staging-1.0/zzz',
+ state: :available)
+ end
+
+ let(:environments) { json_response['environments'] }
+
it 'sorts the subfolders lexicographically' do
get :folder, params: {
namespace_id: project.namespace,
@@ -187,6 +224,19 @@ RSpec.describe Projects::EnvironmentsController do
expect(json_response['environments'][1])
.to include('name' => 'staging-1.0/zzz', 'name_without_type' => 'zzz')
end
+
+ it 'handles search option properly' do
+ get(:folder, params: {
+ namespace_id: project.namespace,
+ project_id: project,
+ id: 'staging-1.0',
+ search: 'staging-1.0/z'
+ }, format: :json)
+
+ expect(environments.map { |env| env['name'] } ).to eq(['staging-1.0/zzz'])
+ expect(json_response['available_count']).to eq 1
+ expect(json_response['stopped_count']).to eq 0
+ end
end
end
@@ -197,6 +247,11 @@ RSpec.describe Projects::EnvironmentsController do
expect(response).to be_ok
end
+
+ it_behaves_like 'tracking unique visits', :show do
+ let(:request_params) { environment_params }
+ let(:target_id) { 'users_visiting_environments_pages' }
+ end
end
context 'with invalid id' do
@@ -210,12 +265,30 @@ RSpec.describe Projects::EnvironmentsController do
end
end
+ describe 'GET new' do
+ it 'responds with a status code 200' do
+ get :new, params: environment_params
+
+ expect(response).to be_ok
+ end
+
+ it_behaves_like 'tracking unique visits', :new do
+ let(:request_params) { environment_params }
+ let(:target_id) { 'users_visiting_environments_pages' }
+ end
+ end
+
describe 'GET edit' do
it 'responds with a status code 200' do
get :edit, params: environment_params
expect(response).to be_ok
end
+
+ it_behaves_like 'tracking unique visits', :edit do
+ let(:request_params) { environment_params }
+ let(:target_id) { 'users_visiting_environments_pages' }
+ end
end
describe 'PATCH #update' do
@@ -230,6 +303,11 @@ RSpec.describe Projects::EnvironmentsController do
expect(response).to have_gitlab_http_status(:ok)
expect(json_response['path']).to eq("/#{project.full_path}/-/environments/#{environment.id}")
end
+
+ it_behaves_like 'tracking unique visits', :update do
+ let(:request_params) { params }
+ let(:target_id) { 'users_visiting_environments_pages' }
+ end
end
context "when environment params are invalid" do
@@ -294,6 +372,11 @@ RSpec.describe Projects::EnvironmentsController do
{ 'redirect_url' =>
project_environment_url(project, environment) })
end
+
+ it_behaves_like 'tracking unique visits', :stop do
+ let(:request_params) { environment_params(format: :json) }
+ let(:target_id) { 'users_visiting_environments_pages' }
+ end
end
context 'when no stop action' do
@@ -321,6 +404,11 @@ RSpec.describe Projects::EnvironmentsController do
it_behaves_like 'successful response for #cancel_auto_stop'
+ it_behaves_like 'tracking unique visits', :cancel_auto_stop do
+ let(:request_params) { environment_params }
+ let(:target_id) { 'users_visiting_environments_pages' }
+ end
+
context 'when user is reporter' do
let(:user) { reporter }
@@ -357,6 +445,11 @@ RSpec.describe Projects::EnvironmentsController do
get :terminal, params: environment_params
end
+
+ it_behaves_like 'tracking unique visits', :terminal do
+ let(:request_params) { environment_params }
+ let(:target_id) { 'users_visiting_environments_pages' }
+ end
end
context 'with invalid id' do
@@ -859,6 +952,11 @@ RSpec.describe Projects::EnvironmentsController do
expect(response).to have_gitlab_http_status(:ok)
expect(json_response['path']).to eq("/#{project.full_path}/-/environments/#{json_response['environment']['id']}")
end
+
+ it_behaves_like 'tracking unique visits', :create do
+ let(:request_params) { params }
+ let(:target_id) { 'users_visiting_environments_pages' }
+ end
end
context "when environment params are invalid" do
diff --git a/spec/controllers/projects/feature_flags_controller_spec.rb b/spec/controllers/projects/feature_flags_controller_spec.rb
index fd95aa44568..29ad51d590f 100644
--- a/spec/controllers/projects/feature_flags_controller_spec.rb
+++ b/spec/controllers/projects/feature_flags_controller_spec.rb
@@ -194,7 +194,7 @@ RSpec.describe Projects::FeatureFlagsController do
other_project = create(:project)
other_project.add_developer(user)
other_feature_flag = create(:operations_feature_flag, project: other_project,
- name: 'other_flag')
+ name: 'other_flag')
params = {
namespace_id: other_project.namespace,
project_id: other_project,
@@ -208,7 +208,7 @@ RSpec.describe Projects::FeatureFlagsController do
end
context 'when feature flag is not found' do
- let!(:feature_flag) { }
+ let!(:feature_flag) {}
let(:params) do
{
@@ -486,7 +486,7 @@ RSpec.describe Projects::FeatureFlagsController do
context 'when creating a version 2 feature flag with a gitlabUserList strategy' do
let!(:user_list) do
create(:operations_feature_flag_user_list, project: project,
- name: 'My List', user_xids: 'user1,user2')
+ name: 'My List', user_xids: 'user1,user2')
end
let(:params) do
diff --git a/spec/controllers/projects/grafana_api_controller_spec.rb b/spec/controllers/projects/grafana_api_controller_spec.rb
index baee9705127..2e25b0271ce 100644
--- a/spec/controllers/projects/grafana_api_controller_spec.rb
+++ b/spec/controllers/projects/grafana_api_controller_spec.rb
@@ -52,8 +52,8 @@ RSpec.describe Projects::GrafanaApiController do
.with(project, '1', 'api/v1/query_range',
{ 'query' => params[:query],
'start' => params[:start_time],
- 'end' => params[:end_time],
- 'step' => params[:step] })
+ 'end' => params[:end_time],
+ 'step' => params[:step] })
expect(response).to have_gitlab_http_status(:ok)
expect(json_response).to eq({})
diff --git a/spec/controllers/projects/graphs_controller_spec.rb b/spec/controllers/projects/graphs_controller_spec.rb
index be89fa0d361..9227c7dd70a 100644
--- a/spec/controllers/projects/graphs_controller_spec.rb
+++ b/spec/controllers/projects/graphs_controller_spec.rb
@@ -89,6 +89,21 @@ RSpec.describe Projects::GraphsController do
let(:request_params) { { namespace_id: project.namespace.path, project_id: project.path, id: 'master' } }
let(:target_id) { 'p_analytics_repo' }
end
+
+ it_behaves_like 'Snowplow event tracking' do
+ subject do
+ sign_in(user)
+ get :charts, params: request_params, format: :html
+ end
+
+ let(:request_params) { { namespace_id: project.namespace.path, project_id: project.path, id: 'master' } }
+ let(:feature_flag_name) { :route_hll_to_snowplow_phase2 }
+ let(:category) { described_class.name }
+ let(:action) { 'perform_analytics_usage_action' }
+ let(:namespace) { project.namespace }
+ let(:label) { 'redis_hll_counters.analytics.analytics_total_unique_counts_monthly' }
+ let(:property) { 'p_analytics_repo' }
+ end
end
context 'when languages were previously detected' do
diff --git a/spec/controllers/projects/jobs_controller_spec.rb b/spec/controllers/projects/jobs_controller_spec.rb
index e4e3151dd12..556dd23c135 100644
--- a/spec/controllers/projects/jobs_controller_spec.rb
+++ b/spec/controllers/projects/jobs_controller_spec.rb
@@ -5,9 +5,25 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
include ApiHelpers
include HttpIOHelpers
- let(:project) { create(:project, :public, :repository) }
+ let_it_be(:project) { create(:project, :public, :repository) }
+ let_it_be(:owner) { create(:owner) }
+ let_it_be(:admin) { create(:admin) }
+ let_it_be(:maintainer) { create(:user) }
+ let_it_be(:developer) { create(:user) }
+ let_it_be(:reporter) { create(:user) }
+ let_it_be(:guest) { create(:user) }
+
+ before_all do
+ project.add_owner(owner)
+ project.add_maintainer(maintainer)
+ project.add_developer(developer)
+ project.add_reporter(reporter)
+ project.add_guest(guest)
+ end
+
+ let(:user) { developer }
+
let(:pipeline) { create(:ci_pipeline, project: project) }
- let(:user) { create(:user) }
before do
stub_feature_flags(ci_enable_live_trace: true)
@@ -136,9 +152,9 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
context 'when requesting JSON' do
let(:merge_request) { create(:merge_request, source_project: project) }
+ let(:user) { developer }
before do
- project.add_developer(user)
sign_in(user)
allow_any_instance_of(Ci::Build)
@@ -307,9 +323,10 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
let(:environment) { create(:environment, project: project, name: 'staging', state: :available) }
let(:job) { create(:ci_build, :running, environment: environment.name, pipeline: pipeline) }
+ let(:user) { maintainer }
+
before do
create(:deployment, :success, :on_cluster, environment: environment, project: project)
- project.add_maintainer(user) # Need to be a maintianer to view cluster.path
end
it 'exposes the deployment information' do
@@ -330,9 +347,9 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
context 'that belongs to the project' do
let(:runner) { create(:ci_runner, :project, projects: [project]) }
let(:job) { create(:ci_build, :success, pipeline: pipeline, runner: runner) }
+ let(:user) { maintainer }
before do
- project.add_maintainer(user)
sign_in(user)
end
@@ -349,10 +366,9 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
let(:group) { create(:group) }
let(:runner) { create(:ci_runner, :group, groups: [group]) }
let(:job) { create(:ci_build, :success, pipeline: pipeline, runner: runner) }
- let(:user) { create(:user, :admin) }
+ let(:user) { maintainer }
before do
- project.add_maintainer(user)
sign_in(user)
end
@@ -368,10 +384,9 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
context 'that belongs to instance' do
let(:runner) { create(:ci_runner, :instance) }
let(:job) { create(:ci_build, :success, pipeline: pipeline, runner: runner) }
- let(:user) { create(:user, :admin) }
+ let(:user) { maintainer }
before do
- project.add_maintainer(user)
sign_in(user)
end
@@ -421,6 +436,8 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
end
context 'when user is developer' do
+ let(:user) { developer }
+
it 'settings_path is not available' do
expect(response).to have_gitlab_http_status(:ok)
expect(response).to match_response_schema('job/job_details')
@@ -429,10 +446,9 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
end
context 'when user is maintainer' do
- let(:user) { create(:user, :admin) }
+ let(:user) { admin }
before do
- project.add_maintainer(user)
sign_in(user)
end
@@ -499,9 +515,9 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
let(:trigger) { create(:ci_trigger, project: project) }
let(:trigger_request) { create(:ci_trigger_request, pipeline: pipeline, trigger: trigger) }
let(:job) { create(:ci_build, pipeline: pipeline, trigger_request: trigger_request) }
+ let(:user) { developer }
before do
- project.add_developer(user)
sign_in(user)
allow_any_instance_of(Ci::Build)
@@ -526,9 +542,9 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
end
context 'user is a maintainer' do
- before do
- project.add_maintainer(user)
+ let(:user) { maintainer }
+ before do
get_show_json
end
@@ -579,7 +595,7 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
def get_show_json
expect { get_show(id: job.id, format: :json) }
- .to change { Gitlab::GitalyClient.get_request_count }.by_at_most(2)
+ .to change { Gitlab::GitalyClient.get_request_count }.by_at_most(3)
end
def get_show(**extra_params)
@@ -617,8 +633,9 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
let!(:variable) { create(:ci_instance_variable, key: 'CI_DEBUG_TRACE', value: 'true') }
context 'with proper permissions on a project' do
+ let(:user) { developer }
+
before do
- project.add_developer(user)
sign_in(user)
end
@@ -630,8 +647,9 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
end
context 'without proper permissions for debug logging' do
+ let(:user) { guest }
+
before do
- project.add_guest(user)
sign_in(user)
end
@@ -700,7 +718,7 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
expect(response).to match_response_schema('job/build_trace')
expect(json_response['id']).to eq job.id
expect(json_response['status']).to eq job.status
- expect(json_response['lines'].flat_map {|l| l['content'].map { |c| c['text'] } }).to include("ヾ(´༎ຶД༎ຶ`)ノ")
+ expect(json_response['lines'].flat_map { |l| l['content'].map { |c| c['text'] } }).to include("ヾ(´༎ຶД༎ຶ`)ノ")
end
end
@@ -753,8 +771,9 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
end
describe 'POST retry' do
+ let(:user) { developer }
+
before do
- project.add_developer(user)
sign_in(user)
end
@@ -817,12 +836,13 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
describe 'POST play' do
let(:variable_attributes) { [] }
+ let(:user) { developer }
before do
project.add_developer(user)
create(:protected_branch, :developers_can_merge,
- name: 'master', project: project)
+ name: 'protected-branch', project: project)
sign_in(user)
end
@@ -899,8 +919,9 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
describe 'POST cancel' do
context 'when user is authorized to cancel the build' do
+ let(:user) { developer }
+
before do
- project.add_developer(user)
sign_in(user)
end
@@ -965,8 +986,9 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
context 'when user is not authorized to cancel the build' do
let!(:job) { create(:ci_build, :cancelable, pipeline: pipeline) }
+ let(:user) { guest }
+
before do
- project.add_reporter(user)
sign_in(user)
post_cancel
@@ -990,12 +1012,13 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
describe 'POST unschedule' do
before do
- create(:protected_branch, :developers_can_merge, name: 'master', project: project)
+ create(:protected_branch, :developers_can_merge, name: 'protected-branch', project: project)
end
context 'when user is authorized to unschedule the build' do
+ let(:user) { developer }
+
before do
- project.add_developer(user)
sign_in(user)
post_unschedule
@@ -1025,9 +1048,9 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
context 'when user is not authorized to unschedule the build' do
let(:job) { create(:ci_build, :scheduled, pipeline: pipeline) }
+ let(:user) { guest }
before do
- project.add_reporter(user)
sign_in(user)
post_unschedule
@@ -1048,10 +1071,9 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
end
describe 'POST erase' do
- let(:role) { :maintainer }
+ let(:user) { maintainer }
before do
- project.add_role(user, role)
sign_in(user)
end
@@ -1097,7 +1119,7 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
end
context 'when user is developer' do
- let(:role) { :developer }
+ let(:user) { developer }
let(:job) { create(:ci_build, :erasable, :trace_artifact, pipeline: pipeline, user: triggered_by) }
context 'when triggered by same user' do
@@ -1109,7 +1131,7 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
end
context 'when triggered by different user' do
- let(:triggered_by) { create(:user) }
+ let(:triggered_by) { maintainer }
it 'does not have successful status' do
expect(response).not_to have_gitlab_http_status(:found)
@@ -1168,8 +1190,9 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
end
context 'with proper permissions for debug logging on a project' do
+ let(:user) { developer }
+
before do
- project.add_developer(user)
sign_in(user)
end
@@ -1181,8 +1204,9 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
end
context 'without proper permissions for debug logging on a project' do
+ let(:user) { reporter }
+
before do
- project.add_reporter(user)
sign_in(user)
end
@@ -1218,37 +1242,6 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state 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 'sends a trace file' do
- response = subject
-
- expect(response).to have_gitlab_http_status(:ok)
- expect(response.headers['Content-Type']).to eq('text/plain; charset=utf-8')
- expect(response.headers['Content-Disposition']).to match(/^inline/)
- expect(response.body).to eq('Sample trace')
- end
-
- context 'when trace format is not text/plain' do
- before do
- job.update_column(:trace, '<html></html>')
- end
-
- it 'sets content disposition to attachment' do
- response = subject
-
- expect(response).to have_gitlab_http_status(:ok)
- expect(response.headers['Content-Type']).to eq('text/plain; charset=utf-8')
- expect(response.headers['Content-Disposition']).to match(/^attachment/)
- end
- end
- end
-
context 'when job does not have a trace file' do
let(:job) { create(:ci_build, pipeline: pipeline) }
@@ -1274,8 +1267,9 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
end
describe 'GET #terminal' do
+ let(:user) { developer }
+
before do
- project.add_developer(user)
sign_in(user)
end
@@ -1323,8 +1317,9 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
describe 'GET #terminal_websocket_authorize' do
let!(:job) { create(:ci_build, :running, :with_runner_session, pipeline: pipeline, user: user) }
+ let(:user) { developer }
+
before do
- project.add_developer(user)
sign_in(user)
end
@@ -1375,14 +1370,6 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
end
describe 'GET #proxy_websocket_authorize' do
- let_it_be(:owner) { create(:owner) }
- let_it_be(:admin) { create(:admin) }
- let_it_be(:maintainer) { create(:user) }
- let_it_be(:developer) { create(:user) }
- let_it_be(:reporter) { create(:user) }
- let_it_be(:guest) { create(:user) }
- let_it_be(:project) { create(:project, :private, :repository, namespace: owner.namespace) }
-
let(:user) { maintainer }
let(:pipeline) { create(:ci_pipeline, project: project, source: :webide, config_source: :webide_source, user: user) }
let(:job) { create(:ci_build, :running, :with_runner_session, pipeline: pipeline, user: user) }
@@ -1407,11 +1394,6 @@ RSpec.describe Projects::JobsController, :clean_gitlab_redis_shared_state do
stub_feature_flags(build_service_proxy: true)
allow(job).to receive(:has_terminal?).and_return(true)
- project.add_maintainer(maintainer)
- project.add_developer(developer)
- project.add_reporter(reporter)
- project.add_guest(guest)
-
sign_in(user)
end
diff --git a/spec/controllers/projects/labels_controller_spec.rb b/spec/controllers/projects/labels_controller_spec.rb
index 776ed9774b1..a5259522fe2 100644
--- a/spec/controllers/projects/labels_controller_spec.rb
+++ b/spec/controllers/projects/labels_controller_spec.rb
@@ -25,10 +25,10 @@ RSpec.describe Projects::LabelsController do
let_it_be(:group_label_3) { create(:group_label, group: group, title: 'Group Label 3') }
let_it_be(:group_label_4) { create(:group_label, group: group, title: 'Group Label 4') }
- let_it_be(:group_labels) { [group_label_3, group_label_4]}
- let_it_be(:project_labels) { [label_4, label_5]}
- let_it_be(:group_priority_labels) { [group_label_1, group_label_2]}
- let_it_be(:project_priority_labels) { [label_1, label_2, label_3]}
+ let_it_be(:group_labels) { [group_label_3, group_label_4] }
+ let_it_be(:project_labels) { [label_4, label_5] }
+ let_it_be(:group_priority_labels) { [group_label_1, group_label_2] }
+ let_it_be(:project_priority_labels) { [label_1, label_2, label_3] }
before do
create(:label_priority, project: project, label: group_label_1, priority: 3)
diff --git a/spec/controllers/projects/merge_requests/drafts_controller_spec.rb b/spec/controllers/projects/merge_requests/drafts_controller_spec.rb
index b9ede84157d..182d654aaa8 100644
--- a/spec/controllers/projects/merge_requests/drafts_controller_spec.rb
+++ b/spec/controllers/projects/merge_requests/drafts_controller_spec.rb
@@ -5,7 +5,7 @@ RSpec.describe Projects::MergeRequests::DraftsController do
include RepoHelpers
let(:project) { create(:project, :repository) }
- let(:merge_request) { create(:merge_request_with_diffs, target_project: project, source_project: project) }
+ let(:merge_request) { create(:merge_request_with_diffs, target_project: project, source_project: project, author: create(:user)) }
let(:user) { project.first_owner }
let(:user2) { create(:user) }
@@ -404,6 +404,11 @@ RSpec.describe Projects::MergeRequests::DraftsController do
end
context 'when feature flag is enabled' do
+ before do
+ allow(Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter)
+ .to receive(:track_submit_review_comment)
+ end
+
it 'creates note' do
post :publish, params: params.merge!(note: 'Hello world')
@@ -415,6 +420,72 @@ RSpec.describe Projects::MergeRequests::DraftsController do
expect(merge_request.notes.reload.size).to be(1)
end
+
+ it 'tracks merge request activity' do
+ post :publish, params: params.merge!(note: 'Hello world')
+
+ expect(Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter)
+ .to have_received(:track_submit_review_comment).with(user: user)
+ end
+ end
+ end
+
+ context 'approve merge request' do
+ before do
+ create(:draft_note, merge_request: merge_request, author: user)
+ end
+
+ context 'when feature flag is disabled' do
+ before do
+ stub_feature_flags(mr_review_submit_comment: false)
+ end
+
+ it 'does not approve' do
+ post :publish, params: params.merge!(approve: true)
+
+ expect(merge_request.approvals.reload.size).to be(0)
+ end
+ end
+
+ context 'when feature flag is enabled' do
+ before do
+ allow(Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter)
+ .to receive(:track_submit_review_approve)
+ end
+
+ it 'approves merge request' do
+ post :publish, params: params.merge!(approve: true)
+
+ expect(merge_request.approvals.reload.size).to be(1)
+ end
+
+ it 'does not approve merge request' do
+ post :publish, params: params.merge!(approve: false)
+
+ expect(merge_request.approvals.reload.size).to be(0)
+ end
+
+ it 'tracks merge request activity' do
+ post :publish, params: params.merge!(approve: true)
+
+ expect(Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter)
+ .to have_received(:track_submit_review_approve).with(user: user)
+ end
+
+ context 'when merge request is already approved by user' do
+ before do
+ create(:approval, merge_request: merge_request, user: user)
+ end
+
+ it 'does return 200' do
+ post :publish, params: params.merge!(approve: true)
+
+ expect(response).to have_gitlab_http_status(:ok)
+
+ expect(Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter)
+ .to have_received(:track_submit_review_approve).with(user: user)
+ end
+ end
end
end
end
diff --git a/spec/controllers/projects/merge_requests_controller_spec.rb b/spec/controllers/projects/merge_requests_controller_spec.rb
index ed5e32df8ea..9c4baeae836 100644
--- a/spec/controllers/projects/merge_requests_controller_spec.rb
+++ b/spec/controllers/projects/merge_requests_controller_spec.rb
@@ -896,12 +896,13 @@ RSpec.describe Projects::MergeRequestsController do
end
subject do
- get :exposed_artifacts, params: {
- namespace_id: project.namespace.to_param,
- project_id: project,
- id: merge_request.iid
- },
- format: :json
+ get :exposed_artifacts,
+ params: {
+ namespace_id: project.namespace.to_param,
+ project_id: project,
+ id: merge_request.iid
+ },
+ format: :json
end
describe 'permissions on a public project with private CI/CD' do
@@ -1031,12 +1032,13 @@ RSpec.describe Projects::MergeRequestsController do
end
subject do
- get :coverage_reports, params: {
- namespace_id: project.namespace.to_param,
- project_id: project,
- id: merge_request.iid
- },
- format: :json
+ get :coverage_reports,
+ params: {
+ namespace_id: project.namespace.to_param,
+ project_id: project,
+ id: merge_request.iid
+ },
+ format: :json
end
describe 'permissions on a public project with private CI/CD' do
@@ -1161,12 +1163,13 @@ RSpec.describe Projects::MergeRequestsController do
end
subject(:get_codequality_mr_diff_reports) do
- get :codequality_mr_diff_reports, params: {
- namespace_id: project.namespace.to_param,
- project_id: project,
- id: merge_request.iid
- },
- format: :json
+ get :codequality_mr_diff_reports,
+ params: {
+ namespace_id: project.namespace.to_param,
+ project_id: project,
+ id: merge_request.iid
+ },
+ format: :json
end
context 'permissions on a public project with private CI/CD' do
@@ -1264,12 +1267,13 @@ RSpec.describe Projects::MergeRequestsController do
end
subject do
- get :terraform_reports, params: {
- namespace_id: project.namespace.to_param,
- project_id: project,
- id: merge_request.iid
- },
- format: :json
+ get :terraform_reports,
+ params: {
+ namespace_id: project.namespace.to_param,
+ project_id: project,
+ id: merge_request.iid
+ },
+ format: :json
end
describe 'permissions on a public project with private CI/CD' do
@@ -1394,12 +1398,13 @@ RSpec.describe Projects::MergeRequestsController do
end
subject do
- get :test_reports, params: {
- namespace_id: project.namespace.to_param,
- project_id: project,
- id: merge_request.iid
- },
- format: :json
+ get :test_reports,
+ params: {
+ namespace_id: project.namespace.to_param,
+ project_id: project,
+ id: merge_request.iid
+ },
+ format: :json
end
before do
@@ -1522,12 +1527,13 @@ RSpec.describe Projects::MergeRequestsController do
end
subject do
- get :accessibility_reports, params: {
- namespace_id: project.namespace.to_param,
- project_id: project,
- id: merge_request.iid
- },
- format: :json
+ get :accessibility_reports,
+ params: {
+ namespace_id: project.namespace.to_param,
+ project_id: project,
+ id: merge_request.iid
+ },
+ format: :json
end
context 'permissions on a public project with private CI/CD' do
@@ -1642,12 +1648,13 @@ RSpec.describe Projects::MergeRequestsController do
end
subject do
- get :codequality_reports, params: {
- namespace_id: project.namespace.to_param,
- project_id: project,
- id: merge_request.iid
- },
- format: :json
+ get :codequality_reports,
+ params: {
+ namespace_id: project.namespace.to_param,
+ project_id: project,
+ id: merge_request.iid
+ },
+ format: :json
end
context 'permissions on a public project with private CI/CD' do
diff --git a/spec/controllers/projects/notes_controller_spec.rb b/spec/controllers/projects/notes_controller_spec.rb
index 9050765afd6..1f8e96258ca 100644
--- a/spec/controllers/projects/notes_controller_spec.rb
+++ b/spec/controllers/projects/notes_controller_spec.rb
@@ -659,7 +659,7 @@ RSpec.describe Projects::NotesController do
context 'when target_id and noteable_id do not match' do
let(:locked_issue) { create(:issue, :locked, project: project) }
- let(:issue) {create(:issue, project: project)}
+ let(:issue) { create(:issue, project: project) }
it 'uses target_id and ignores noteable_id' do
request_params = {
diff --git a/spec/controllers/projects/pipeline_schedules_controller_spec.rb b/spec/controllers/projects/pipeline_schedules_controller_spec.rb
index 77acd5fe13c..5bcfae4227c 100644
--- a/spec/controllers/projects/pipeline_schedules_controller_spec.rb
+++ b/spec/controllers/projects/pipeline_schedules_controller_spec.rb
@@ -354,7 +354,8 @@ RSpec.describe Projects::PipelineSchedulesController do
end
def go
- put :update, params: {
+ put :update,
+ params: {
namespace_id: project.namespace.to_param,
project_id: project,
id: pipeline_schedule,
diff --git a/spec/controllers/projects/pipelines/tests_controller_spec.rb b/spec/controllers/projects/pipelines/tests_controller_spec.rb
index ddcab8b048e..07e3c28f685 100644
--- a/spec/controllers/projects/pipelines/tests_controller_spec.rb
+++ b/spec/controllers/projects/pipelines/tests_controller_spec.rb
@@ -86,11 +86,12 @@ RSpec.describe Projects::Pipelines::TestsController do
# Each test failure in this pipeline has a matching failure in the default branch
recent_failures = json_response['test_cases'].map { |tc| tc['recent_failures'] }
- expect(recent_failures).to eq([
- { 'count' => 1, 'base_branch' => 'master' },
- { 'count' => 1, 'base_branch' => 'master' },
- { 'count' => 1, 'base_branch' => 'master' }
- ])
+ expect(recent_failures).to eq(
+ [
+ { 'count' => 1, 'base_branch' => 'master' },
+ { 'count' => 1, 'base_branch' => 'master' },
+ { 'count' => 1, 'base_branch' => 'master' }
+ ])
end
end
end
diff --git a/spec/controllers/projects/pipelines_controller_spec.rb b/spec/controllers/projects/pipelines_controller_spec.rb
index 06930d8727b..b9acaf65892 100644
--- a/spec/controllers/projects/pipelines_controller_spec.rb
+++ b/spec/controllers/projects/pipelines_controller_spec.rb
@@ -270,9 +270,13 @@ RSpec.describe Projects::PipelinesController do
user: user,
merge_request: merge_request)
- create_build(pipeline, 'build', 1, 'build', user)
- create_build(pipeline, 'test', 2, 'test', user)
- create_build(pipeline, 'deploy', 3, 'deploy', user)
+ build_stage = create(:ci_stage, name: 'build', pipeline: pipeline)
+ test_stage = create(:ci_stage, name: 'test', pipeline: pipeline)
+ deploy_stage = create(:ci_stage, name: 'deploy', pipeline: pipeline)
+
+ create_build(pipeline, build_stage, 1, 'build', user)
+ create_build(pipeline, test_stage, 2, 'test', user)
+ create_build(pipeline, deploy_stage, 3, 'deploy', user)
pipeline
end
@@ -284,7 +288,7 @@ RSpec.describe Projects::PipelinesController do
:artifacts,
artifacts_expire_at: 2.days.from_now,
pipeline: pipeline,
- stage: stage,
+ ci_stage: stage,
stage_idx: stage_idx,
name: name,
status: status,
@@ -327,21 +331,24 @@ RSpec.describe Projects::PipelinesController do
render_views
let_it_be(:pipeline) { create(:ci_pipeline, project: project) }
+ let_it_be(:build_stage) { create(:ci_stage, name: 'build', pipeline: pipeline) }
+ let_it_be(:test_stage) { create(:ci_stage, name: 'test', pipeline: pipeline) }
+ let_it_be(:deploy_stage) { create(:ci_stage, name: 'deploy', pipeline: pipeline) }
def create_build_with_artifacts(stage, stage_idx, name, status)
- create(:ci_build, :artifacts, :tags, status, user: user, pipeline: pipeline, stage: stage, stage_idx: stage_idx, name: name)
+ create(:ci_build, :artifacts, :tags, status, user: user, pipeline: pipeline, ci_stage: stage, stage_idx: stage_idx, name: name)
end
def create_bridge(stage, stage_idx, name, status)
- create(:ci_bridge, status, pipeline: pipeline, stage: stage, stage_idx: stage_idx, name: name)
+ create(:ci_bridge, status, pipeline: pipeline, ci_stage: stage, stage_idx: stage_idx, name: name)
end
before do
- create_build_with_artifacts('build', 0, 'job1', :failed)
- create_build_with_artifacts('build', 0, 'job2', :running)
- create_build_with_artifacts('build', 0, 'job3', :pending)
- create_bridge('deploy', 1, 'deploy-a', :failed)
- create_bridge('deploy', 1, 'deploy-b', :created)
+ create_build_with_artifacts(build_stage, 0, 'job1', :failed)
+ create_build_with_artifacts(build_stage, 0, 'job2', :running)
+ create_build_with_artifacts(build_stage, 0, 'job3', :pending)
+ create_bridge(deploy_stage, 1, 'deploy-a', :failed)
+ create_bridge(deploy_stage, 1, 'deploy-b', :created)
end
it 'avoids N+1 database queries', :request_store, :use_sql_query_cache do
@@ -354,11 +361,11 @@ RSpec.describe Projects::PipelinesController do
expect(response).to have_gitlab_http_status(:ok)
end
- create_build_with_artifacts('build', 0, 'job4', :failed)
- create_build_with_artifacts('build', 0, 'job5', :running)
- create_build_with_artifacts('build', 0, 'job6', :pending)
- create_bridge('deploy', 1, 'deploy-c', :failed)
- create_bridge('deploy', 1, 'deploy-d', :created)
+ create_build_with_artifacts(build_stage, 0, 'job4', :failed)
+ create_build_with_artifacts(build_stage, 0, 'job5', :running)
+ create_build_with_artifacts(build_stage, 0, 'job6', :pending)
+ create_bridge(deploy_stage, 1, 'deploy-c', :failed)
+ create_bridge(deploy_stage, 1, 'deploy-d', :created)
expect do
get_pipeline_html
@@ -402,11 +409,16 @@ RSpec.describe Projects::PipelinesController do
sha: project.commit.id)
end
+ let(:build_stage) { create(:ci_stage, name: 'build', pipeline: pipeline) }
+ let(:test_stage) { create(:ci_stage, name: 'test', pipeline: pipeline) }
+ let(:deploy_stage) { create(:ci_stage, name: 'deploy', pipeline: pipeline) }
+ let(:post_deploy_stage) { create(:ci_stage, name: 'post deploy', pipeline: pipeline) }
+
before do
- create_build('build', 0, 'build')
- create_build('test', 1, 'rspec 0')
- create_build('deploy', 2, 'production')
- create_build('post deploy', 3, 'pages 0')
+ create_build(build_stage, 0, 'build')
+ create_build(test_stage, 1, 'rspec 0')
+ create_build(deploy_stage, 2, 'production')
+ create_build(post_deploy_stage, 3, 'pages 0')
end
it 'does not perform N + 1 queries' do
@@ -612,7 +624,9 @@ RSpec.describe Projects::PipelinesController do
def create_pipeline(project)
create(:ci_empty_pipeline, project: project).tap do |pipeline|
- create(:ci_build, pipeline: pipeline, stage: 'test', name: 'rspec')
+ create(:ci_build, pipeline: pipeline,
+ ci_stage: create(:ci_stage, name: 'test', pipeline: pipeline),
+ name: 'rspec')
end
end
@@ -642,7 +656,7 @@ RSpec.describe Projects::PipelinesController do
end
def create_build(stage, stage_idx, name)
- create(:ci_build, pipeline: pipeline, stage: stage, stage_idx: stage_idx, name: name)
+ create(:ci_build, pipeline: pipeline, ci_stage: stage, stage_idx: stage_idx, name: name)
end
end
@@ -654,10 +668,12 @@ RSpec.describe Projects::PipelinesController do
describe 'GET dag.json' do
let(:pipeline) { create(:ci_pipeline, project: project) }
+ let(:build_stage) { create(:ci_stage, name: 'build', pipeline: pipeline) }
+ let(:test_stage) { create(:ci_stage, name: 'test', pipeline: pipeline) }
before do
- create_build('build', 1, 'build')
- create_build('test', 2, 'test', scheduling_type: 'dag').tap do |job|
+ create_build(build_stage, 1, 'build')
+ create_build(test_stage, 2, 'test', scheduling_type: 'dag').tap do |job|
create(:ci_build_need, build: job, name: 'build')
end
end
@@ -681,7 +697,7 @@ RSpec.describe Projects::PipelinesController do
end
def create_build(stage, stage_idx, name, params = {})
- create(:ci_build, pipeline: pipeline, stage: stage, stage_idx: stage_idx, name: name, **params)
+ create(:ci_build, pipeline: pipeline, ci_stage: stage, stage_idx: stage_idx, name: name, **params)
end
end
@@ -730,11 +746,12 @@ RSpec.describe Projects::PipelinesController do
describe 'GET stages.json' do
let(:pipeline) { create(:ci_pipeline, project: project) }
+ let(:build_stage) { create(:ci_stage, name: 'build', pipeline: pipeline) }
context 'when accessing existing stage' do
before do
- create(:ci_build, :retried, :failed, pipeline: pipeline, stage: 'build')
- create(:ci_build, pipeline: pipeline, stage: 'build')
+ create(:ci_build, :retried, :failed, pipeline: pipeline, ci_stage: build_stage)
+ create(:ci_build, pipeline: pipeline, ci_stage: build_stage)
end
context 'without retried' do
@@ -841,6 +858,18 @@ RSpec.describe Projects::PipelinesController do
let(:request_params) { { namespace_id: project.namespace, project_id: project, id: pipeline.id, chart: tab[:chart_param] } }
let(:target_id) { ['p_analytics_pipelines', tab[:event]] }
end
+
+ it_behaves_like 'Snowplow event tracking' do
+ subject { get :charts, params: request_params, format: :html }
+
+ let(:request_params) { { namespace_id: project.namespace, project_id: project, id: pipeline.id, chart: tab[:chart_param] } }
+ let(:feature_flag_name) { :route_hll_to_snowplow_phase2 }
+ let(:category) { described_class.name }
+ let(:action) { 'perform_analytics_usage_action' }
+ let(:namespace) { project.namespace }
+ let(:label) { 'redis_hll_counters.analytics.analytics_total_unique_counts_monthly' }
+ let(:property) { 'p_analytics_pipelines' }
+ end
end
end
@@ -965,8 +994,8 @@ RSpec.describe Projects::PipelinesController do
expect(response).to have_gitlab_http_status(:bad_request)
expect(json_response['errors']).to eq([
- 'test job: chosen stage does not exist; available stages are .pre, build, test, deploy, .post'
- ])
+ 'test job: chosen stage does not exist; available stages are .pre, build, test, deploy, .post'
+ ])
expect(json_response['warnings'][0]).to include(
'jobs:build may allow multiple pipelines to run for a single action due to `rules:when`'
)
diff --git a/spec/controllers/projects/project_members_controller_spec.rb b/spec/controllers/projects/project_members_controller_spec.rb
index 46eb340cbba..fb27fe58cd9 100644
--- a/spec/controllers/projects/project_members_controller_spec.rb
+++ b/spec/controllers/projects/project_members_controller_spec.rb
@@ -5,6 +5,7 @@ require('spec_helper')
RSpec.describe Projects::ProjectMembersController do
let_it_be(:user) { create(:user) }
let_it_be(:group) { create(:group, :public) }
+ let_it_be(:sub_group) { create(:group, parent: group) }
let_it_be(:project, reload: true) { create(:project, :public) }
before do
@@ -52,7 +53,36 @@ RSpec.describe Projects::ProjectMembersController do
end
end
- context 'when invited members are present' do
+ context 'when project belongs to a sub-group' do
+ let_it_be(:user_in_group) { create(:user) }
+ let_it_be(:project_in_group) { create(:project, :public, group: sub_group) }
+
+ before do
+ group.add_owner(user_in_group)
+ project_in_group.add_maintainer(user)
+ sign_in(user)
+ end
+
+ it 'lists inherited project members by default' do
+ get :index, params: { namespace_id: project_in_group.namespace, project_id: project_in_group }
+
+ expect(assigns(:project_members).map(&:user_id)).to contain_exactly(user.id, user_in_group.id)
+ end
+
+ it 'lists direct project members only' do
+ get :index, params: { namespace_id: project_in_group.namespace, project_id: project_in_group, with_inherited_permissions: 'exclude' }
+
+ expect(assigns(:project_members).map(&:user_id)).to contain_exactly(user.id)
+ end
+
+ it 'lists inherited project members only' do
+ get :index, params: { namespace_id: project_in_group.namespace, project_id: project_in_group, with_inherited_permissions: 'only' }
+
+ expect(assigns(:project_members).map(&:user_id)).to contain_exactly(user_in_group.id)
+ end
+ end
+
+ context 'when invited project members are present' do
let!(:invited_member) { create(:project_member, :invited, project: project) }
before do
diff --git a/spec/controllers/projects/registry/tags_controller_spec.rb b/spec/controllers/projects/registry/tags_controller_spec.rb
index c03a280d2cd..7b786f4a8af 100644
--- a/spec/controllers/projects/registry/tags_controller_spec.rb
+++ b/spec/controllers/projects/registry/tags_controller_spec.rb
@@ -167,7 +167,7 @@ RSpec.describe Projects::Registry::TagsController do
repository_id: repository,
ids: names
},
- format: :json
+ format: :json
end
end
diff --git a/spec/controllers/projects/releases_controller_spec.rb b/spec/controllers/projects/releases_controller_spec.rb
index ad6682601f3..b307bb357fa 100644
--- a/spec/controllers/projects/releases_controller_spec.rb
+++ b/spec/controllers/projects/releases_controller_spec.rb
@@ -312,7 +312,7 @@ RSpec.describe Projects::ReleasesController do
end
context 'suffix path abuse' do
- let(:suffix_path) { 'downloads/zips/../../../../../../../robots.txt'}
+ let(:suffix_path) { 'downloads/zips/../../../../../../../robots.txt' }
it 'raises attack error' do
expect do
diff --git a/spec/controllers/projects/service_desk_controller_spec.rb b/spec/controllers/projects/service_desk_controller_spec.rb
index 1c4d6665414..e078bf9461e 100644
--- a/spec/controllers/projects/service_desk_controller_spec.rb
+++ b/spec/controllers/projects/service_desk_controller_spec.rb
@@ -4,8 +4,9 @@ require 'spec_helper'
RSpec.describe Projects::ServiceDeskController do
let_it_be(:project) do
- create(:project, :private, :custom_repo, service_desk_enabled: true,
- files: { '.gitlab/issue_templates/service_desk.md' => 'template' })
+ create(:project, :private, :custom_repo,
+ service_desk_enabled: true,
+ files: { '.gitlab/issue_templates/service_desk.md' => 'template' })
end
let_it_be(:user) { create(:user) }
diff --git a/spec/controllers/projects/settings/integrations_controller_spec.rb b/spec/controllers/projects/settings/integrations_controller_spec.rb
index 8ee9f22aa7f..b76269f6f93 100644
--- a/spec/controllers/projects/settings/integrations_controller_spec.rb
+++ b/spec/controllers/projects/settings/integrations_controller_spec.rb
@@ -50,7 +50,7 @@ RSpec.describe Projects::Settings::IntegrationsController do
end
end
- context 'when validations fail' do
+ context 'when validations fail', :clean_gitlab_redis_rate_limiting do
let(:integration_params) { { active: 'true', url: '' } }
it 'returns error messages in JSON response' do
@@ -62,7 +62,7 @@ RSpec.describe Projects::Settings::IntegrationsController do
end
end
- context 'when successful' do
+ context 'when successful', :clean_gitlab_redis_rate_limiting do
context 'with empty project' do
let_it_be(:project) { create(:project) }
@@ -200,8 +200,8 @@ RSpec.describe Projects::Settings::IntegrationsController do
2.times { post :test, params: project_params(service: integration_params) }
- expect(response.body).to eq(_('This endpoint has been requested too many times. Try again later.'))
- expect(response).to have_gitlab_http_status(:too_many_requests)
+ expect(response.body).to include(_('This endpoint has been requested too many times. Try again later.'))
+ expect(response).to have_gitlab_http_status(:ok)
end
end
end
diff --git a/spec/controllers/projects/settings/merge_requests_controller_spec.rb b/spec/controllers/projects/settings/merge_requests_controller_spec.rb
new file mode 100644
index 00000000000..106ec62bea0
--- /dev/null
+++ b/spec/controllers/projects/settings/merge_requests_controller_spec.rb
@@ -0,0 +1,52 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Projects::Settings::MergeRequestsController do
+ let(:project) { create(:project_empty_repo, :public) }
+ let(:user) { create(:user) }
+
+ before do
+ project.add_maintainer(user)
+ sign_in(user)
+ end
+
+ describe 'GET show' do
+ it 'renders show with 200 status code' do
+ get :show, params: { namespace_id: project.namespace, project_id: project }
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(response).to render_template(:show)
+ end
+ end
+
+ describe '#update', :enable_admin_mode do
+ render_views
+
+ let(:admin) { create(:admin) }
+
+ before do
+ sign_in(admin)
+ end
+
+ it 'updates Fast Forward Merge attributes' do
+ controller.instance_variable_set(:@project, project)
+
+ params = {
+ merge_method: :ff
+ }
+
+ put :update,
+ params: {
+ namespace_id: project.namespace,
+ project_id: project.id,
+ project: params
+ }
+
+ expect(response).to redirect_to project_settings_merge_requests_path(project)
+ params.each do |param, value|
+ expect(project.public_send(param)).to eq(value)
+ end
+ end
+ end
+end
diff --git a/spec/controllers/projects/tree_controller_spec.rb b/spec/controllers/projects/tree_controller_spec.rb
index 143516e4712..9bc3065b6da 100644
--- a/spec/controllers/projects/tree_controller_spec.rb
+++ b/spec/controllers/projects/tree_controller_spec.rb
@@ -163,8 +163,8 @@ RSpec.describe Projects::TreeController do
end
context 'successful creation' do
- let(:path) { 'files/new_dir'}
- let(:branch_name) { 'master-test'}
+ let(:path) { 'files/new_dir' }
+ let(:branch_name) { 'master-test' }
it 'redirects to the new directory' do
expect(subject)
@@ -175,7 +175,7 @@ RSpec.describe Projects::TreeController do
context 'unsuccessful creation' do
let(:path) { 'README.md' }
- let(:branch_name) { 'master'}
+ let(:branch_name) { 'master' }
it 'does not allow overwriting of existing files' do
expect(subject)