156 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # 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
 | 
