summaryrefslogtreecommitdiff
path: root/spec/services/repositories
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-03-16 18:18:33 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-03-16 18:18:33 +0000
commitf64a639bcfa1fc2bc89ca7db268f594306edfd7c (patch)
treea2c3c2ebcc3b45e596949db485d6ed18ffaacfa1 /spec/services/repositories
parentbfbc3e0d6583ea1a91f627528bedc3d65ba4b10f (diff)
downloadgitlab-ce-f64a639bcfa1fc2bc89ca7db268f594306edfd7c.tar.gz
Add latest changes from gitlab-org/gitlab@13-10-stable-eev13.10.0-rc40
Diffstat (limited to 'spec/services/repositories')
-rw-r--r--spec/services/repositories/changelog_service_spec.rb118
1 files changed, 89 insertions, 29 deletions
diff --git a/spec/services/repositories/changelog_service_spec.rb b/spec/services/repositories/changelog_service_spec.rb
index a545b0f070a..dab38445ccf 100644
--- a/spec/services/repositories/changelog_service_spec.rb
+++ b/spec/services/repositories/changelog_service_spec.rb
@@ -4,48 +4,64 @@ require 'spec_helper'
RSpec.describe Repositories::ChangelogService do
describe '#execute' do
- it 'generates and commits a changelog section' do
- project = create(:project, :empty_repo)
- creator = project.creator
- author1 = create(:user)
- author2 = create(:user)
-
- project.add_maintainer(author1)
- project.add_maintainer(author2)
-
- mr1 = create(:merge_request, :merged, target_project: project)
- mr2 = create(:merge_request, :merged, target_project: project)
-
- # The range of commits ignores the first commit, but includes the last
- # commit. To ensure both the commits below are included, we must create an
- # extra commit.
- #
- # In the real world, the start commit of the range will be the last commit
- # of the previous release, so ignoring that is expected and desired.
- sha1 = create_commit(
+ let!(:project) { create(:project, :empty_repo) }
+ let!(:creator) { project.creator }
+ let!(:author1) { create(:user) }
+ let!(:author2) { create(:user) }
+ let!(:mr1) { create(:merge_request, :merged, target_project: project) }
+ let!(:mr2) { create(:merge_request, :merged, target_project: project) }
+
+ # The range of commits ignores the first commit, but includes the last
+ # commit. To ensure both the commits below are included, we must create an
+ # extra commit.
+ #
+ # In the real world, the start commit of the range will be the last commit
+ # of the previous release, so ignoring that is expected and desired.
+ let!(:sha1) do
+ create_commit(
project,
creator,
commit_message: 'Initial commit',
actions: [{ action: 'create', content: 'test', file_path: 'README.md' }]
)
+ end
+
+ let!(:sha2) do
+ project.add_maintainer(author1)
- sha2 = create_commit(
+ create_commit(
project,
author1,
commit_message: "Title 1\n\nChangelog: feature",
actions: [{ action: 'create', content: 'foo', file_path: 'a.txt' }]
)
+ end
+
+ let!(:sha3) do
+ project.add_maintainer(author2)
- sha3 = create_commit(
+ create_commit(
project,
author2,
commit_message: "Title 2\n\nChangelog: feature",
actions: [{ action: 'create', content: 'bar', file_path: 'b.txt' }]
)
+ end
- commit1 = project.commit(sha2)
- commit2 = project.commit(sha3)
+ let!(:sha4) do
+ create_commit(
+ project,
+ author2,
+ commit_message: "Title 3\n\nChangelog: feature",
+ actions: [{ action: 'create', content: 'bar', file_path: 'c.txt' }]
+ )
+ end
+ let!(:commit1) { project.commit(sha2) }
+ let!(:commit2) { project.commit(sha3) }
+ let!(:commit3) { project.commit(sha4) }
+
+ it 'generates and commits a changelog section' do
allow(MergeRequestDiffCommit)
.to receive(:oldest_merge_request_id_per_commit)
.with(project.id, [commit2.id, commit1.id])
@@ -54,16 +70,60 @@ RSpec.describe Repositories::ChangelogService do
{ sha: sha3, merge_request_id: mr2.id }
])
- recorder = ActiveRecord::QueryRecorder.new do
- described_class
- .new(project, creator, version: '1.0.0', from: sha1, to: sha3)
- .execute
- end
+ service = described_class
+ .new(project, creator, version: '1.0.0', from: sha1, to: sha3)
+
+ recorder = ActiveRecord::QueryRecorder.new { service.execute }
+ changelog = project.repository.blob_at('master', 'CHANGELOG.md')&.data
+
+ expect(recorder.count).to eq(11)
+ expect(changelog).to include('Title 1', 'Title 2')
+ end
+
+ it "ignores a commit when it's both added and reverted in the same range" do
+ create_commit(
+ project,
+ author2,
+ commit_message: "Title 4\n\nThis reverts commit #{sha4}",
+ actions: [{ action: 'create', content: 'bar', file_path: 'd.txt' }]
+ )
+
+ described_class
+ .new(project, creator, version: '1.0.0', from: sha1)
+ .execute
changelog = project.repository.blob_at('master', 'CHANGELOG.md')&.data
- expect(recorder.count).to eq(10)
expect(changelog).to include('Title 1', 'Title 2')
+ expect(changelog).not_to include('Title 3', 'Title 4')
+ end
+
+ it 'includes a revert commit when it has a trailer' do
+ create_commit(
+ project,
+ author2,
+ commit_message: "Title 4\n\nThis reverts commit #{sha4}\n\nChangelog: added",
+ actions: [{ action: 'create', content: 'bar', file_path: 'd.txt' }]
+ )
+
+ described_class
+ .new(project, creator, version: '1.0.0', from: sha1)
+ .execute
+
+ changelog = project.repository.blob_at('master', 'CHANGELOG.md')&.data
+
+ expect(changelog).to include('Title 1', 'Title 2', 'Title 4')
+ expect(changelog).not_to include('Title 3')
+ end
+
+ it 'uses the target branch when "to" is unspecified' do
+ described_class
+ .new(project, creator, version: '1.0.0', from: sha1)
+ .execute
+
+ changelog = project.repository.blob_at('master', 'CHANGELOG.md')&.data
+
+ expect(changelog).to include('Title 1', 'Title 2', 'Title 3')
end
end