diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-12-21 12:14:15 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-12-21 12:14:15 +0000 |
commit | 55e3b0c9100c453fa32055dc2c76bd7ebfa23a17 (patch) | |
tree | be205a5fe067983f154884f724511ba6fdb2620e /spec | |
parent | 3442b76bbd896c85c06feaa56e3d9355a3945523 (diff) | |
download | gitlab-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.rb | 113 | ||||
-rw-r--r-- | spec/metrics_server/metrics_server_spec.rb | 15 | ||||
-rw-r--r-- | spec/models/merge_request_spec.rb | 6 | ||||
-rw-r--r-- | spec/views/projects/edit.html.haml_spec.rb | 3 |
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 |