| 
									
										
										
										
											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 |