brew/Library/Homebrew/test/rubocops/resource_requires_dependencies_spec.rb

156 lines
4.0 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
require "rubocops/resource_requires_dependencies"
RSpec.describe RuboCop::Cop::FormulaAudit::ResourceRequiresDependencies do
subject(:cop) { described_class.new }
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
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
^^^^^^^^^^^^^^^ FormulaAudit/ResourceRequiresDependencies: Add `uses_from_macos` lines above for `"libxml2"` and `"libxslt"`.
url "blah"
sha256 "blah"
end
end
RUBY
end
end
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
end