spec/unit/changelog_spec.rb (47 lines of code) (raw):
require "spec_helper"
module Omnibus
describe ChangeLog do
describe "#new" do
it "sets the start_ref to the latest tag if none is set" do
repo = double(GitRepository, latest_tag: "1.0")
expect(ChangeLog.new(nil, "2.0", repo).start_ref).to eq("1.0")
end
it "sets the end_ref to HEAD if none is set" do
expect(ChangeLog.new.end_ref).to eq("HEAD")
end
end
describe "#changelog_entries" do
it "returns any git log lines with the ChangeLog: tag, removing the tag" do
repo = double(GitRepository, commit_messages: ["ChangeLog-Entry: foobar\n",
"ChangeLog-Entry: wombat\n"])
changelog = ChangeLog.new("0.0.1", "0.0.2", repo)
expect(changelog.changelog_entries).to eq(%W{foobar\n wombat\n})
end
it "returns an empty array if there were no changelog entries" do
repo = double(GitRepository, commit_messages: [])
changelog = ChangeLog.new("0.0.1", "0.0.2", repo)
expect(changelog.changelog_entries).to eq([])
end
it "does not return git messages without a ChangeLog: tag" do
repo = double(GitRepository, commit_messages: %W{foobar\n wombat\n})
changelog = ChangeLog.new("0.0.1", "0.0.2", repo)
expect(changelog.changelog_entries).to eq([])
end
it "does not return blank lines" do
repo = double(GitRepository, commit_messages: %W{\n \n})
changelog = ChangeLog.new("0.0.1", "0.0.2", repo)
expect(changelog.changelog_entries).to eq([])
end
it "can handle multi-line ChangeLog entries" do
repo = double(GitRepository, commit_messages: ["ChangeLog-Entry: foobar\n", "foobaz\n"])
changelog = ChangeLog.new("0.0.1", "0.0.2", repo)
expect(changelog.changelog_entries).to eq(["foobar\nfoobaz\n"])
end
it "end a ChangeLog entry at the first blank line" do
repo = double(GitRepository, commit_messages: ["ChangeLog-Entry: foobar\n", "\n", "foobaz\n"])
changelog = ChangeLog.new("0.0.1", "0.0.2", repo)
expect(changelog.changelog_entries).to eq(["foobar\n"])
end
end
end
end