diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-12-12 18:08:41 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-12-12 18:08:41 +0300 |
commit | 27859ed5eaeae234162b7cce7fd8bd351b5f9369 (patch) | |
tree | 5a62db348c3fd73516df87262c78e3546d4ec770 /spec/lib/gitlab/danger | |
parent | 784fae4b9d7e92350075df2a43d06893080ed1e6 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/lib/gitlab/danger')
-rw-r--r-- | spec/lib/gitlab/danger/changelog_spec.rb | 163 | ||||
-rw-r--r-- | spec/lib/gitlab/danger/danger_spec_helper.rb | 17 | ||||
-rw-r--r-- | spec/lib/gitlab/danger/helper_spec.rb | 17 |
3 files changed, 185 insertions, 12 deletions
diff --git a/spec/lib/gitlab/danger/changelog_spec.rb b/spec/lib/gitlab/danger/changelog_spec.rb new file mode 100644 index 00000000000..888094eaf6e --- /dev/null +++ b/spec/lib/gitlab/danger/changelog_spec.rb @@ -0,0 +1,163 @@ +# frozen_string_literal: true + +require 'fast_spec_helper' +require 'rspec-parameterized' +require_relative 'danger_spec_helper' + +require 'gitlab/danger/changelog' + +describe Gitlab::Danger::Changelog do + using RSpec::Parameterized::TableSyntax + include DangerSpecHelper + + let(:added_files) { nil } + let(:fake_git) { double('fake-git', added_files: added_files) } + + let(:mr_labels) { nil } + let(:mr_json) { nil } + let(:fake_gitlab) { double('fake-gitlab', mr_labels: mr_labels, mr_json: mr_json) } + + let(:changes_by_category) { nil } + let(:ee?) { false } + let(:fake_helper) { double('fake-helper', changes_by_category: changes_by_category, 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 + subject { changelog.needed? } + + [ + { docs: nil }, + { none: nil }, + { docs: nil, none: nil } + ].each do |categories| + let(:changes_by_category) { categories } + it "is falsy when categories don't require a changelog" do + is_expected.to be_falsy + end + end + + where(:categories, :labels) do + { backend: nil } | %w[backend backstage] + { frontend: nil, docs: nil } | ['ci-build'] + { engineering_productivity: nil, none: nil } | ['meta'] + end + + with_them do + let(:changes_by_category) { categories } + let(:mr_labels) { labels } + + it "is falsy when labels require no changelog" do + is_expected.to be_falsy + end + end + + where(:categories, :labels) do + { frontend: nil, docs: nil } | ['database::review pending', 'feature'] + { backend: nil } | ['backend', 'technical debt'] + { engineering_productivity: nil, none: nil } | ['frontend'] + end + + with_them do + let(:changes_by_category) { categories } + let(:mr_labels) { labels } + + it "is truthy when categories and labels require a changelog" do + is_expected.to be_truthy + end + end + end + + describe '#found' do + subject { changelog.found } + + context 'added files contain a changelog' do + [ + 'changelogs/unreleased/entry.md', + 'ee/changelogs/unreleased/entry.md', + 'changelogs/unreleased-ee/entry.md', + 'ee/changelogs/unreleased-ee/entry.md' + ].each do |file_path| + let(:added_files) { [file_path] } + + it { is_expected.to be_truthy } + end + end + + context 'added files do not contain a changelog' do + [ + 'app/models/model.rb', + 'app/assets/javascripts/file.js' + ].each do |file_path| + let(:added_files) { [file_path] } + it { is_expected.to eq(nil) } + end + end + end + + describe '#presented_no_changelog_labels' do + subject { changelog.presented_no_changelog_labels } + + it 'returns the labels formatted' do + is_expected.to eq('~backstage, ~ci-build, ~meta') + end + end + + describe '#sanitized_mr_title' do + subject { changelog.sanitized_mr_title } + + [ + 'WIP: My MR title', + 'My MR title' + ].each do |mr_title| + let(:mr_json) { { "title" => mr_title } } + it { is_expected.to eq("My MR title") } + end + end + + describe '#ee_changelog?' do + context 'is ee changelog' do + [ + 'changelogs/unreleased-ee/entry.md', + 'ee/changelogs/unreleased-ee/entry.md' + ].each do |file_path| + subject { changelog.ee_changelog?(file_path) } + + it { is_expected.to be_truthy } + end + end + + context 'is not ee changelog' do + [ + 'changelogs/unreleased/entry.md', + 'ee/changelogs/unreleased/entry.md' + ].each do |file_path| + subject { changelog.ee_changelog?(file_path) } + + it { is_expected.to be_falsy } + end + end + end + + describe '#ce_port_changelog?' do + where(:helper_ee?, :file_path, :expected) do + true | 'changelogs/unreleased-ee/entry.md' | false + true | 'ee/changelogs/unreleased-ee/entry.md' | false + false | 'changelogs/unreleased-ee/entry.md' | false + false | 'ee/changelogs/unreleased-ee/entry.md' | false + true | 'changelogs/unreleased/entry.md' | true + true | 'ee/changelogs/unreleased/entry.md' | true + false | 'changelogs/unreleased/entry.md' | false + false | 'ee/changelogs/unreleased/entry.md' | false + end + + with_them do + let(:ee?) { helper_ee? } + subject { changelog.ce_port_changelog?(file_path) } + + it { is_expected.to eq(expected) } + end + end +end diff --git a/spec/lib/gitlab/danger/danger_spec_helper.rb b/spec/lib/gitlab/danger/danger_spec_helper.rb new file mode 100644 index 00000000000..b1e84b3c13d --- /dev/null +++ b/spec/lib/gitlab/danger/danger_spec_helper.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module DangerSpecHelper + def new_fake_danger + Class.new do + attr_reader :git, :gitlab, :helper + + # rubocop:disable Gitlab/ModuleWithInstanceVariables + def initialize(git: nil, gitlab: nil, helper: nil) + @git = git + @gitlab = gitlab + @helper = helper + end + # rubocop:enable Gitlab/ModuleWithInstanceVariables + end + end +end diff --git a/spec/lib/gitlab/danger/helper_spec.rb b/spec/lib/gitlab/danger/helper_spec.rb index 8056418e697..d7e67444fca 100644 --- a/spec/lib/gitlab/danger/helper_spec.rb +++ b/spec/lib/gitlab/danger/helper_spec.rb @@ -2,29 +2,22 @@ require 'fast_spec_helper' require 'rspec-parameterized' +require_relative 'danger_spec_helper' require 'gitlab/danger/helper' describe Gitlab::Danger::Helper do using RSpec::Parameterized::TableSyntax - - class FakeDanger - include Gitlab::Danger::Helper - - attr_reader :git, :gitlab - - def initialize(git:, gitlab:) - @git = git - @gitlab = gitlab - end - end + include DangerSpecHelper let(:fake_git) { double('fake-git') } let(:mr_author) { nil } let(:fake_gitlab) { double('fake-gitlab', mr_author: mr_author) } - subject(:helper) { FakeDanger.new(git: fake_git, gitlab: fake_gitlab) } + let(:fake_danger) { new_fake_danger.include(described_class) } + + subject(:helper) { fake_danger.new(git: fake_git, gitlab: fake_gitlab) } describe '#gitlab_helper' do context 'when gitlab helper is not available' do |