mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00

- The `RSpec/BeEq` auto-corrections made more `RSpec/BeNil` offenses, so another go of `brew style --only=RSpec/BeNil --fix\` is needed.
101 lines
3.5 KiB
Ruby
101 lines
3.5 KiB
Ruby
# typed: false
|
|
# frozen_string_literal: true
|
|
|
|
require "utils/git_repository"
|
|
|
|
describe Utils do
|
|
shared_examples "git_repository helper function" do |method_name|
|
|
context "when directory is not a Git repository" do
|
|
it "returns nil if `safe` parameter is `false`" do
|
|
expect(described_class.public_send(method_name, TEST_TMPDIR, safe: false)).to be_nil
|
|
end
|
|
|
|
it "raises an error if `safe` parameter is `true`" do
|
|
expect { described_class.public_send(method_name, TEST_TMPDIR, safe: true) }
|
|
.to raise_error("Not a Git repository: #{TEST_TMPDIR}")
|
|
end
|
|
end
|
|
|
|
context "when Git is unavailable" do
|
|
before do
|
|
allow(Utils::Git).to receive(:available?).and_return(false)
|
|
end
|
|
|
|
it "returns nil if `safe` parameter is `false`" do
|
|
expect(described_class.public_send(method_name, HOMEBREW_CACHE, safe: false)).to be_nil
|
|
end
|
|
|
|
it "raises an error if `safe` parameter is `true`" do
|
|
expect { described_class.public_send(method_name, HOMEBREW_CACHE, safe: true) }
|
|
.to raise_error("Git is unavailable")
|
|
end
|
|
end
|
|
end
|
|
|
|
before do
|
|
HOMEBREW_CACHE.cd do
|
|
system "git", "init"
|
|
Pathname("README.md").write("README")
|
|
system "git", "add", "README.md"
|
|
system "git", "commit", "-m", commit_message
|
|
system "git", "checkout", "-b", branch_name
|
|
end
|
|
end
|
|
|
|
let(:commit_message) { "File added" }
|
|
let(:branch_name) { "test-branch" }
|
|
|
|
let(:head_revision) { HOMEBREW_CACHE.cd { `git rev-parse HEAD`.chomp } }
|
|
let(:short_head_revision) { HOMEBREW_CACHE.cd { `git rev-parse --short HEAD`.chomp } }
|
|
|
|
describe "::git_head" do
|
|
it "returns the revision at HEAD" do
|
|
expect(described_class.git_head(HOMEBREW_CACHE)).to eq(head_revision)
|
|
expect(described_class.git_head(HOMEBREW_CACHE, length: 5)).to eq(head_revision[0...5])
|
|
HOMEBREW_CACHE.cd do
|
|
expect(described_class.git_head).to eq(head_revision)
|
|
expect(described_class.git_head(length: 5)).to eq(head_revision[0...5])
|
|
end
|
|
end
|
|
|
|
include_examples "git_repository helper function", :git_head
|
|
end
|
|
|
|
describe "::git_short_head" do
|
|
it "returns the short revision at HEAD" do
|
|
expect(described_class.git_short_head(HOMEBREW_CACHE)).to eq(short_head_revision)
|
|
expect(described_class.git_short_head(HOMEBREW_CACHE, length: 5)).to eq(head_revision[0...5])
|
|
HOMEBREW_CACHE.cd do
|
|
expect(described_class.git_short_head).to eq(short_head_revision)
|
|
expect(described_class.git_short_head(length: 5)).to eq(head_revision[0...5])
|
|
end
|
|
end
|
|
|
|
include_examples "git_repository helper function", :git_short_head
|
|
end
|
|
|
|
describe "::git_branch" do
|
|
include_examples "git_repository helper function", :git_branch
|
|
|
|
it "returns the current Git branch" do
|
|
expect(described_class.git_branch(HOMEBREW_CACHE)).to eq(branch_name)
|
|
HOMEBREW_CACHE.cd do
|
|
expect(described_class.git_branch).to eq(branch_name)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "::git_commit_message" do
|
|
include_examples "git_repository helper function", :git_commit_message
|
|
|
|
it "returns the commit message of HEAD" do
|
|
expect(described_class.git_commit_message(HOMEBREW_CACHE)).to eq(commit_message)
|
|
expect(described_class.git_commit_message(HOMEBREW_CACHE, commit: head_revision)).to eq(commit_message)
|
|
HOMEBREW_CACHE.cd do
|
|
expect(described_class.git_commit_message).to eq(commit_message)
|
|
expect(described_class.git_commit_message(commit: head_revision)).to eq(commit_message)
|
|
end
|
|
end
|
|
end
|
|
end
|