From 501730df5d9857f4d711f472725b22c433b14f12 Mon Sep 17 00:00:00 2001 From: apainintheneck Date: Sat, 18 Mar 2023 13:23:30 -0700 Subject: [PATCH] Add service serialization specs --- Library/Homebrew/test/service_spec.rb | 77 +++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/Library/Homebrew/test/service_spec.rb b/Library/Homebrew/test/service_spec.rb index 04934da624..f552e2c3f9 100644 --- a/Library/Homebrew/test/service_spec.rb +++ b/Library/Homebrew/test/service_spec.rb @@ -913,4 +913,81 @@ describe Homebrew::Service do expect(command).to eq(["#{HOMEBREW_PREFIX}/opt/#{name}/bin/beanstalkd", "test", "macos"]) end end + + describe "#serialize" do + context "with a single run command" do + let(:serialized_hash) do + { + "environment_variables" => { + ":PATH" => "$HOMEBREW_PREFIX/bin:$HOMEBREW_PREFIX/sbin:/usr/bin:/bin:/usr/sbin:/sbin", + }, + "run" => ["$HOMEBREW_PREFIX/opt/formula_name/bin/beanstalkd", "test"], + "run_type" => ":immediate", + "working_dir" => "$HOME", + } + end + + it "replaces local paths with placeholders" do + f = stub_formula do + service do + run [opt_bin/"beanstalkd", "test"] + environment_variables PATH: std_service_path_env + working_dir Dir.home + end + end + + expect(f.service.serialize).to eq(serialized_hash) + end + end + + context "with OS specific run commands" do + let(:serialized_hash) do + { + "run" => { + ":macos" => ["$HOMEBREW_PREFIX/opt/formula_name/bin/beanstalkd", "macos"], + ":linux" => ["$HOMEBREW_PREFIX/opt/formula_name/bin/beanstalkd", "linux"], + }, + "run_type" => ":immediate", + } + end + + it "replaces local paths with placeholders" do + f = stub_formula do + service do + run macos: [opt_bin/"beanstalkd", "macos"], linux: [opt_bin/"beanstalkd", "linux"] + end + end + + expect(f.service.serialize).to eq(serialized_hash) + end + end + end + + describe ".deserialize" do + let(:serialized_hash) do + { + "environment_variables" => { + ":PATH" => "$HOMEBREW_PREFIX/bin:$HOMEBREW_PREFIX/sbin:/usr/bin:/bin:/usr/sbin:/sbin", + }, + "run" => ["$HOMEBREW_PREFIX/opt/formula_name/bin/beanstalkd", "test"], + "run_type" => ":immediate", + "working_dir" => "$HOME", + } + end + + let(:deserialized_hash) do + { + "environment_variables" => { + PATH: "#{HOMEBREW_PREFIX}/bin:#{HOMEBREW_PREFIX}/sbin:/usr/bin:/bin:/usr/sbin:/sbin", + }, + "run" => ["#{HOMEBREW_PREFIX}/opt/formula_name/bin/beanstalkd", "test"], + "run_type" => :immediate, + "working_dir" => Dir.home, + } + end + + it "replaces placeholders with local paths" do + expect(described_class.deserialize(serialized_hash)).to eq(deserialized_hash) + end + end end