2024-02-19 22:47:31 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require "rubocops/resource_requires_dependencies"
|
|
|
|
|
2024-02-20 12:17:27 +00:00
|
|
|
RSpec.describe RuboCop::Cop::FormulaAudit::ResourceRequiresDependencies do
|
2024-02-19 22:47:31 +00:00
|
|
|
subject(:cop) { described_class.new }
|
|
|
|
|
2024-02-20 22:09:47 +00:00
|
|
|
context "when a formula does not have any resources" do
|
|
|
|
it "does not report offenses" do
|
|
|
|
expect_no_offenses(<<~RUBY)
|
|
|
|
class Foo < Formula
|
|
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
|
|
homepage "https://brew.sh"
|
|
|
|
|
|
|
|
uses_from_macos "libxml2"
|
|
|
|
end
|
|
|
|
RUBY
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2024-02-19 22:47:31 +00:00
|
|
|
context "when a formula does not have the lxml resource" do
|
|
|
|
it "does not report offenses" do
|
|
|
|
expect_no_offenses(<<~RUBY)
|
|
|
|
class Foo < Formula
|
|
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
|
|
homepage "https://brew.sh"
|
|
|
|
|
|
|
|
uses_from_macos "libxml2"
|
|
|
|
|
|
|
|
resource "not-lxml" do
|
|
|
|
url "blah"
|
|
|
|
sha256 "blah"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
RUBY
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when a formula has the lxml resource" do
|
|
|
|
it "does not report offenses if the dependencies are present" do
|
|
|
|
expect_no_offenses(<<~RUBY)
|
|
|
|
class Foo < Formula
|
|
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
|
|
homepage "https://brew.sh"
|
|
|
|
|
|
|
|
uses_from_macos "libxml2"
|
|
|
|
uses_from_macos "libxslt"
|
|
|
|
|
|
|
|
resource "lxml" do
|
|
|
|
url "blah"
|
|
|
|
sha256 "blah"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
RUBY
|
|
|
|
end
|
|
|
|
|
|
|
|
it "reports offenses if missing a dependency" do
|
|
|
|
expect_offense(<<~RUBY)
|
|
|
|
class Foo < Formula
|
|
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
|
|
homepage "https://brew.sh"
|
|
|
|
|
|
|
|
uses_from_macos "libsomethingelse"
|
|
|
|
uses_from_macos "not_libxml2"
|
|
|
|
|
|
|
|
resource "lxml" do
|
2024-02-20 12:17:27 +00:00
|
|
|
^^^^^^^^^^^^^^^ FormulaAudit/ResourceRequiresDependencies: Add `uses_from_macos` lines above for `"libxml2"` and `"libxslt"`.
|
2024-02-19 22:47:31 +00:00
|
|
|
url "blah"
|
|
|
|
sha256 "blah"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
RUBY
|
|
|
|
end
|
|
|
|
end
|
2024-02-20 22:09:47 +00:00
|
|
|
|
|
|
|
context "when a formula does not have the pyyaml resource" do
|
|
|
|
it "does not report offenses" do
|
|
|
|
expect_no_offenses(<<~RUBY)
|
|
|
|
class Foo < Formula
|
|
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
|
|
homepage "https://brew.sh"
|
|
|
|
|
|
|
|
uses_from_macos "libxml2"
|
|
|
|
|
|
|
|
resource "not-pyyaml" do
|
|
|
|
url "blah"
|
|
|
|
sha256 "blah"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
RUBY
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when a formula has the pyyaml resource" do
|
|
|
|
it "does not report offenses if the dependencies are present" do
|
|
|
|
expect_no_offenses(<<~RUBY)
|
|
|
|
class Foo < Formula
|
|
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
|
|
homepage "https://brew.sh"
|
|
|
|
|
|
|
|
depends_on "libyaml"
|
|
|
|
|
|
|
|
resource "pyyaml" do
|
|
|
|
url "blah"
|
|
|
|
sha256 "blah"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
RUBY
|
|
|
|
end
|
|
|
|
|
|
|
|
it "reports offenses if missing a dependency" do
|
|
|
|
expect_offense(<<~RUBY)
|
|
|
|
class Foo < Formula
|
|
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
|
|
homepage "https://brew.sh"
|
|
|
|
|
|
|
|
depends_on "not_libyaml"
|
|
|
|
|
|
|
|
resource "pyyaml" do
|
|
|
|
^^^^^^^^^^^^^^^^^ FormulaAudit/ResourceRequiresDependencies: Add `depends_on` lines above for `"libyaml"`.
|
|
|
|
url "blah"
|
|
|
|
sha256 "blah"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
RUBY
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when a formula has multiple resources" do
|
|
|
|
it "reports offenses for each resource that is missing a dependency" do
|
|
|
|
expect_offense(<<~RUBY)
|
|
|
|
class Foo < Formula
|
|
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
|
|
homepage "https://brew.sh"
|
|
|
|
|
|
|
|
uses_from_macos "one"
|
|
|
|
uses_from_macos "two"
|
|
|
|
depends_on "three"
|
|
|
|
|
|
|
|
resource "lxml" do
|
|
|
|
^^^^^^^^^^^^^^^ FormulaAudit/ResourceRequiresDependencies: Add `uses_from_macos` lines above for `"libxml2"` and `"libxslt"`.
|
|
|
|
url "blah"
|
|
|
|
sha256 "blah"
|
|
|
|
end
|
|
|
|
|
|
|
|
resource "pyyaml" do
|
|
|
|
^^^^^^^^^^^^^^^^^ FormulaAudit/ResourceRequiresDependencies: Add `depends_on` lines above for `"libyaml"`.
|
|
|
|
url "blah"
|
|
|
|
sha256 "blah"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
RUBY
|
|
|
|
end
|
|
|
|
end
|
2024-02-19 22:47:31 +00:00
|
|
|
end
|