DRY up the tests and address Rubocop feedback
Signed-off-by: Tom Duffield <tom@chef.io>
This commit is contained in:
parent
d6c26ef4a9
commit
66177c58e3
|
@ -23,7 +23,8 @@ module GitHubChangelogGenerator
|
||||||
# @param [Array] all_tags is the list of all tags ordered from newest -> oldest
|
# @param [Array] all_tags is the list of all tags ordered from newest -> oldest
|
||||||
# @return [Hash] key is the tag to output, value is an array of [Left Tag, Right Tag]
|
# @return [Hash] key is the tag to output, value is an array of [Left Tag, Right Tag]
|
||||||
# PRs to include in this section will be >= [Left Tag Date] and <= [Right Tag Date]
|
# PRs to include in this section will be >= [Left Tag Date] and <= [Right Tag Date]
|
||||||
def build_tag_section_mapping(filtered_tags, all_tags)
|
# rubocop:disable Style/For - for allows us to be more concise
|
||||||
|
def build_tag_section_mapping(filtered_tags, _all_tags)
|
||||||
tag_mapping = {}
|
tag_mapping = {}
|
||||||
for i in 0..(filtered_tags.length - 1)
|
for i in 0..(filtered_tags.length - 1)
|
||||||
tag = filtered_tags[i]
|
tag = filtered_tags[i]
|
||||||
|
@ -39,6 +40,7 @@ module GitHubChangelogGenerator
|
||||||
end
|
end
|
||||||
tag_mapping
|
tag_mapping
|
||||||
end
|
end
|
||||||
|
# rubocop:enable Style/For
|
||||||
|
|
||||||
# Sort all tags by date, newest to oldest
|
# Sort all tags by date, newest to oldest
|
||||||
def sort_tags_by_date(tags)
|
def sort_tags_by_date(tags)
|
||||||
|
|
|
@ -16,108 +16,109 @@ describe GitHubChangelogGenerator::Generator do
|
||||||
describe "#build_tag_section_mapping" do
|
describe "#build_tag_section_mapping" do
|
||||||
let(:sorted_tags) { tags_from_strings(%w(8 7 6 5 4 3 2 1)) }
|
let(:sorted_tags) { tags_from_strings(%w(8 7 6 5 4 3 2 1)) }
|
||||||
let(:filtered_tags) { generator.get_filtered_tags(sorted_tags) }
|
let(:filtered_tags) { generator.get_filtered_tags(sorted_tags) }
|
||||||
|
let(:options) { {} }
|
||||||
|
let(:generator) { GitHubChangelogGenerator::Generator.new(options) }
|
||||||
|
|
||||||
subject do
|
subject do
|
||||||
generator.build_tag_section_mapping(filtered_tags, sorted_tags)
|
generator.build_tag_section_mapping(filtered_tags, sorted_tags)
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with no constraints" do
|
shared_examples_for "a section mapping" do
|
||||||
let(:generator) { GitHubChangelogGenerator::Generator.new() }
|
it { is_expected.to be_a(Hash) }
|
||||||
|
it { is_expected.to eq(expected_mapping) }
|
||||||
|
end
|
||||||
|
|
||||||
|
shared_examples_for "a full changelog" do
|
||||||
let(:expected_mapping) do
|
let(:expected_mapping) do
|
||||||
{
|
{
|
||||||
tag_with_name('8') => [tag_with_name('7'), tag_with_name('8')],
|
tag_with_name("8") => [tag_with_name("7"), tag_with_name("8")],
|
||||||
tag_with_name('7') => [tag_with_name('6'), tag_with_name('7')],
|
tag_with_name("7") => [tag_with_name("6"), tag_with_name("7")],
|
||||||
tag_with_name('6') => [tag_with_name('5'), tag_with_name('6')],
|
tag_with_name("6") => [tag_with_name("5"), tag_with_name("6")],
|
||||||
tag_with_name('5') => [tag_with_name('4'), tag_with_name('5')],
|
tag_with_name("5") => [tag_with_name("4"), tag_with_name("5")],
|
||||||
tag_with_name('4') => [tag_with_name('3'), tag_with_name('4')],
|
tag_with_name("4") => [tag_with_name("3"), tag_with_name("4")],
|
||||||
tag_with_name('3') => [tag_with_name('2'), tag_with_name('3')],
|
tag_with_name("3") => [tag_with_name("2"), tag_with_name("3")],
|
||||||
tag_with_name('2') => [tag_with_name('1'), tag_with_name('2')],
|
tag_with_name("2") => [tag_with_name("1"), tag_with_name("2")],
|
||||||
tag_with_name('1') => [nil, tag_with_name('1')]
|
tag_with_name("1") => [nil, tag_with_name("1")]
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
it { is_expected.to be_a(Hash) }
|
it_behaves_like "a section mapping"
|
||||||
it { is_expected.to eq(expected_mapping) }
|
end
|
||||||
|
|
||||||
|
context "with no constraints" do
|
||||||
|
it_behaves_like "a full changelog"
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with between tags only" do
|
context "with between tags only" do
|
||||||
let(:generator) { GitHubChangelogGenerator::Generator.new(between_tags: %w(3 5 8)) }
|
let(:options) { { between_tags: %w(3 5 8) } }
|
||||||
|
|
||||||
let(:expected_mapping) do
|
let(:expected_mapping) do
|
||||||
{
|
{
|
||||||
tag_with_name('8') => [tag_with_name('5'), tag_with_name('8')],
|
tag_with_name("8") => [tag_with_name("5"), tag_with_name("8")],
|
||||||
tag_with_name('5') => [tag_with_name('3'), tag_with_name('5')]
|
tag_with_name("5") => [tag_with_name("3"), tag_with_name("5")]
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
it { is_expected.to be_a(Hash) }
|
it_behaves_like "a section mapping"
|
||||||
it { is_expected.to eq(expected_mapping) }
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with since only" do
|
context "with since only" do
|
||||||
let(:generator) { GitHubChangelogGenerator::Generator.new(since_tag: '6') }
|
let(:options) { { since_tag: "6" } }
|
||||||
let(:expected_mapping) do
|
let(:expected_mapping) do
|
||||||
{
|
{
|
||||||
tag_with_name('8') => [tag_with_name('7'), tag_with_name('8')],
|
tag_with_name("8") => [tag_with_name("7"), tag_with_name("8")],
|
||||||
tag_with_name('7') => [tag_with_name('6'), tag_with_name('7')]
|
tag_with_name("7") => [tag_with_name("6"), tag_with_name("7")]
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
it { is_expected.to be_a(Hash) }
|
it_behaves_like "a section mapping"
|
||||||
it { is_expected.to eq(expected_mapping) }
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with due only" do
|
context "with due only" do
|
||||||
let(:generator) { GitHubChangelogGenerator::Generator.new(due_tag: '4') }
|
let(:options) { { due_tag: "4" } }
|
||||||
let(:expected_mapping) do
|
let(:expected_mapping) do
|
||||||
{
|
{
|
||||||
tag_with_name('3') => [tag_with_name('2'), tag_with_name('3')],
|
tag_with_name("3") => [tag_with_name("2"), tag_with_name("3")],
|
||||||
tag_with_name('2') => [tag_with_name('1'), tag_with_name('2')],
|
tag_with_name("2") => [tag_with_name("1"), tag_with_name("2")],
|
||||||
tag_with_name('1') => [nil, tag_with_name('1')]
|
tag_with_name("1") => [nil, tag_with_name("1")]
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
it { is_expected.to be_a(Hash) }
|
it_behaves_like "a section mapping"
|
||||||
it { is_expected.to eq(expected_mapping) }
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with since and due" do
|
context "with since and due" do
|
||||||
let(:generator) { GitHubChangelogGenerator::Generator.new(since_tag: '2', due_tag: '5') }
|
let(:options) { { since_tag: "2", due_tag: "5" } }
|
||||||
let(:expected_mapping) do
|
let(:expected_mapping) do
|
||||||
{
|
{
|
||||||
tag_with_name('4') => [tag_with_name('3'), tag_with_name('4')],
|
tag_with_name("4") => [tag_with_name("3"), tag_with_name("4")],
|
||||||
tag_with_name('3') => [tag_with_name('2'), tag_with_name('3')]
|
tag_with_name("3") => [tag_with_name("2"), tag_with_name("3")]
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
it { is_expected.to be_a(Hash) }
|
it_behaves_like "a section mapping"
|
||||||
it { is_expected.to eq(expected_mapping) }
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with since, due, and between_tags" do
|
context "with since, due, and between_tags" do
|
||||||
let(:generator) { GitHubChangelogGenerator::Generator.new(since_tag: '2', due_tag: '7', between_tags: %w(3 5 6)) }
|
let(:options) { { since_tag: "2", due_tag: "7", between_tags: %w(3 5 6) } }
|
||||||
let(:expected_mapping) do
|
let(:expected_mapping) do
|
||||||
{
|
{
|
||||||
tag_with_name('6') => [tag_with_name('5'), tag_with_name('6')],
|
tag_with_name("6") => [tag_with_name("5"), tag_with_name("6")],
|
||||||
tag_with_name('5') => [tag_with_name('3'), tag_with_name('5')]
|
tag_with_name("5") => [tag_with_name("3"), tag_with_name("5")]
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
it { is_expected.to be_a(Hash) }
|
it_behaves_like "a section mapping"
|
||||||
it { is_expected.to eq(expected_mapping) }
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with conflicting since/due/between_tags" do
|
context "with conflicting since/due/between_tags" do
|
||||||
let(:generator) { GitHubChangelogGenerator::Generator.new(since_tag: '2', due_tag: '7', between_tags: %w(1 3 6 8)) }
|
let(:options) { { since_tag: "2", due_tag: "7", between_tags: %w(1 3 6 8) } }
|
||||||
let(:expected_mapping) do
|
let(:expected_mapping) do
|
||||||
{
|
{
|
||||||
tag_with_name('6') => [tag_with_name('3'), tag_with_name('6')]
|
tag_with_name("6") => [tag_with_name("3"), tag_with_name("6")]
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
it { is_expected.to be_a(Hash) }
|
it_behaves_like "a section mapping"
|
||||||
it { is_expected.to eq(expected_mapping) }
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -133,6 +134,7 @@ describe GitHubChangelogGenerator::Generator do
|
||||||
it { is_expected.to be_a(Array) }
|
it { is_expected.to be_a(Array) }
|
||||||
it { is_expected.to match_array(tags_from_strings(%w(1 2 3))) }
|
it { is_expected.to match_array(tags_from_strings(%w(1 2 3))) }
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when between_tags same as input array" do
|
context "when between_tags same as input array" do
|
||||||
before do
|
before do
|
||||||
@generator = GitHubChangelogGenerator::Generator.new(between_tags: %w(1 2 3))
|
@generator = GitHubChangelogGenerator::Generator.new(between_tags: %w(1 2 3))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user