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
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-02-18 18:08:51 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-02-18 18:08:51 +0300
commit163a7046ac76eb4109184e82ce0af911633e6626 (patch)
tree9f22bb438db435d518e8f5520b309c6319ae0bd8 /spec
parent0637ba1e6e9024f35b2cbf561d9002ec17350bb3 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/controllers/users/terms_controller_spec.rb146
-rw-r--r--spec/graphql/features/authorization_spec.rb3
-rw-r--r--spec/graphql/resolvers/concerns/resolves_pipelines_spec.rb10
-rw-r--r--spec/graphql/resolvers/group_resolver_spec.rb4
-rw-r--r--spec/graphql/resolvers/issues_resolver_spec.rb10
-rw-r--r--spec/graphql/resolvers/merge_request_pipelines_resolver_spec.rb8
-rw-r--r--spec/graphql/resolvers/merge_requests_resolver_spec.rb13
-rw-r--r--spec/graphql/resolvers/project_pipelines_resolver_spec.rb6
-rw-r--r--spec/graphql/resolvers/project_resolver_spec.rb7
-rw-r--r--spec/helpers/auto_devops_helper_spec.rb4
-rw-r--r--spec/helpers/boards_helper_spec.rb2
-rw-r--r--spec/helpers/environments_helper_spec.rb6
-rw-r--r--spec/helpers/labels_helper_spec.rb14
-rw-r--r--spec/helpers/markup_helper_spec.rb18
-rw-r--r--spec/helpers/projects/error_tracking_helper_spec.rb4
-rw-r--r--spec/lib/gitlab/ci/templates/templates_spec.rb50
-rw-r--r--spec/lib/gitlab/template/finders/global_template_finder_spec.rb84
-rw-r--r--spec/mailers/emails/pages_domains_spec.rb4
-rw-r--r--spec/mailers/emails/pipelines_spec.rb2
-rw-r--r--spec/mailers/notify_spec.rb22
-rw-r--r--spec/models/project_services/jira_service_spec.rb9
-rw-r--r--spec/policies/application_setting/term_policy_spec.rb2
-rw-r--r--spec/policies/ci/pipeline_schedule_policy_spec.rb6
-rw-r--r--spec/policies/project_policy_spec.rb12
-rw-r--r--spec/policies/resource_label_event_policy_spec.rb8
-rw-r--r--spec/requests/api/internal/base_spec.rb193
-rw-r--r--spec/services/post_receive_service_spec.rb186
-rw-r--r--spec/support/shared_examples/lib/gitlab/background_migration/mentions_migration_shared_examples.rb8
28 files changed, 496 insertions, 345 deletions
diff --git a/spec/controllers/users/terms_controller_spec.rb b/spec/controllers/users/terms_controller_spec.rb
index e0bdec3df1d..99582652c39 100644
--- a/spec/controllers/users/terms_controller_spec.rb
+++ b/spec/controllers/users/terms_controller_spec.rb
@@ -4,7 +4,8 @@ require 'spec_helper'
describe Users::TermsController do
include TermsHelper
- let(:user) { create(:user) }
+
+ let_it_be(:user) { create(:user) }
let(:term) { create(:term) }
before do
@@ -12,88 +13,145 @@ describe Users::TermsController do
end
describe 'GET #index' do
- it 'redirects when no terms exist' do
- get :index
+ context 'when a user is signed in' do
+ it 'redirects when no terms exist' do
+ get :index
+
+ expect(response).to redirect_to(root_path)
+ end
+
+ context 'when terms exist' do
+ before do
+ stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false')
+ term
+ end
+
+ it 'shows terms when they exist' do
+ get :index
+
+ expect(response).to have_gitlab_http_status(:success)
+ end
+
+ it 'shows a message when the user already accepted the terms' do
+ accept_terms(user)
+
+ get :index
- expect(response).to have_gitlab_http_status(:redirect)
+ expect(controller).to set_flash.now[:notice].to(/already accepted/)
+ end
+ end
end
- context 'when terms exist' do
+ context 'when a user is not signed in' do
before do
- stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false')
- term
+ sign_out user
end
- it 'shows terms when they exist' do
- get :index
+ context 'when terms exist' do
+ before do
+ stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false')
+ term
+ end
- expect(response).to have_gitlab_http_status(:success)
- end
+ it 'returns success response' do
+ get :index
- it 'shows a message when the user already accepted the terms' do
- accept_terms(user)
+ expect(response).to have_gitlab_http_status(:success)
+ end
+ end
- get :index
+ context 'when no terms exist' do
+ it 'redirects' do
+ get :index
- expect(controller).to set_flash.now[:notice].to(/already accepted/)
+ expect(response).to redirect_to(root_path)
+ end
end
end
end
describe 'POST #accept' do
- it 'saves that the user accepted the terms' do
- post :accept, params: { id: term.id }
+ context 'when a user is signed in' do
+ it 'saves that the user accepted the terms' do
+ post :accept, params: { id: term.id }
- agreement = user.term_agreements.find_by(term: term)
+ agreement = user.term_agreements.find_by(term: term)
- expect(agreement.accepted).to eq(true)
- end
+ expect(agreement.accepted).to eq(true)
+ end
- it 'redirects to a path when specified' do
- post :accept, params: { id: term.id, redirect: groups_path }
+ it 'redirects to a path when specified' do
+ post :accept, params: { id: term.id, redirect: groups_path }
- expect(response).to redirect_to(groups_path)
- end
+ expect(response).to redirect_to(groups_path)
+ end
- it 'redirects to the referer when no redirect specified' do
- request.env["HTTP_REFERER"] = groups_url
+ it 'redirects to the referer when no redirect specified' do
+ request.env["HTTP_REFERER"] = groups_url
- post :accept, params: { id: term.id }
+ post :accept, params: { id: term.id }
- expect(response).to redirect_to(groups_path)
- end
+ expect(response).to redirect_to(groups_path)
+ end
- context 'redirecting to another domain' do
- it 'is prevented when passing a redirect param' do
- post :accept, params: { id: term.id, redirect: '//example.com/random/path' }
+ context 'redirecting to another domain' do
+ it 'is prevented when passing a redirect param' do
+ post :accept, params: { id: term.id, redirect: '//example.com/random/path' }
- expect(response).to redirect_to(root_path)
+ expect(response).to redirect_to(root_path)
+ end
+
+ it 'is prevented when redirecting to the referer' do
+ request.env["HTTP_REFERER"] = 'http://example.com/and/a/path'
+
+ post :accept, params: { id: term.id }
+
+ expect(response).to redirect_to(root_path)
+ end
end
+ end
- it 'is prevented when redirecting to the referer' do
- request.env["HTTP_REFERER"] = 'http://example.com/and/a/path'
+ context 'when a user is not signed in' do
+ before do
+ sign_out user
+ end
+ it 'redirects to login page' do
post :accept, params: { id: term.id }
- expect(response).to redirect_to(root_path)
+ expect(response).to redirect_to(new_user_session_path)
end
end
end
describe 'POST #decline' do
- it 'stores that the user declined the terms' do
- post :decline, params: { id: term.id }
+ context 'when a user is signed in' do
+ it 'stores that the user declined the terms' do
+ post :decline, params: { id: term.id }
+
+ agreement = user.term_agreements.find_by(term: term)
- agreement = user.term_agreements.find_by(term: term)
+ expect(agreement.accepted).to eq(false)
+ end
- expect(agreement.accepted).to eq(false)
+ it 'signs out the user' do
+ post :decline, params: { id: term.id }
+
+ expect(response).to redirect_to(root_path)
+ expect(assigns(:current_user)).to be_nil
+ end
end
- it 'signs out the user' do
- post :decline, params: { id: term.id }
+ context 'when a user is not signed in' do
+ before do
+ sign_out user
+ end
- expect(response).to redirect_to(root_path)
- expect(assigns(:current_user)).to be_nil
+ it 'redirects to login page' do
+ post :decline, params: { id: term.id }
+
+ expect(response).to redirect_to(new_user_session_path)
+ end
end
end
end
diff --git a/spec/graphql/features/authorization_spec.rb b/spec/graphql/features/authorization_spec.rb
index 5ef1bced179..44f47e6c739 100644
--- a/spec/graphql/features/authorization_spec.rb
+++ b/spec/graphql/features/authorization_spec.rb
@@ -5,8 +5,7 @@ require 'spec_helper'
describe 'Gitlab::Graphql::Authorization' do
include GraphqlHelpers
- set(:user) { create(:user) }
-
+ let_it_be(:user) { create(:user) }
let(:permission_single) { :foo }
let(:permission_collection) { [:foo, :bar] }
let(:test_object) { double(name: 'My name') }
diff --git a/spec/graphql/resolvers/concerns/resolves_pipelines_spec.rb b/spec/graphql/resolvers/concerns/resolves_pipelines_spec.rb
index b59561ebdd4..03ff1e11d85 100644
--- a/spec/graphql/resolvers/concerns/resolves_pipelines_spec.rb
+++ b/spec/graphql/resolvers/concerns/resolves_pipelines_spec.rb
@@ -17,11 +17,11 @@ describe ResolvesPipelines do
let(:current_user) { create(:user) }
- set(:project) { create(:project, :private) }
- set(:pipeline) { create(:ci_pipeline, project: project) }
- set(:failed_pipeline) { create(:ci_pipeline, :failed, project: project) }
- set(:ref_pipeline) { create(:ci_pipeline, project: project, ref: 'awesome-feature') }
- set(:sha_pipeline) { create(:ci_pipeline, project: project, sha: 'deadbeef') }
+ let_it_be(:project) { create(:project, :private) }
+ let_it_be(:pipeline) { create(:ci_pipeline, project: project) }
+ let_it_be(:failed_pipeline) { create(:ci_pipeline, :failed, project: project) }
+ let_it_be(:ref_pipeline) { create(:ci_pipeline, project: project, ref: 'awesome-feature') }
+ let_it_be(:sha_pipeline) { create(:ci_pipeline, project: project, sha: 'deadbeef') }
before do
project.add_developer(current_user)
diff --git a/spec/graphql/resolvers/group_resolver_spec.rb b/spec/graphql/resolvers/group_resolver_spec.rb
index 7dec9ac1aa5..70b1102d363 100644
--- a/spec/graphql/resolvers/group_resolver_spec.rb
+++ b/spec/graphql/resolvers/group_resolver_spec.rb
@@ -5,8 +5,8 @@ require 'spec_helper'
describe Resolvers::GroupResolver do
include GraphqlHelpers
- set(:group1) { create(:group) }
- set(:group2) { create(:group) }
+ let_it_be(:group1) { create(:group) }
+ let_it_be(:group2) { create(:group) }
describe '#resolve' do
it 'batch-resolves groups by full path' do
diff --git a/spec/graphql/resolvers/issues_resolver_spec.rb b/spec/graphql/resolvers/issues_resolver_spec.rb
index 9e75a6cad60..3fbb7280465 100644
--- a/spec/graphql/resolvers/issues_resolver_spec.rb
+++ b/spec/graphql/resolvers/issues_resolver_spec.rb
@@ -8,11 +8,11 @@ describe Resolvers::IssuesResolver do
let(:current_user) { create(:user) }
context "with a project" do
- set(:project) { create(:project) }
- set(:issue1) { create(:issue, project: project, state: :opened, created_at: 3.hours.ago, updated_at: 3.hours.ago) }
- set(:issue2) { create(:issue, project: project, state: :closed, title: 'foo', created_at: 1.hour.ago, updated_at: 1.hour.ago, closed_at: 1.hour.ago) }
- set(:label1) { create(:label, project: project) }
- set(:label2) { create(:label, project: project) }
+ let_it_be(:project) { create(:project) }
+ let_it_be(:issue1) { create(:issue, project: project, state: :opened, created_at: 3.hours.ago, updated_at: 3.hours.ago) }
+ let_it_be(:issue2) { create(:issue, project: project, state: :closed, title: 'foo', created_at: 1.hour.ago, updated_at: 1.hour.ago, closed_at: 1.hour.ago) }
+ let_it_be(:label1) { create(:label, project: project) }
+ let_it_be(:label2) { create(:label, project: project) }
before do
project.add_developer(current_user)
diff --git a/spec/graphql/resolvers/merge_request_pipelines_resolver_spec.rb b/spec/graphql/resolvers/merge_request_pipelines_resolver_spec.rb
index b8bdfc36ba7..02c6409a9a6 100644
--- a/spec/graphql/resolvers/merge_request_pipelines_resolver_spec.rb
+++ b/spec/graphql/resolvers/merge_request_pipelines_resolver_spec.rb
@@ -5,8 +5,8 @@ require 'spec_helper'
describe Resolvers::MergeRequestPipelinesResolver do
include GraphqlHelpers
- set(:merge_request) { create(:merge_request) }
- set(:pipeline) do
+ let_it_be(:merge_request) { create(:merge_request) }
+ let_it_be(:pipeline) do
create(
:ci_pipeline,
project: merge_request.source_project,
@@ -14,8 +14,8 @@ describe Resolvers::MergeRequestPipelinesResolver do
sha: merge_request.diff_head_sha
)
end
- set(:other_project_pipeline) { create(:ci_pipeline, project: merge_request.source_project) }
- set(:other_pipeline) { create(:ci_pipeline) }
+ let_it_be(:other_project_pipeline) { create(:ci_pipeline, project: merge_request.source_project) }
+ let_it_be(:other_pipeline) { create(:ci_pipeline) }
let(:current_user) { create(:user) }
before do
diff --git a/spec/graphql/resolvers/merge_requests_resolver_spec.rb b/spec/graphql/resolvers/merge_requests_resolver_spec.rb
index fe167a6ae3e..0bd5043d855 100644
--- a/spec/graphql/resolvers/merge_requests_resolver_spec.rb
+++ b/spec/graphql/resolvers/merge_requests_resolver_spec.rb
@@ -5,16 +5,13 @@ require 'spec_helper'
describe Resolvers::MergeRequestsResolver do
include GraphqlHelpers
- set(:project) { create(:project, :repository) }
- set(:merge_request_1) { create(:merge_request, :simple, source_project: project, target_project: project) }
- set(:merge_request_2) { create(:merge_request, :rebased, source_project: project, target_project: project) }
-
- set(:other_project) { create(:project, :repository) }
- set(:other_merge_request) { create(:merge_request, source_project: other_project, target_project: other_project) }
-
+ let_it_be(:project) { create(:project, :repository) }
+ let_it_be(:merge_request_1) { create(:merge_request, :simple, source_project: project, target_project: project) }
+ let_it_be(:merge_request_2) { create(:merge_request, :rebased, source_project: project, target_project: project) }
+ let_it_be(:other_project) { create(:project, :repository) }
+ let_it_be(:other_merge_request) { create(:merge_request, source_project: other_project, target_project: other_project) }
let(:iid_1) { merge_request_1.iid }
let(:iid_2) { merge_request_2.iid }
-
let(:other_iid) { other_merge_request.iid }
describe '#resolve' do
diff --git a/spec/graphql/resolvers/project_pipelines_resolver_spec.rb b/spec/graphql/resolvers/project_pipelines_resolver_spec.rb
index f312a118c96..2a14796fdfa 100644
--- a/spec/graphql/resolvers/project_pipelines_resolver_spec.rb
+++ b/spec/graphql/resolvers/project_pipelines_resolver_spec.rb
@@ -5,9 +5,9 @@ require 'spec_helper'
describe Resolvers::ProjectPipelinesResolver do
include GraphqlHelpers
- set(:project) { create(:project) }
- set(:pipeline) { create(:ci_pipeline, project: project) }
- set(:other_pipeline) { create(:ci_pipeline) }
+ let_it_be(:project) { create(:project) }
+ let_it_be(:pipeline) { create(:ci_pipeline, project: project) }
+ let_it_be(:other_pipeline) { create(:ci_pipeline) }
let(:current_user) { create(:user) }
before do
diff --git a/spec/graphql/resolvers/project_resolver_spec.rb b/spec/graphql/resolvers/project_resolver_spec.rb
index 860f8b4abb8..e9e38353156 100644
--- a/spec/graphql/resolvers/project_resolver_spec.rb
+++ b/spec/graphql/resolvers/project_resolver_spec.rb
@@ -5,10 +5,9 @@ require 'spec_helper'
describe Resolvers::ProjectResolver do
include GraphqlHelpers
- set(:project1) { create(:project) }
- set(:project2) { create(:project) }
-
- set(:other_project) { create(:project) }
+ let_it_be(:project1) { create(:project) }
+ let_it_be(:project2) { create(:project) }
+ let_it_be(:other_project) { create(:project) }
describe '#resolve' do
it 'batch-resolves projects by full path' do
diff --git a/spec/helpers/auto_devops_helper_spec.rb b/spec/helpers/auto_devops_helper_spec.rb
index 5d42a80aae3..d06548f1595 100644
--- a/spec/helpers/auto_devops_helper_spec.rb
+++ b/spec/helpers/auto_devops_helper_spec.rb
@@ -3,8 +3,8 @@
require 'spec_helper'
describe AutoDevopsHelper do
- set(:project) { create(:project) }
- set(:user) { create(:user) }
+ let_it_be(:project, reload: true) { create(:project) }
+ let_it_be(:user) { create(:user) }
describe '.show_auto_devops_callout?' do
let(:allowed) { true }
diff --git a/spec/helpers/boards_helper_spec.rb b/spec/helpers/boards_helper_spec.rb
index 8a4446b7f59..e731b95586f 100644
--- a/spec/helpers/boards_helper_spec.rb
+++ b/spec/helpers/boards_helper_spec.rb
@@ -3,7 +3,7 @@
require 'spec_helper'
describe BoardsHelper do
- set(:project) { create(:project) }
+ let_it_be(:project) { create(:project) }
describe '#build_issue_link_base' do
context 'project board' do
diff --git a/spec/helpers/environments_helper_spec.rb b/spec/helpers/environments_helper_spec.rb
index b72fbc9fd3c..37713a04844 100644
--- a/spec/helpers/environments_helper_spec.rb
+++ b/spec/helpers/environments_helper_spec.rb
@@ -3,9 +3,9 @@
require 'spec_helper'
describe EnvironmentsHelper do
- set(:user) { create(:user) }
- set(:project) { create(:project, :repository) }
- set(:environment) { create(:environment, project: project) }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:project, reload: true) { create(:project, :repository) }
+ let_it_be(:environment) { create(:environment, project: project) }
describe '#metrics_data' do
before do
diff --git a/spec/helpers/labels_helper_spec.rb b/spec/helpers/labels_helper_spec.rb
index 7ad554fd618..f5771405687 100644
--- a/spec/helpers/labels_helper_spec.rb
+++ b/spec/helpers/labels_helper_spec.rb
@@ -35,7 +35,7 @@ describe LabelsHelper do
end
context 'with a group label' do
- set(:group) { create(:group) }
+ let_it_be(:group) { create(:group) }
let(:label) { create(:group_label, group: group, title: 'bug') }
context 'when asking for an issue link' do
@@ -135,7 +135,7 @@ describe LabelsHelper do
end
describe 'create_label_title' do
- set(:group) { create(:group) }
+ let_it_be(:group) { create(:group) }
context 'with a group as subject' do
it 'returns "Create group label"' do
@@ -144,7 +144,7 @@ describe LabelsHelper do
end
context 'with a project as subject' do
- set(:project) { create(:project, namespace: group) }
+ let_it_be(:project) { create(:project, namespace: group) }
it 'returns "Create project label"' do
expect(create_label_title(project)).to eq _('Create project label')
@@ -159,7 +159,7 @@ describe LabelsHelper do
end
describe 'manage_labels_title' do
- set(:group) { create(:group) }
+ let_it_be(:group) { create(:group) }
context 'with a group as subject' do
it 'returns "Manage group labels"' do
@@ -168,7 +168,7 @@ describe LabelsHelper do
end
context 'with a project as subject' do
- set(:project) { create(:project, namespace: group) }
+ let_it_be(:project) { create(:project, namespace: group) }
it 'returns "Manage project labels"' do
expect(manage_labels_title(project)).to eq _('Manage project labels')
@@ -183,7 +183,7 @@ describe LabelsHelper do
end
describe 'view_labels_title' do
- set(:group) { create(:group) }
+ let_it_be(:group) { create(:group) }
context 'with a group as subject' do
it 'returns "View group labels"' do
@@ -192,7 +192,7 @@ describe LabelsHelper do
end
context 'with a project as subject' do
- set(:project) { create(:project, namespace: group) }
+ let_it_be(:project) { create(:project, namespace: group) }
it 'returns "View project labels"' do
expect(view_labels_title(project)).to eq _('View project labels')
diff --git a/spec/helpers/markup_helper_spec.rb b/spec/helpers/markup_helper_spec.rb
index d7cc8afe9c5..3fb36e540b6 100644
--- a/spec/helpers/markup_helper_spec.rb
+++ b/spec/helpers/markup_helper_spec.rb
@@ -3,15 +3,15 @@
require 'spec_helper'
describe MarkupHelper do
- set(:project) { create(:project, :repository) }
- set(:user) do
+ let_it_be(:project) { create(:project, :repository) }
+ let_it_be(:user) do
user = create(:user, username: 'gfm')
project.add_maintainer(user)
user
end
- set(:issue) { create(:issue, project: project) }
- set(:merge_request) { create(:merge_request, source_project: project, target_project: project) }
- set(:snippet) { create(:project_snippet, project: project) }
+ let_it_be(:issue) { create(:issue, project: project) }
+ let_it_be(:merge_request) { create(:merge_request, source_project: project, target_project: project) }
+ let_it_be(:snippet) { create(:project_snippet, project: project) }
let(:commit) { project.commit }
before do
@@ -45,8 +45,8 @@ describe MarkupHelper do
describe "override default project" do
let(:actual) { issue.to_reference }
- set(:second_project) { create(:project, :public) }
- set(:second_issue) { create(:issue, project: second_project) }
+ let_it_be(:second_project) { create(:project, :public) }
+ let_it_be(:second_issue) { create(:issue, project: second_project) }
it 'links to the issue' do
expected = urls.project_issue_path(second_project, second_issue)
@@ -57,7 +57,7 @@ describe MarkupHelper do
describe 'uploads' do
let(:text) { "![ImageTest](/uploads/test.png)" }
- set(:group) { create(:group) }
+ let_it_be(:group) { create(:group) }
subject { helper.markdown(text) }
@@ -79,7 +79,7 @@ describe MarkupHelper do
end
describe "with a group in the context" do
- set(:project_in_group) { create(:project, group: group) }
+ let_it_be(:project_in_group) { create(:project, group: group) }
before do
helper.instance_variable_set(:@group, group)
diff --git a/spec/helpers/projects/error_tracking_helper_spec.rb b/spec/helpers/projects/error_tracking_helper_spec.rb
index 38a6ef6826b..008d749a002 100644
--- a/spec/helpers/projects/error_tracking_helper_spec.rb
+++ b/spec/helpers/projects/error_tracking_helper_spec.rb
@@ -5,8 +5,8 @@ require 'spec_helper'
describe Projects::ErrorTrackingHelper do
include Gitlab::Routing.url_helpers
- set(:project) { create(:project) }
- set(:current_user) { create(:user) }
+ let_it_be(:project, reload: true) { create(:project) }
+ let_it_be(:current_user) { create(:user) }
describe '#error_tracking_data' do
let(:can_enable_error_tracking) { true }
diff --git a/spec/lib/gitlab/ci/templates/templates_spec.rb b/spec/lib/gitlab/ci/templates/templates_spec.rb
index b52064b3036..bc3d5b89220 100644
--- a/spec/lib/gitlab/ci/templates/templates_spec.rb
+++ b/spec/lib/gitlab/ci/templates/templates_spec.rb
@@ -2,33 +2,43 @@
require 'spec_helper'
-describe "CI YML Templates" do
- using RSpec::Parameterized::TableSyntax
-
+describe 'CI YML Templates' do
subject { Gitlab::Ci::YamlProcessor.new(content) }
- where(:template_name) do
- Gitlab::Template::GitlabCiYmlTemplate.all.map(&:full_name)
- end
-
- with_them do
- let(:content) do
- <<~EOS
- include:
- - template: #{template_name}
+ let(:all_templates) { Gitlab::Template::GitlabCiYmlTemplate.all.map(&:full_name) }
- concrete_build_implemented_by_a_user:
- stage: test
- script: do something
- EOS
+ let(:disabled_templates) do
+ Gitlab::Template::GitlabCiYmlTemplate.disabled_templates.map do |template|
+ template + Gitlab::Template::GitlabCiYmlTemplate.extension
end
+ end
+
+ context 'included in a CI YAML configuration' do
+ using RSpec::Parameterized::TableSyntax
- it 'is valid' do
- expect { subject }.not_to raise_error
+ where(:template_name) do
+ all_templates - disabled_templates
end
- it 'require default stages to be included' do
- expect(subject.stages).to include(*Gitlab::Ci::Config::Entry::Stages.default)
+ with_them do
+ let(:content) do
+ <<~EOS
+ include:
+ - template: #{template_name}
+
+ concrete_build_implemented_by_a_user:
+ stage: test
+ script: do something
+ EOS
+ end
+
+ it 'is valid' do
+ expect { subject }.not_to raise_error
+ end
+
+ it 'require default stages to be included' do
+ expect(subject.stages).to include(*Gitlab::Ci::Config::Entry::Stages.default)
+ end
end
end
end
diff --git a/spec/lib/gitlab/template/finders/global_template_finder_spec.rb b/spec/lib/gitlab/template/finders/global_template_finder_spec.rb
index 082ffa855b7..580da497944 100644
--- a/spec/lib/gitlab/template/finders/global_template_finder_spec.rb
+++ b/spec/lib/gitlab/template/finders/global_template_finder_spec.rb
@@ -15,23 +15,87 @@ describe Gitlab::Template::Finders::GlobalTemplateFinder do
FileUtils.rm_rf(base_dir)
end
- subject(:finder) { described_class.new(base_dir, '', 'Foo' => '', 'Bar' => 'bar') }
+ subject(:finder) { described_class.new(base_dir, '', { 'General' => '', 'Bar' => 'Bar' }, exclusions: exclusions) }
+
+ let(:exclusions) { [] }
describe '.find' do
- it 'finds a template in the Foo category' do
- create_template!('test-template')
+ context 'with a non-prefixed General template' do
+ before do
+ create_template!('test-template')
+ end
- expect(finder.find('test-template')).to be_present
- end
+ it 'finds the template with no prefix' do
+ expect(finder.find('test-template')).to be_present
+ end
+
+ it 'does not find a prefixed template' do
+ expect(finder.find('Bar/test-template')).to be_nil
+ end
+
+ it 'does not permit path traversal requests' do
+ expect { finder.find('../foo') }.to raise_error(/Invalid path/)
+ end
- it 'finds a template in the Bar category' do
- create_template!('bar/test-template')
+ context 'while listed as an exclusion' do
+ let(:exclusions) { %w[test-template] }
- expect(finder.find('test-template')).to be_present
+ it 'does not find the template without a prefix' do
+ expect(finder.find('test-template')).to be_nil
+ end
+
+ it 'does not find the template with a prefix' do
+ expect(finder.find('Bar/test-template')).to be_nil
+ end
+
+ it 'finds another prefixed template with the same name' do
+ create_template!('Bar/test-template')
+
+ expect(finder.find('test-template')).to be_nil
+ expect(finder.find('Bar/test-template')).to be_present
+ end
+ end
end
- it 'does not permit path traversal requests' do
- expect { finder.find('../foo') }.to raise_error(/Invalid path/)
+ context 'with a prefixed template' do
+ before do
+ create_template!('Bar/test-template')
+ end
+
+ it 'finds the template with a prefix' do
+ expect(finder.find('Bar/test-template')).to be_present
+ end
+
+ # NOTE: This spec fails, the template Bar/test-template is found
+ # See Gitlab issue: https://gitlab.com/gitlab-org/gitlab/issues/205719
+ xit 'does not find the template without a prefix' do
+ expect(finder.find('test-template')).to be_nil
+ end
+
+ it 'does not permit path traversal requests' do
+ expect { finder.find('../foo') }.to raise_error(/Invalid path/)
+ end
+
+ context 'while listed as an exclusion' do
+ let(:exclusions) { %w[Bar/test-template] }
+
+ it 'does not find the template with a prefix' do
+ expect(finder.find('Bar/test-template')).to be_nil
+ end
+
+ # NOTE: This spec fails, the template Bar/test-template is found
+ # See Gitlab issue: https://gitlab.com/gitlab-org/gitlab/issues/205719
+ xit 'does not find the template without a prefix' do
+ expect(finder.find('test-template')).to be_nil
+ end
+
+ it 'finds another non-prefixed template with the same name' do
+ create_template!('Bar/test-template')
+
+ expect(finder.find('test-template')).to be_present
+ expect(finder.find('Bar/test-template')).to be_nil
+ end
+ end
end
end
end
diff --git a/spec/mailers/emails/pages_domains_spec.rb b/spec/mailers/emails/pages_domains_spec.rb
index e360e38256e..78887cef7ab 100644
--- a/spec/mailers/emails/pages_domains_spec.rb
+++ b/spec/mailers/emails/pages_domains_spec.rb
@@ -7,8 +7,8 @@ describe Emails::PagesDomains do
include EmailSpec::Matchers
include_context 'gitlab email notification'
- set(:domain) { create(:pages_domain, project: project) }
- set(:user) { project.creator }
+ let_it_be(:domain, reload: true) { create(:pages_domain, project: project) }
+ let_it_be(:user) { project.creator }
shared_examples 'a pages domain email' do
let(:recipient) { user }
diff --git a/spec/mailers/emails/pipelines_spec.rb b/spec/mailers/emails/pipelines_spec.rb
index ad1aa915fbb..9996bd9a6c4 100644
--- a/spec/mailers/emails/pipelines_spec.rb
+++ b/spec/mailers/emails/pipelines_spec.rb
@@ -6,7 +6,7 @@ require 'email_spec'
describe Emails::Pipelines do
include EmailSpec::Matchers
- set(:project) { create(:project, :repository) }
+ let_it_be(:project) { create(:project, :repository) }
shared_examples_for 'correct pipeline information' do
it 'has a correct information' do
diff --git a/spec/mailers/notify_spec.rb b/spec/mailers/notify_spec.rb
index 19b15a6c6e2..f49abb24c44 100644
--- a/spec/mailers/notify_spec.rb
+++ b/spec/mailers/notify_spec.rb
@@ -13,11 +13,11 @@ describe Notify do
let(:current_user_sanitized) { 'www_example_com' }
- set(:user) { create(:user) }
- set(:current_user) { create(:user, email: "current@email.com", name: 'www.example.com') }
- set(:assignee) { create(:user, email: 'assignee@example.com', name: 'John Doe') }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:current_user) { create(:user, email: "current@email.com", name: 'www.example.com') }
+ let_it_be(:assignee) { create(:user, email: 'assignee@example.com', name: 'John Doe') }
- set(:merge_request) do
+ let_it_be(:merge_request) do
create(:merge_request, source_project: project,
target_project: project,
author: current_user,
@@ -25,7 +25,7 @@ describe Notify do
description: 'Awesome description')
end
- set(:issue) do
+ let_it_be(:issue, reload: true) do
create(:issue, author: current_user,
assignees: [assignee],
project: project,
@@ -487,7 +487,7 @@ describe Notify do
end
describe 'that are unmergeable' do
- set(:merge_request) do
+ let_it_be(:merge_request) do
create(:merge_request, :conflict,
source_project: project,
target_project: project,
@@ -568,7 +568,7 @@ describe Notify do
end
describe '#mail_thread' do
- set(:mail_thread_note) { create(:note) }
+ let_it_be(:mail_thread_note) { create(:note) }
let(:headers) do
{
@@ -638,9 +638,9 @@ describe Notify do
let(:host) { Gitlab.config.gitlab.host }
context 'in discussion' do
- set(:first_note) { create(:discussion_note_on_issue, project: project) }
- set(:second_note) { create(:discussion_note_on_issue, in_reply_to: first_note, project: project) }
- set(:third_note) { create(:discussion_note_on_issue, in_reply_to: second_note, project: project) }
+ let_it_be(:first_note) { create(:discussion_note_on_issue, project: project) }
+ let_it_be(:second_note) { create(:discussion_note_on_issue, in_reply_to: first_note, project: project) }
+ let_it_be(:third_note) { create(:discussion_note_on_issue, in_reply_to: second_note, project: project) }
subject { described_class.note_issue_email(recipient.id, third_note.id) }
@@ -664,7 +664,7 @@ describe Notify do
end
context 'individual issue comments' do
- set(:note) { create(:note_on_issue, project: project) }
+ let_it_be(:note) { create(:note_on_issue, project: project) }
subject { described_class.note_issue_email(recipient.id, note.id) }
diff --git a/spec/models/project_services/jira_service_spec.rb b/spec/models/project_services/jira_service_spec.rb
index 832c19adf1d..c1e7a1c2875 100644
--- a/spec/models/project_services/jira_service_spec.rb
+++ b/spec/models/project_services/jira_service_spec.rb
@@ -489,7 +489,14 @@ describe JiraService do
@jira_service.close_issue(resource, ExternalIssue.new('JIRA-123', project))
- expect(@jira_service).to have_received(:log_error).with("Issue transition failed", error: "Bad Request", client_url: "http://jira.example.com")
+ expect(@jira_service).to have_received(:log_error).with(
+ "Issue transition failed",
+ error: hash_including(
+ exception_class: 'StandardError',
+ exception_message: "Bad Request"
+ ),
+ client_url: "http://jira.example.com"
+ )
end
it 'calls the api with jira_issue_transition_id' do
diff --git a/spec/policies/application_setting/term_policy_spec.rb b/spec/policies/application_setting/term_policy_spec.rb
index 21690d4b457..2b5b9758ec2 100644
--- a/spec/policies/application_setting/term_policy_spec.rb
+++ b/spec/policies/application_setting/term_policy_spec.rb
@@ -5,7 +5,7 @@ require 'spec_helper'
describe ApplicationSetting::TermPolicy do
include TermsHelper
- set(:term) { create(:term) }
+ let_it_be(:term) { create(:term) }
let(:user) { create(:user) }
subject(:policy) { described_class.new(user, term) }
diff --git a/spec/policies/ci/pipeline_schedule_policy_spec.rb b/spec/policies/ci/pipeline_schedule_policy_spec.rb
index 700d7d1af0a..d503401f7cf 100644
--- a/spec/policies/ci/pipeline_schedule_policy_spec.rb
+++ b/spec/policies/ci/pipeline_schedule_policy_spec.rb
@@ -3,9 +3,9 @@
require 'spec_helper'
describe Ci::PipelineSchedulePolicy, :models do
- set(:user) { create(:user) }
- set(:project) { create(:project, :repository) }
- set(:pipeline_schedule) { create(:ci_pipeline_schedule, :nightly, project: project) }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:project) { create(:project, :repository) }
+ let_it_be(:pipeline_schedule, reload: true) { create(:ci_pipeline_schedule, :nightly, project: project) }
let(:policy) do
described_class.new(user, pipeline_schedule)
diff --git a/spec/policies/project_policy_spec.rb b/spec/policies/project_policy_spec.rb
index 3b08726c75a..e1466ad2b73 100644
--- a/spec/policies/project_policy_spec.rb
+++ b/spec/policies/project_policy_spec.rb
@@ -5,12 +5,12 @@ require 'spec_helper'
describe ProjectPolicy do
include ExternalAuthorizationServiceHelpers
include_context 'ProjectPolicy context'
- set(:guest) { create(:user) }
- set(:reporter) { create(:user) }
- set(:developer) { create(:user) }
- set(:maintainer) { create(:user) }
- set(:owner) { create(:user) }
- set(:admin) { create(:admin) }
+ let_it_be(:guest) { create(:user) }
+ let_it_be(:reporter) { create(:user) }
+ let_it_be(:developer) { create(:user) }
+ let_it_be(:maintainer) { create(:user) }
+ let_it_be(:owner) { create(:user) }
+ let_it_be(:admin) { create(:admin) }
let(:project) { create(:project, :public, namespace: owner.namespace) }
let(:base_guest_permissions) do
diff --git a/spec/policies/resource_label_event_policy_spec.rb b/spec/policies/resource_label_event_policy_spec.rb
index 799534d2b08..4db2390c818 100644
--- a/spec/policies/resource_label_event_policy_spec.rb
+++ b/spec/policies/resource_label_event_policy_spec.rb
@@ -3,10 +3,10 @@
require 'spec_helper'
describe ResourceLabelEventPolicy do
- set(:user) { create(:user) }
- set(:project) { create(:project, :private) }
- set(:issue) { create(:issue, project: project) }
- set(:private_project) { create(:project, :private) }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:project) { create(:project, :private) }
+ let_it_be(:issue) { create(:issue, project: project) }
+ let_it_be(:private_project) { create(:project, :private) }
describe '#read_resource_label_event' do
context 'with non-member user' do
diff --git a/spec/requests/api/internal/base_spec.rb b/spec/requests/api/internal/base_spec.rb
index 02dc2229769..c3b5f9ded21 100644
--- a/spec/requests/api/internal/base_spec.rb
+++ b/spec/requests/api/internal/base_spec.rb
@@ -811,6 +811,8 @@ describe API::Internal::Base do
describe 'POST /internal/post_receive', :clean_gitlab_redis_shared_state do
let(:identifier) { 'key-123' }
+ let(:branch_name) { 'feature' }
+ let(:push_options) { ['ci.skip', 'another push option'] }
let(:valid_params) do
{
@@ -822,192 +824,33 @@ describe API::Internal::Base do
}
end
- let(:branch_name) { 'feature' }
-
let(:changes) do
"#{Gitlab::Git::BLANK_SHA} 570e7b2abdd848b95f2f578043fc23bd6f6fd24d refs/heads/#{branch_name}"
end
- let(:push_options) do
- ['ci.skip',
- 'another push option']
- end
+ subject { post api('/internal/post_receive'), params: valid_params }
before do
project.add_developer(user)
allow_any_instance_of(Gitlab::Identifier).to receive(:identify).and_return(user)
end
- it 'enqueues a PostReceive worker job' do
- expect(PostReceive).to receive(:perform_async)
- .with(gl_repository, identifier, changes, { ci: { skip: true } })
-
- post api('/internal/post_receive'), params: valid_params
- end
-
- it 'decreases the reference counter and returns the result' do
- expect(Gitlab::ReferenceCounter).to receive(:new).with(gl_repository)
- .and_return(reference_counter)
- expect(reference_counter).to receive(:decrease).and_return(true)
-
- post api('/internal/post_receive'), params: valid_params
-
- expect(json_response['reference_counter_decreased']).to be(true)
- end
-
- it 'returns link to create new merge request' do
- post api('/internal/post_receive'), params: valid_params
-
+ it 'executes PostReceiveService' do
message = <<~MESSAGE.strip
To create a merge request for #{branch_name}, visit:
http://#{Gitlab.config.gitlab.host}/#{project.full_path}/-/merge_requests/new?merge_request%5Bsource_branch%5D=#{branch_name}
MESSAGE
- expect(json_response['messages']).to include(build_basic_message(message))
- end
-
- it 'returns the link to an existing merge request when it exists' do
- merge_request = create(:merge_request, source_project: project, source_branch: branch_name, target_branch: 'master')
-
- post api('/internal/post_receive'), params: valid_params
-
- message = <<~MESSAGE.strip
- View merge request for feature:
- #{project_merge_request_url(project, merge_request)}
- MESSAGE
-
- expect(json_response['messages']).to include(build_basic_message(message))
- end
-
- it 'returns no merge request messages if printing_merge_request_link_enabled is false' do
- project.update!(printing_merge_request_link_enabled: false)
-
- post api('/internal/post_receive'), params: valid_params
-
- expect(json_response['messages']).to be_blank
- end
-
- it 'does not invoke MergeRequests::PushOptionsHandlerService' do
- expect(MergeRequests::PushOptionsHandlerService).not_to receive(:new)
+ subject
- post api('/internal/post_receive'), params: valid_params
+ expect(json_response).to eq({
+ 'messages' => [{ 'message' => message, 'type' => 'basic' }],
+ 'reference_counter_decreased' => true
+ })
end
it_behaves_like 'storing arguments in the application context' do
let(:expected_params) { { user: user.username, project: project.full_path } }
-
- subject { post api('/internal/post_receive'), params: valid_params }
- end
-
- context 'when there are merge_request push options' do
- before do
- valid_params[:push_options] = ['merge_request.create']
- end
-
- it 'invokes MergeRequests::PushOptionsHandlerService' do
- expect(MergeRequests::PushOptionsHandlerService).to receive(:new)
-
- post api('/internal/post_receive'), params: valid_params
- end
-
- it 'creates a new merge request' do
- expect do
- Sidekiq::Testing.fake! do
- post api('/internal/post_receive'), params: valid_params
- end
- end.to change { MergeRequest.count }.by(1)
- end
-
- it 'links to the newly created merge request' do
- post api('/internal/post_receive'), params: valid_params
-
- message = <<~MESSAGE.strip
- View merge request for #{branch_name}:
- http://#{Gitlab.config.gitlab.host}/#{project.full_path}/-/merge_requests/1
- MESSAGE
-
- expect(json_response['messages']).to include(build_basic_message(message))
- end
-
- it 'adds errors on the service instance to warnings' do
- expect_any_instance_of(
- MergeRequests::PushOptionsHandlerService
- ).to receive(:errors).at_least(:once).and_return(['my error'])
-
- post api('/internal/post_receive'), params: valid_params
-
- message = "WARNINGS:\nError encountered with push options 'merge_request.create': my error"
- expect(json_response['messages']).to include(build_alert_message(message))
- end
-
- it 'adds ActiveRecord errors on invalid MergeRequest records to warnings' do
- invalid_merge_request = MergeRequest.new
- invalid_merge_request.errors.add(:base, 'my error')
-
- expect_any_instance_of(
- MergeRequests::CreateService
- ).to receive(:execute).and_return(invalid_merge_request)
-
- post api('/internal/post_receive'), params: valid_params
-
- message = "WARNINGS:\nError encountered with push options 'merge_request.create': my error"
- expect(json_response['messages']).to include(build_alert_message(message))
- end
- end
-
- context 'broadcast message exists' do
- let!(:broadcast_message) { create(:broadcast_message, starts_at: 1.day.ago, ends_at: 1.day.from_now ) }
-
- it 'outputs a broadcast message' do
- post api('/internal/post_receive'), params: valid_params
-
- expect(response).to have_gitlab_http_status(:ok)
- expect(json_response['messages']).to include(build_alert_message(broadcast_message.message))
- end
- end
-
- context 'broadcast message does not exist' do
- it 'does not output a broadcast message' do
- post api('/internal/post_receive'), params: valid_params
-
- expect(response).to have_gitlab_http_status(:ok)
- expect(has_alert_messages?(json_response['messages'])).to be_falsey
- end
- end
-
- context 'nil broadcast message' do
- it 'does not output a broadcast message' do
- allow(BroadcastMessage).to receive(:current).and_return(nil)
-
- post api('/internal/post_receive'), params: valid_params
-
- expect(response).to have_gitlab_http_status(:ok)
- expect(has_alert_messages?(json_response['messages'])).to be_falsey
- end
- end
-
- context 'with a redirected data' do
- it 'returns redirected message on the response' do
- project_moved = Gitlab::Checks::ProjectMoved.new(project, user, 'http', 'foo/baz')
- project_moved.add_message
-
- post api('/internal/post_receive'), params: valid_params
-
- expect(response).to have_gitlab_http_status(:ok)
- expect(json_response['messages']).to include(build_basic_message(project_moved.message))
- end
- end
-
- context 'with new project data' do
- it 'returns new project message on the response' do
- project_created = Gitlab::Checks::ProjectCreated.new(project, user, 'http')
- project_created.add_message
-
- post api('/internal/post_receive'), params: valid_params
-
- expect(response).to have_gitlab_http_status(:ok)
- expect(json_response['messages']).to include(build_basic_message(project_created.message))
- end
end
context 'with an orphaned write deploy key' do
@@ -1016,7 +859,7 @@ describe API::Internal::Base do
expect(Gitlab::Checks::ProjectMoved).not_to receive(:fetch_message)
- post api('/internal/post_receive'), params: valid_params
+ subject
expect(response).to have_gitlab_http_status(:ok)
end
@@ -1030,7 +873,7 @@ describe API::Internal::Base do
expect(Gitlab::Checks::ProjectMoved).not_to receive(:fetch_message)
- post api('/internal/post_receive'), params: valid_params
+ subject
expect(response).to have_gitlab_http_status(:ok)
end
@@ -1142,18 +985,4 @@ describe API::Internal::Base do
}
)
end
-
- def build_alert_message(message)
- { 'type' => 'alert', 'message' => message }
- end
-
- def build_basic_message(message)
- { 'type' => 'basic', 'message' => message }
- end
-
- def has_alert_messages?(messages)
- messages.any? do |message|
- message['type'] == 'alert'
- end
- end
end
diff --git a/spec/services/post_receive_service_spec.rb b/spec/services/post_receive_service_spec.rb
new file mode 100644
index 00000000000..9b9200fd33e
--- /dev/null
+++ b/spec/services/post_receive_service_spec.rb
@@ -0,0 +1,186 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe PostReceiveService do
+ include Gitlab::Routing
+
+ let_it_be(:project) { create(:project, :repository, :wiki_repo) }
+ let_it_be(:user) { create(:user) }
+
+ let(:identifier) { 'key-123' }
+ let(:gl_repository) { "project-#{project.id}" }
+ let(:branch_name) { 'feature' }
+ let(:secret_token) { Gitlab::Shell.secret_token }
+ let(:reference_counter) { double('ReferenceCounter') }
+ let(:push_options) { ['ci.skip', 'another push option'] }
+
+ let(:changes) do
+ "#{Gitlab::Git::BLANK_SHA} 570e7b2abdd848b95f2f578043fc23bd6f6fd24d refs/heads/#{branch_name}"
+ end
+
+ let(:params) do
+ {
+ gl_repository: gl_repository,
+ secret_token: secret_token,
+ identifier: identifier,
+ changes: changes,
+ push_options: push_options
+ }
+ end
+
+ let(:response) { PostReceiveService.new(user, project, params).execute }
+
+ subject { response.messages.as_json }
+
+ it 'enqueues a PostReceive worker job' do
+ expect(PostReceive).to receive(:perform_async)
+ .with(gl_repository, identifier, changes, { ci: { skip: true } })
+
+ subject
+ end
+
+ it 'decreases the reference counter and returns the result' do
+ expect(Gitlab::ReferenceCounter).to receive(:new).with(gl_repository)
+ .and_return(reference_counter)
+ expect(reference_counter).to receive(:decrease).and_return(true)
+
+ expect(response.reference_counter_decreased).to be(true)
+ end
+
+ it 'returns link to create new merge request' do
+ message = <<~MESSAGE.strip
+ To create a merge request for #{branch_name}, visit:
+ http://#{Gitlab.config.gitlab.host}/#{project.full_path}/-/merge_requests/new?merge_request%5Bsource_branch%5D=#{branch_name}
+ MESSAGE
+
+ expect(subject).to include(build_basic_message(message))
+ end
+
+ it 'returns the link to an existing merge request when it exists' do
+ merge_request = create(:merge_request, source_project: project, source_branch: branch_name, target_branch: 'master')
+ message = <<~MESSAGE.strip
+ View merge request for feature:
+ #{project_merge_request_url(project, merge_request)}
+ MESSAGE
+
+ expect(subject).to include(build_basic_message(message))
+ end
+
+ context 'when printing_merge_request_link_enabled is false' do
+ let(:project) { create(:project, printing_merge_request_link_enabled: false) }
+
+ it 'returns no merge request messages' do
+ expect(subject).to be_blank
+ end
+ end
+
+ it 'does not invoke MergeRequests::PushOptionsHandlerService' do
+ expect(MergeRequests::PushOptionsHandlerService).not_to receive(:new)
+
+ subject
+ end
+
+ context 'when there are merge_request push options' do
+ let(:params) { super().merge(push_options: ['merge_request.create']) }
+
+ before do
+ project.add_developer(user)
+ end
+
+ it 'invokes MergeRequests::PushOptionsHandlerService' do
+ expect(MergeRequests::PushOptionsHandlerService).to receive(:new).and_call_original
+
+ subject
+ end
+
+ it 'creates a new merge request' do
+ expect { Sidekiq::Testing.fake! { subject } }.to change(MergeRequest, :count).by(1)
+ end
+
+ it 'links to the newly created merge request' do
+ message = <<~MESSAGE.strip
+ View merge request for #{branch_name}:
+ http://#{Gitlab.config.gitlab.host}/#{project.full_path}/-/merge_requests/1
+ MESSAGE
+
+ expect(subject).to include(build_basic_message(message))
+ end
+
+ it 'adds errors on the service instance to warnings' do
+ expect_any_instance_of(
+ MergeRequests::PushOptionsHandlerService
+ ).to receive(:errors).at_least(:once).and_return(['my error'])
+
+ message = "WARNINGS:\nError encountered with push options 'merge_request.create': my error"
+
+ expect(subject).to include(build_alert_message(message))
+ end
+
+ it 'adds ActiveRecord errors on invalid MergeRequest records to warnings' do
+ invalid_merge_request = MergeRequest.new
+ invalid_merge_request.errors.add(:base, 'my error')
+ message = "WARNINGS:\nError encountered with push options 'merge_request.create': my error"
+
+ expect_any_instance_of(
+ MergeRequests::CreateService
+ ).to receive(:execute).and_return(invalid_merge_request)
+
+ expect(subject).to include(build_alert_message(message))
+ end
+ end
+
+ context 'broadcast message exists' do
+ it 'outputs a broadcast message' do
+ broadcast_message = create(:broadcast_message, starts_at: 1.day.ago, ends_at: 1.day.from_now)
+
+ expect(subject).to include(build_alert_message(broadcast_message.message))
+ end
+ end
+
+ context 'broadcast message does not exist' do
+ it 'does not output a broadcast message' do
+ expect(has_alert_messages?(subject)).to be_falsey
+ end
+ end
+
+ context 'nil broadcast message' do
+ it 'does not output a broadcast message' do
+ allow(BroadcastMessage).to receive(:current).and_return(nil)
+
+ expect(has_alert_messages?(subject)).to be_falsey
+ end
+ end
+
+ context 'with a redirected data' do
+ it 'returns redirected message on the response' do
+ project_moved = Gitlab::Checks::ProjectMoved.new(project, user, 'http', 'foo/baz')
+ project_moved.add_message
+
+ expect(subject).to include(build_basic_message(project_moved.message))
+ end
+ end
+
+ context 'with new project data' do
+ it 'returns new project message on the response' do
+ project_created = Gitlab::Checks::ProjectCreated.new(project, user, 'http')
+ project_created.add_message
+
+ expect(subject).to include(build_basic_message(project_created.message))
+ end
+ end
+
+ def build_alert_message(message)
+ { 'type' => 'alert', 'message' => message }
+ end
+
+ def build_basic_message(message)
+ { 'type' => 'basic', 'message' => message }
+ end
+
+ def has_alert_messages?(messages)
+ messages.any? do |message|
+ message['type'] == 'alert'
+ end
+ end
+end
diff --git a/spec/support/shared_examples/lib/gitlab/background_migration/mentions_migration_shared_examples.rb b/spec/support/shared_examples/lib/gitlab/background_migration/mentions_migration_shared_examples.rb
index f90e1a1ebab..60c0ec45c71 100644
--- a/spec/support/shared_examples/lib/gitlab/background_migration/mentions_migration_shared_examples.rb
+++ b/spec/support/shared_examples/lib/gitlab/background_migration/mentions_migration_shared_examples.rb
@@ -26,16 +26,18 @@ shared_examples 'resource notes mentions migration' do |migration_class, resourc
note1.becomes(Note).save!
note2.becomes(Note).save!
note3.becomes(Note).save!
- # note4.becomes(Note).save(validate: false)
+ note4.becomes(Note).save!
+ note5.becomes(Note).save(validate: false)
end
it 'migrates mentions from note' do
join = migration_class::JOIN
conditions = migration_class::QUERY_CONDITIONS
- # there are 4 notes for each noteable_type, but one does not have mentions and
+ # there are 5 notes for each noteable_type, but two do not have mentions and
# another one's noteable_id points to an inexistent resource
- expect(notes.where(noteable_type: resource_class.to_s).count).to eq 4
+ expect(notes.where(noteable_type: resource_class.to_s).count).to eq 5
+ expect(user_mentions.count).to eq 0
expect do
subject.perform(resource_class.name, join, conditions, true, Note.minimum(:id), Note.maximum(:id))