brew/Library/Homebrew/test/rubocops/homepage_spec.rb
Douglas Eichelberger 9075cbae62 brew style --fix
2023-04-21 09:58:50 -07:00

178 lines
5.9 KiB
Ruby

# frozen_string_literal: true
require "rubocops/homepage"
describe RuboCop::Cop::FormulaAudit::Homepage do
subject(:cop) { described_class.new }
context "when auditing homepage" do
it "reports an offense when there is no homepage" do
expect_offense(<<~RUBY)
class Foo < Formula
^^^^^^^^^^^^^^^^^^^ FormulaAudit/Homepage: Formula should have a homepage.
url 'https://brew.sh/foo-1.0.tgz'
end
RUBY
end
it "reports an offense when the homepage is not HTTP or HTTPS" do
expect_offense(<<~RUBY)
class Foo < Formula
homepage "ftp://brew.sh/foo"
^^^^^^^^^^^^^^^^^^^ FormulaAudit/Homepage: The homepage should start with http or https.
url "https://brew.sh/foo-1.0.tgz"
end
RUBY
end
it "reports an offense for freedesktop.org wiki pages" do
expect_offense(<<~RUBY)
class Foo < Formula
homepage "http://www.freedesktop.org/wiki/bar"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/Homepage: Freedesktop homepages should be styled `https://wiki.freedesktop.org/project_name`
url "https://brew.sh/foo-1.0.tgz"
end
RUBY
end
it "reports an offense for freedesktop.org software wiki pages" do
expect_offense(<<~RUBY)
class Foo < Formula
homepage "http://www.freedesktop.org/wiki/Software/baz"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/Homepage: Freedesktop homepages should be styled `https://wiki.freedesktop.org/www/Software/project_name`
url "https://brew.sh/foo-1.0.tgz"
end
RUBY
end
it "reports and corrects Google Code homepages" do
expect_offense(<<~RUBY)
class Foo < Formula
homepage "https://code.google.com/p/qux"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/Homepage: Google Code homepages should end with a slash
url "https://brew.sh/foo-1.0.tgz"
end
RUBY
expect_correction(<<~RUBY)
class Foo < Formula
homepage "https://code.google.com/p/qux/"
url "https://brew.sh/foo-1.0.tgz"
end
RUBY
end
it "reports and corrects GitHub homepages" do
expect_offense(<<~RUBY)
class Foo < Formula
homepage "https://github.com/foo/bar.git"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/Homepage: GitHub homepages should not end with .git
url "https://brew.sh/foo-1.0.tgz"
end
RUBY
expect_correction(<<~RUBY)
class Foo < Formula
homepage "https://github.com/foo/bar"
url "https://brew.sh/foo-1.0.tgz"
end
RUBY
end
describe "for Sourceforge" do
correct_formula = <<~RUBY
class Foo < Formula
homepage "https://foo.sourceforge.io/"
url "https://brew.sh/foo-1.0.tgz"
end
RUBY
it "reports and corrects [1]" do
expect_offense(<<~RUBY)
class Foo < Formula
homepage "http://foo.sourceforge.net/"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/Homepage: Sourceforge homepages should be `https://foo.sourceforge.io/`
url "https://brew.sh/foo-1.0.tgz"
end
RUBY
expect_correction(correct_formula)
end
it "reports and corrects [2]" do
expect_offense(<<~RUBY)
class Foo < Formula
homepage "http://foo.sourceforge.net"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/Homepage: Sourceforge homepages should be `https://foo.sourceforge.io/`
url "https://brew.sh/foo-1.0.tgz"
end
RUBY
expect_correction(correct_formula)
end
it "reports and corrects [3]" do
expect_offense(<<~RUBY)
class Foo < Formula
homepage "http://foo.sf.net/"
^^^^^^^^^^^^^^^^^^^^ FormulaAudit/Homepage: Sourceforge homepages should be `https://foo.sourceforge.io/`
url "https://brew.sh/foo-1.0.tgz"
end
RUBY
expect_correction(correct_formula)
end
end
it "reports and corrects readthedocs.org pages" do
expect_offense(<<~RUBY)
class Foo < Formula
homepage "https://foo.readthedocs.org"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/Homepage: Readthedocs homepages should be `https://foo.readthedocs.io`
url "https://brew.sh/foo-1.0.tgz"
end
RUBY
expect_correction(<<~RUBY)
class Foo < Formula
homepage "https://foo.readthedocs.io"
url "https://brew.sh/foo-1.0.tgz"
end
RUBY
end
it "reports an offense for HTTP homepages" do
formula_homepages = {
"sf" => "http://foo.sourceforge.io/",
"corge" => "http://savannah.nongnu.org/corge",
"grault" => "http://grault.github.io/",
"garply" => "http://www.gnome.org/garply",
"waldo" => "http://www.gnu.org/waldo",
"dotgit" => "http://github.com/quux",
}
formula_homepages.each do |name, homepage|
source = <<~RUBY
class #{name.capitalize} < Formula
homepage "#{homepage}"
url "https://brew.sh/#{name}-1.0.tgz"
end
RUBY
expected_offenses = [{ message: "FormulaAudit/Homepage: Please use https:// for #{homepage}",
severity: :convention,
line: 2,
column: 11,
source: source }]
expected_offenses.zip([inspect_source(source).last]).each do |expected, actual|
expect(actual.message).to eq(expected[:message])
expect(actual.severity).to eq(expected[:severity])
expect(actual.line).to eq(expected[:line])
expect(actual.column).to eq(expected[:column])
end
end
end
end
end