diff --git a/lib/action_account.rb b/lib/action_account.rb index 74b920e3c9d..4d32fcea0dd 100644 --- a/lib/action_account.rb +++ b/lib/action_account.rb @@ -4,12 +4,13 @@ # rubocop:disable Metrics/BlockLength class ActionAccount - attr_reader :argv, :stdout, :stderr + attr_reader :argv, :stdout, :stderr, :rails_env - def initialize(argv:, stdout:, stderr:) + def initialize(argv:, stdout:, stderr:, rails_env: Rails.env) @argv = argv @stdout = stdout @stderr = stderr + @rails_env = rails_env end def script_base @@ -20,6 +21,7 @@ def script_base subtask_class: subtask(argv.shift), banner: banner, reason_arg: true, + rails_env:, ) end diff --git a/lib/script_base.rb b/lib/script_base.rb index c6e0c95f790..c1f6224af67 100644 --- a/lib/script_base.rb +++ b/lib/script_base.rb @@ -3,15 +3,24 @@ require 'optparse' class ScriptBase - attr_reader :argv, :stdout, :stderr, :subtask_class, :banner - - def initialize(argv:, stdout:, stderr:, subtask_class:, banner:, reason_arg:) + attr_reader :argv, :stdout, :stderr, :subtask_class, :banner, :rails_env + + def initialize( + argv:, + stdout:, + stderr:, + subtask_class:, + banner:, + reason_arg:, + rails_env: Rails.env + ) @argv = argv @stdout = stdout @stderr = stderr @subtask_class = subtask_class @banner = banner @reason_arg = reason_arg + @rails_env = rails_env end def reason_arg? @@ -56,6 +65,10 @@ def config def run option_parser.parse!(argv) + if rails_env.local? + stderr.puts "⚠️ WARNING: returning local data for #{File.basename($PROGRAM_NAME)}" + end + if config.show_help? || !subtask_class stderr.puts '*Task*: `help`' stderr.puts '*UUIDs*: N/A' diff --git a/spec/lib/action_account_spec.rb b/spec/lib/action_account_spec.rb index 30382fdf9e6..939fcca0c53 100644 --- a/spec/lib/action_account_spec.rb +++ b/spec/lib/action_account_spec.rb @@ -6,8 +6,9 @@ let(:stdout) { StringIO.new } let(:stderr) { StringIO.new } let(:argv) { [] } + let(:rails_env) { ActiveSupport::EnvironmentInquirer.new('production') } - subject(:action_account) { ActionAccount.new(argv:, stdout:, stderr:) } + subject(:action_account) { ActionAccount.new(argv:, stdout:, stderr:, rails_env:) } describe 'command line run' do let(:argv) { ['review-pass', user.uuid, '--reason', 'INV1234'] } diff --git a/spec/lib/script_base_spec.rb b/spec/lib/script_base_spec.rb index f3e2c1379cb..dbbddf93ab5 100644 --- a/spec/lib/script_base_spec.rb +++ b/spec/lib/script_base_spec.rb @@ -22,6 +22,7 @@ def run(args:, config:) # rubocop:disable Lint/UnusedMethodArgument describe '#run' do let(:argv) { [] } + let(:env) { 'production' } subject(:base) do ScriptBase.new( @@ -31,9 +32,34 @@ def run(args:, config:) # rubocop:disable Lint/UnusedMethodArgument subtask_class:, banner: '', reason_arg: false, + rails_env: ActiveSupport::EnvironmentInquirer.new(env), ) end + context 'running in production vs locally' do + subject(:run) { base.run } + + context 'in production' do + let(:env) { 'production' } + + it 'does not warn' do + run + + expect(stderr.string).to_not include('WARNING') + end + end + + context 'in development' do + let(:env) { 'development' } + + it 'warns that it is in development' do + run + + expect(stderr.string).to include('WARNING: returning local data') + end + end + end + context 'with --deflate' do let(:argv) { %w[--deflate] }