| 
									
										
										
										
											2023-04-04 19:55:15 -07:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require "rubocops/service" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-18 15:11:11 -08:00
										 |  |  | RSpec.describe RuboCop::Cop::FormulaAudit::Service do | 
					
						
							| 
									
										
										
										
											2023-04-04 19:55:15 -07:00
										 |  |  |   subject(:cop) { described_class.new } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-07 12:51:46 -07:00
										 |  |  |   it "reports offenses when a service block is missing a required command" do | 
					
						
							|  |  |  |     expect_offense(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         service do | 
					
						
							| 
									
										
										
										
											2023-05-13 12:35:50 -07:00
										 |  |  |         ^^^^^^^^^^ FormulaAudit/Service: Service blocks require `run` or `name` to be defined. | 
					
						
							| 
									
										
										
										
											2023-05-07 12:51:46 -07:00
										 |  |  |           run_type :cron | 
					
						
							|  |  |  |           working_dir "/tmp/example" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-20 21:05:14 -07:00
										 |  |  |   it "reports no offenses when a service block includes custom names and requires root" do | 
					
						
							| 
									
										
										
										
											2023-05-07 12:51:46 -07:00
										 |  |  |     expect_no_offenses(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         service do | 
					
						
							| 
									
										
										
										
											2023-05-13 12:35:50 -07:00
										 |  |  |           name macos: "custom.mcxl.foo", linux: "custom.foo" | 
					
						
							| 
									
										
										
										
											2024-03-20 21:05:14 -07:00
										 |  |  |           require_root true | 
					
						
							| 
									
										
										
										
											2023-05-07 12:51:46 -07:00
										 |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it "reports offenses when a service block includes more than custom names and no run command" do | 
					
						
							|  |  |  |     expect_offense(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         service do | 
					
						
							| 
									
										
										
										
											2023-05-13 12:35:50 -07:00
										 |  |  |         ^^^^^^^^^^ FormulaAudit/Service: `run` must be defined to use methods other than `name` like [:working_dir]. | 
					
						
							|  |  |  |           name macos: "custom.mcxl.foo", linux: "custom.foo" | 
					
						
							| 
									
										
										
										
											2023-05-07 12:51:46 -07:00
										 |  |  |           working_dir "/tmp/example" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-30 07:39:25 +08:00
										 |  |  |   it "reports offenses when a formula's service block uses cellar paths" do | 
					
						
							| 
									
										
										
										
											2023-04-04 19:55:15 -07:00
										 |  |  |     expect_offense(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         service do | 
					
						
							|  |  |  |           run [bin/"foo", "run", "-config", etc/"foo/config.json"] | 
					
						
							| 
									
										
										
										
											2023-04-07 17:16:48 +01:00
										 |  |  |                ^^^ FormulaAudit/Service: Use `opt_bin` instead of `bin` in service blocks. | 
					
						
							| 
									
										
										
										
											2023-04-30 07:39:25 +08:00
										 |  |  |           working_dir libexec | 
					
						
							|  |  |  |                       ^^^^^^^ FormulaAudit/Service: Use `opt_libexec` instead of `libexec` in service blocks. | 
					
						
							| 
									
										
										
										
											2023-04-04 19:55:15 -07:00
										 |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect_correction(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         service do | 
					
						
							|  |  |  |           run [opt_bin/"foo", "run", "-config", etc/"foo/config.json"] | 
					
						
							| 
									
										
										
										
											2023-04-30 07:39:25 +08:00
										 |  |  |           working_dir opt_libexec | 
					
						
							| 
									
										
										
										
											2023-04-04 19:55:15 -07:00
										 |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-07 12:51:46 -07:00
										 |  |  |   it "reports no offenses when a service block only uses opt paths" do | 
					
						
							| 
									
										
										
										
											2023-04-04 19:55:15 -07:00
										 |  |  |     expect_no_offenses(<<~RUBY) | 
					
						
							|  |  |  |       class Bin < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         service do | 
					
						
							|  |  |  |           run [opt_bin/"bin", "run", "-config", etc/"bin/config.json"] | 
					
						
							| 
									
										
										
										
											2023-04-30 07:39:25 +08:00
										 |  |  |           working_dir opt_libexec | 
					
						
							| 
									
										
										
										
											2023-04-04 19:55:15 -07:00
										 |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |