diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-09-19 01:45:44 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-09-19 01:45:44 +0000 |
commit | 85dc423f7090da0a52c73eb66faf22ddb20efff9 (patch) | |
tree | 9160f299afd8c80c038f08e1545be119f5e3f1e1 /spec/lib/gitlab/danger | |
parent | 15c2c8c66dbe422588e5411eee7e68f1fa440bb8 (diff) | |
download | gitlab-ce-85dc423f7090da0a52c73eb66faf22ddb20efff9.tar.gz |
Add latest changes from gitlab-org/gitlab@13-4-stable-ee
Diffstat (limited to 'spec/lib/gitlab/danger')
-rw-r--r-- | spec/lib/gitlab/danger/changelog_spec.rb | 72 | ||||
-rw-r--r-- | spec/lib/gitlab/danger/helper_spec.rb | 40 | ||||
-rw-r--r-- | spec/lib/gitlab/danger/teammate_spec.rb | 57 |
3 files changed, 117 insertions, 52 deletions
diff --git a/spec/lib/gitlab/danger/changelog_spec.rb b/spec/lib/gitlab/danger/changelog_spec.rb index 3c67e9ca8ea..2da60f4f8bd 100644 --- a/spec/lib/gitlab/danger/changelog_spec.rb +++ b/spec/lib/gitlab/danger/changelog_spec.rb @@ -16,20 +16,47 @@ RSpec.describe Gitlab::Danger::Changelog do let(:fake_gitlab) { double('fake-gitlab', mr_labels: mr_labels, mr_json: mr_json) } let(:changes_by_category) { nil } + let(:sanitize_mr_title) { nil } let(:ee?) { false } - let(:fake_helper) { double('fake-helper', changes_by_category: changes_by_category, ee?: ee?) } + let(:fake_helper) { double('fake-helper', changes_by_category: changes_by_category, sanitize_mr_title: sanitize_mr_title, ee?: ee?) } let(:fake_danger) { new_fake_danger.include(described_class) } subject(:changelog) { fake_danger.new(git: fake_git, gitlab: fake_gitlab, helper: fake_helper) } - describe '#needed?' do + describe '#required?' do + subject { changelog.required? } + + context 'added files contain a migration' do + [ + 'db/migrate/20200000000000_new_migration.rb', + 'db/post_migrate/20200000000000_new_migration.rb' + ].each do |file_path| + let(:added_files) { [file_path] } + + it { is_expected.to be_truthy } + end + end + + context 'added files do not contain a migration' do + [ + 'app/models/model.rb', + 'app/assets/javascripts/file.js' + ].each do |file_path| + let(:added_files) { [file_path] } + + it { is_expected.to be_falsey } + end + end + end + + describe '#optional?' do let(:category_with_changelog) { :backend } let(:label_with_changelog) { 'frontend' } let(:category_without_changelog) { Gitlab::Danger::Changelog::NO_CHANGELOG_CATEGORIES.first } let(:label_without_changelog) { Gitlab::Danger::Changelog::NO_CHANGELOG_LABELS.first } - subject { changelog.needed? } + subject { changelog.optional? } context 'when MR contains only categories requiring no changelog' do let(:changes_by_category) { { category_without_changelog => nil } } @@ -121,4 +148,43 @@ RSpec.describe Gitlab::Danger::Changelog do it { is_expected.to be_falsy } end end + + describe '#modified_text' do + let(:sanitize_mr_title) { 'Fake Title' } + let(:mr_json) { { "iid" => 1234, "title" => sanitize_mr_title } } + + subject { changelog.modified_text } + + it do + expect(subject).to include('CHANGELOG.md was edited') + expect(subject).to include('bin/changelog -m 1234 "Fake Title"') + expect(subject).to include('bin/changelog --ee -m 1234 "Fake Title"') + end + end + + describe '#required_text' do + let(:sanitize_mr_title) { 'Fake Title' } + let(:mr_json) { { "iid" => 1234, "title" => sanitize_mr_title } } + + subject { changelog.required_text } + + it do + expect(subject).to include('CHANGELOG missing') + expect(subject).to include('bin/changelog -m 1234 "Fake Title"') + expect(subject).not_to include('--ee') + end + end + + describe 'optional_text' do + let(:sanitize_mr_title) { 'Fake Title' } + let(:mr_json) { { "iid" => 1234, "title" => sanitize_mr_title } } + + subject { changelog.optional_text } + + it do + expect(subject).to include('CHANGELOG missing') + expect(subject).to include('bin/changelog -m 1234 "Fake Title"') + expect(subject).to include('bin/changelog --ee -m 1234 "Fake Title"') + end + end end diff --git a/spec/lib/gitlab/danger/helper_spec.rb b/spec/lib/gitlab/danger/helper_spec.rb index e5018e46634..c7d55c396ef 100644 --- a/spec/lib/gitlab/danger/helper_spec.rb +++ b/spec/lib/gitlab/danger/helper_spec.rb @@ -76,6 +76,30 @@ RSpec.describe Gitlab::Danger::Helper do end end + describe '#changed_lines' do + subject { helper.changed_lines('changed_file.rb') } + + before do + allow(fake_git).to receive(:diff_for_file).with('changed_file.rb').and_return(diff) + end + + context 'when file has diff' do + let(:diff) { double(:diff, patch: "+ # New change here\n+ # New change there") } + + it 'returns file changes' do + is_expected.to eq(['+ # New change here', '+ # New change there']) + end + end + + context 'when file has no diff (renamed without changes)' do + let(:diff) { nil } + + it 'returns a blank array' do + is_expected.to eq([]) + end + end + end + describe "changed_files" do it 'returns list of changed files matching given regex' do expect(helper).to receive(:all_changed_files).and_return(%w[migration.rb usage_data.rb]) @@ -371,22 +395,6 @@ RSpec.describe Gitlab::Danger::Helper do end end - describe '#missing_database_labels' do - subject { helper.missing_database_labels(current_mr_labels) } - - context 'when current merge request has ~database::review pending' do - let(:current_mr_labels) { ['database::review pending', 'feature'] } - - it { is_expected.to match_array(['database']) } - end - - context 'when current merge request does not have ~database::review pending' do - let(:current_mr_labels) { ['feature'] } - - it { is_expected.to match_array(['database', 'database::review pending']) } - end - end - describe '#sanitize_mr_title' do where(:mr_title, :expected_mr_title) do 'My MR title' | 'My MR title' diff --git a/spec/lib/gitlab/danger/teammate_spec.rb b/spec/lib/gitlab/danger/teammate_spec.rb index 12819614fab..6fd32493d6b 100644 --- a/spec/lib/gitlab/danger/teammate_spec.rb +++ b/spec/lib/gitlab/danger/teammate_spec.rb @@ -170,47 +170,38 @@ RSpec.describe Gitlab::Danger::Teammate do end describe '#markdown_name' do - context 'when timezone_experiment == false' do - it 'returns markdown name as-is' do - expect(subject.markdown_name).to eq(options['markdown_name']) - expect(subject.markdown_name(timezone_experiment: false)).to eq(options['markdown_name']) - end + it 'returns markdown name with timezone info' do + expect(subject.markdown_name).to eq("#{options['markdown_name']} (UTC+2)") end - context 'when timezone_experiment == true' do - it 'returns markdown name with timezone info' do - expect(subject.markdown_name(timezone_experiment: true)).to eq("#{options['markdown_name']} (UTC+2)") - end - - context 'when offset is 1.5' do - let(:tz_offset_hours) { 1.5 } + context 'when offset is 1.5' do + let(:tz_offset_hours) { 1.5 } - it 'returns markdown name with timezone info, not truncated' do - expect(subject.markdown_name(timezone_experiment: true)).to eq("#{options['markdown_name']} (UTC+1.5)") - end + it 'returns markdown name with timezone info, not truncated' do + expect(subject.markdown_name).to eq("#{options['markdown_name']} (UTC+1.5)") end + end - context 'when author is given' do - where(:tz_offset_hours, :author_offset, :diff_text) do - -12 | -10 | "2 hours behind `@mario`" - -10 | -12 | "2 hours ahead of `@mario`" - -10 | 2 | "12 hours behind `@mario`" - 2 | 4 | "2 hours behind `@mario`" - 4 | 2 | "2 hours ahead of `@mario`" - 2 | 3 | "1 hour behind `@mario`" - 3 | 2 | "1 hour ahead of `@mario`" - 2 | 2 | "same timezone as `@mario`" - end + context 'when author is given' do + where(:tz_offset_hours, :author_offset, :diff_text) do + -12 | -10 | "2 hours behind `@mario`" + -10 | -12 | "2 hours ahead of `@mario`" + -10 | 2 | "12 hours behind `@mario`" + 2 | 4 | "2 hours behind `@mario`" + 4 | 2 | "2 hours ahead of `@mario`" + 2 | 3 | "1 hour behind `@mario`" + 3 | 2 | "1 hour ahead of `@mario`" + 2 | 2 | "same timezone as `@mario`" + end - with_them do - it 'returns markdown name with timezone info' do - author = described_class.new(options.merge('username' => 'mario', 'tz_offset_hours' => author_offset)) + with_them do + it 'returns markdown name with timezone info' do + author = described_class.new(options.merge('username' => 'mario', 'tz_offset_hours' => author_offset)) - floored_offset_hours = subject.__send__(:floored_offset_hours) - utc_offset = floored_offset_hours >= 0 ? "+#{floored_offset_hours}" : floored_offset_hours + floored_offset_hours = subject.__send__(:floored_offset_hours) + utc_offset = floored_offset_hours >= 0 ? "+#{floored_offset_hours}" : floored_offset_hours - expect(subject.markdown_name(timezone_experiment: true, author: author)).to eq("#{options['markdown_name']} (UTC#{utc_offset}, #{diff_text})") - end + expect(subject.markdown_name(author: author)).to eq("#{options['markdown_name']} (UTC#{utc_offset}, #{diff_text})") end end end |