130 lines
3.3 KiB
Ruby
130 lines
3.3 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
require 'spec_helper'
|
||
|
|
||
|
RSpec.describe Gitlab::Changelog::Release do
|
||
|
describe '#to_markdown' do
|
||
|
let(:config) { Gitlab::Changelog::Config.new(build_stubbed(:project)) }
|
||
|
let(:commit) { build_stubbed(:commit) }
|
||
|
let(:author) { build_stubbed(:user) }
|
||
|
let(:mr) { build_stubbed(:merge_request) }
|
||
|
let(:release) do
|
||
|
described_class
|
||
|
.new(version: '1.0.0', date: Time.utc(2021, 1, 5), config: config)
|
||
|
end
|
||
|
|
||
|
context 'when there are no entries' do
|
||
|
it 'includes a notice about the lack of entries' do
|
||
|
expect(release.to_markdown).to eq(<<~OUT)
|
||
|
## 1.0.0 (2021-01-05)
|
||
|
|
||
|
No changes.
|
||
|
|
||
|
OUT
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'when all data is present' do
|
||
|
it 'includes all data' do
|
||
|
allow(config).to receive(:contributor?).with(author).and_return(true)
|
||
|
|
||
|
release.add_entry(
|
||
|
title: 'Entry title',
|
||
|
commit: commit,
|
||
|
category: 'fixed',
|
||
|
author: author,
|
||
|
merge_request: mr
|
||
|
)
|
||
|
|
||
|
expect(release.to_markdown).to eq(<<~OUT)
|
||
|
## 1.0.0 (2021-01-05)
|
||
|
|
||
|
### fixed (1 change)
|
||
|
|
||
|
- [Entry title](#{commit.to_reference(full: true)}) \
|
||
|
by #{author.to_reference(full: true)} \
|
||
|
([merge request](#{mr.to_reference(full: true)}))
|
||
|
|
||
|
OUT
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'when no merge request is present' do
|
||
|
it "doesn't include a merge request link" do
|
||
|
allow(config).to receive(:contributor?).with(author).and_return(true)
|
||
|
|
||
|
release.add_entry(
|
||
|
title: 'Entry title',
|
||
|
commit: commit,
|
||
|
category: 'fixed',
|
||
|
author: author
|
||
|
)
|
||
|
|
||
|
expect(release.to_markdown).to eq(<<~OUT)
|
||
|
## 1.0.0 (2021-01-05)
|
||
|
|
||
|
### fixed (1 change)
|
||
|
|
||
|
- [Entry title](#{commit.to_reference(full: true)}) \
|
||
|
by #{author.to_reference(full: true)}
|
||
|
|
||
|
OUT
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'when the author is not a contributor' do
|
||
|
it "doesn't include the author" do
|
||
|
allow(config).to receive(:contributor?).with(author).and_return(false)
|
||
|
|
||
|
release.add_entry(
|
||
|
title: 'Entry title',
|
||
|
commit: commit,
|
||
|
category: 'fixed',
|
||
|
author: author
|
||
|
)
|
||
|
|
||
|
expect(release.to_markdown).to eq(<<~OUT)
|
||
|
## 1.0.0 (2021-01-05)
|
||
|
|
||
|
### fixed (1 change)
|
||
|
|
||
|
- [Entry title](#{commit.to_reference(full: true)})
|
||
|
|
||
|
OUT
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'when a category has no entries' do
|
||
|
it "isn't included in the output" do
|
||
|
config.categories['kittens'] = 'Kittens'
|
||
|
config.categories['fixed'] = 'Bug fixes'
|
||
|
|
||
|
release.add_entry(
|
||
|
title: 'Entry title',
|
||
|
commit: commit,
|
||
|
category: 'fixed'
|
||
|
)
|
||
|
|
||
|
expect(release.to_markdown).to eq(<<~OUT)
|
||
|
## 1.0.0 (2021-01-05)
|
||
|
|
||
|
### Bug fixes (1 change)
|
||
|
|
||
|
- [Entry title](#{commit.to_reference(full: true)})
|
||
|
|
||
|
OUT
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#header_start_position' do
|
||
|
it 'returns a regular expression for finding the start of a release section' do
|
||
|
config = Gitlab::Changelog::Config.new(build_stubbed(:project))
|
||
|
release = described_class
|
||
|
.new(version: '1.0.0', date: Time.utc(2021, 1, 5), config: config)
|
||
|
|
||
|
expect(release.header_start_pattern).to eq(/^##\s*1\.0\.0/)
|
||
|
end
|
||
|
end
|
||
|
end
|