summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-12-21 12:14:15 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-12-21 12:14:15 +0000
commit55e3b0c9100c453fa32055dc2c76bd7ebfa23a17 (patch)
treebe205a5fe067983f154884f724511ba6fdb2620e /spec
parent3442b76bbd896c85c06feaa56e3d9355a3945523 (diff)
downloadgitlab-ce-55e3b0c9100c453fa32055dc2c76bd7ebfa23a17.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/lib/gitlab/merge_requests/commit_message_generator_spec.rb113
-rw-r--r--spec/metrics_server/metrics_server_spec.rb15
-rw-r--r--spec/models/merge_request_spec.rb6
-rw-r--r--spec/views/projects/edit.html.haml_spec.rb3
4 files changed, 124 insertions, 13 deletions
diff --git a/spec/lib/gitlab/merge_requests/commit_message_generator_spec.rb b/spec/lib/gitlab/merge_requests/commit_message_generator_spec.rb
index 65c76aac10c..28318de12c9 100644
--- a/spec/lib/gitlab/merge_requests/commit_message_generator_spec.rb
+++ b/spec/lib/gitlab/merge_requests/commit_message_generator_spec.rb
@@ -15,7 +15,9 @@ RSpec.describe Gitlab::MergeRequests::CommitMessageGenerator do
)
end
- let(:user) { project.creator }
+ let(:owner) { project.creator }
+ let(:developer) { create(:user, access_level: Gitlab::Access::DEVELOPER) }
+ let(:maintainer) { create(:user, access_level: Gitlab::Access::MAINTAINER) }
let(:source_branch) { 'feature' }
let(:merge_request_description) { "Merge Request Description\nNext line" }
let(:merge_request_title) { 'Bugfix' }
@@ -27,13 +29,13 @@ RSpec.describe Gitlab::MergeRequests::CommitMessageGenerator do
target_project: project,
target_branch: 'master',
source_branch: source_branch,
- author: user,
+ author: owner,
description: merge_request_description,
title: merge_request_title
)
end
- subject { described_class.new(merge_request: merge_request) }
+ subject { described_class.new(merge_request: merge_request, current_user: maintainer) }
shared_examples_for 'commit message with template' do |message_template_name|
it 'returns nil when template is not set in target project' do
@@ -274,6 +276,111 @@ RSpec.describe Gitlab::MergeRequests::CommitMessageGenerator do
end
end
end
+
+ context 'when project has merge commit template with approvers' do
+ let(message_template_name) do
+ "Merge Request approved by:\n%{approved_by}"
+ end
+
+ context "and mr has no approval" do
+ before do
+ merge_request.approved_by_users = []
+ end
+
+ it "returns empty string" do
+ expect(result_message).to eq <<~MSG.rstrip
+ Merge Request approved by:
+ MSG
+ end
+ end
+
+ context "and mr has one approval" do
+ before do
+ merge_request.approved_by_users = [developer]
+ end
+
+ it "returns user name and email" do
+ expect(result_message).to eq <<~MSG.rstrip
+ Merge Request approved by:
+ Approved-by: #{developer.name} <#{developer.email}>
+ MSG
+ end
+ end
+
+ context "and mr has multiple approvals" do
+ before do
+ merge_request.approved_by_users = [developer, maintainer]
+ end
+
+ it "returns users names and emails" do
+ expect(result_message).to eq <<~MSG.rstrip
+ Merge Request approved by:
+ Approved-by: #{developer.name} <#{developer.email}>
+ Approved-by: #{maintainer.name} <#{maintainer.email}>
+ MSG
+ end
+ end
+ end
+
+ context 'when project has merge commit template with url' do
+ let(message_template_name) do
+ "Merge Request URL is '%{url}'"
+ end
+
+ context "and merge request has url" do
+ it "returns mr url" do
+ expect(result_message).to eq <<~MSG.rstrip
+ Merge Request URL is '#{Gitlab::UrlBuilder.build(merge_request)}'
+ MSG
+ end
+ end
+ end
+
+ context 'when project has merge commit template with merged_by' do
+ let(message_template_name) do
+ "Merge Request merged by '%{merged_by}'"
+ end
+
+ context "and current_user is passed" do
+ it "returns user name and email" do
+ expect(result_message).to eq <<~MSG.rstrip
+ Merge Request merged by '#{maintainer.name} <#{maintainer.email}>'
+ MSG
+ end
+ end
+ end
+
+ context 'user' do
+ subject { described_class.new(merge_request: merge_request, current_user: nil) }
+
+ let(message_template_name) do
+ "Merge Request merged by '%{merged_by}'"
+ end
+
+ context 'comes from metrics' do
+ before do
+ merge_request.metrics.merged_by = developer
+ end
+
+ it "returns user name and email" do
+ expect(result_message).to eq <<~MSG.rstrip
+ Merge Request merged by '#{developer.name} <#{developer.email}>'
+ MSG
+ end
+ end
+
+ context 'comes from merge_user' do
+ before do
+ merge_request.merge_user = maintainer
+ end
+
+ it "returns user name and email" do
+ expect(result_message).to eq <<~MSG.rstrip
+ Merge Request merged by '#{maintainer.name} <#{maintainer.email}>'
+ MSG
+ end
+ end
+ end
end
describe '#merge_message' do
diff --git a/spec/metrics_server/metrics_server_spec.rb b/spec/metrics_server/metrics_server_spec.rb
index 4f0d5bc5bb2..1120fab2de3 100644
--- a/spec/metrics_server/metrics_server_spec.rb
+++ b/spec/metrics_server/metrics_server_spec.rb
@@ -8,14 +8,22 @@ require_relative '../support/helpers/next_instance_of'
RSpec.describe MetricsServer do # rubocop:disable RSpec/FilePath
include NextInstanceOf
+ let(:prometheus_config) { ::Prometheus::Client.configuration }
let(:metrics_dir) { Dir.mktmpdir }
+ # Prometheus::Client is a singleton, i.e. shared global state, so
+ # we need to reset it after testing.
+ let!(:old_multiprocess_files_dir) { prometheus_config.multiprocess_files_dir }
+
before do
# We do not want this to have knock-on effects on the test process.
allow(Gitlab::ProcessManagement).to receive(:modify_signals)
end
after do
+ Gitlab::Metrics.reset_registry!
+ prometheus_config.multiprocess_files_dir = old_multiprocess_files_dir
+
FileUtils.rm_rf(metrics_dir, secure: true)
end
@@ -55,9 +63,7 @@ RSpec.describe MetricsServer do # rubocop:disable RSpec/FilePath
describe '#start' do
let(:exporter_class) { Class.new(Gitlab::Metrics::Exporter::BaseExporter) }
let(:exporter_double) { double('fake_exporter', start: true) }
- let(:prometheus_config) { ::Prometheus::Client.configuration }
let(:settings) { { "fake_exporter" => { "enabled" => true } } }
- let!(:old_metrics_dir) { prometheus_config.multiprocess_files_dir }
let(:ruby_sampler_double) { double(Gitlab::Metrics::Samplers::RubySampler) }
subject(:metrics_server) { described_class.new('fake', metrics_dir, true)}
@@ -71,11 +77,6 @@ RSpec.describe MetricsServer do # rubocop:disable RSpec/FilePath
allow(ruby_sampler_double).to receive(:start)
end
- after do
- Gitlab::Metrics.reset_registry!
- prometheus_config.multiprocess_files_dir = old_metrics_dir
- end
-
it 'configures ::Prometheus::Client' do
metrics_server.start
diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb
index e1db1b3cf3e..79b8765b540 100644
--- a/spec/models/merge_request_spec.rb
+++ b/spec/models/merge_request_spec.rb
@@ -1647,13 +1647,13 @@ RSpec.describe MergeRequest, factory_default: :keep do
end
it 'uses template from target project' do
- request = build(:merge_request, title: 'Fix everything')
- request.compare_commits = [
+ subject.title = 'Fix everything'
+ subject.compare_commits = [
double(safe_message: 'Commit message', gitaly_commit?: true, merge_commit?: false, description?: false)
]
subject.target_project.merge_commit_template = '%{title}'
- expect(request.default_merge_commit_message)
+ expect(subject.default_merge_commit_message)
.to eq('Fix everything')
end
diff --git a/spec/views/projects/edit.html.haml_spec.rb b/spec/views/projects/edit.html.haml_spec.rb
index 8c96f286c79..ee1bb0e9541 100644
--- a/spec/views/projects/edit.html.haml_spec.rb
+++ b/spec/views/projects/edit.html.haml_spec.rb
@@ -67,6 +67,9 @@ RSpec.describe 'projects/edit' do
expect(rendered).to have_content('%{issues}')
expect(rendered).to have_content('%{description}')
expect(rendered).to have_content('%{reference}')
+ expect(rendered).to have_content('%{approved_by}')
+ expect(rendered).to have_content('%{url}')
+ expect(rendered).to have_content('%{merged_by}')
end
it 'displays a placeholder if none is set' do