diff --git a/Gemfile b/Gemfile index 1541d3bc7..4e871c0f9 100644 --- a/Gemfile +++ b/Gemfile @@ -7,4 +7,5 @@ group :development, :test do gem 'guard' gem 'guard-rspec' gem 'guard-rubocop' + gem 'warden', '~> 1.2.3' end diff --git a/lib/grape/util/inheritable_values.rb b/lib/grape/util/inheritable_values.rb index 21a55d84b..2546075db 100644 --- a/lib/grape/util/inheritable_values.rb +++ b/lib/grape/util/inheritable_values.rb @@ -36,7 +36,7 @@ def to_hash def initialize_copy(other) super self.inherited_values = other.inherited_values - self.new_values = other.new_values.deep_dup + self.new_values = other.new_values.dup end protected diff --git a/lib/grape/util/stackable_values.rb b/lib/grape/util/stackable_values.rb index 4937445c1..8ce736272 100644 --- a/lib/grape/util/stackable_values.rb +++ b/lib/grape/util/stackable_values.rb @@ -45,7 +45,7 @@ def freeze_value(key) def initialize_copy(other) super self.inherited_values = other.inherited_values - self.new_values = other.new_values.deep_dup + self.new_values = other.new_values.dup end end end diff --git a/spec/grape/warden_test_helpers_spec.rb b/spec/grape/warden_test_helpers_spec.rb new file mode 100644 index 000000000..80af1aa9f --- /dev/null +++ b/spec/grape/warden_test_helpers_spec.rb @@ -0,0 +1,49 @@ +require 'spec_helper' + +FailureApp = ->(env) { [401, {}, ['']] } + +class APIEvaluatedBeforeTests < Grape::API + use(Warden::Manager) { |manager| manager.failure_app = FailureApp } + + before { env.fetch('warden').authenticate! } + + get '/' +end + +describe Warden::Test::Helpers do + def app + subject + end + + describe '#login_as' do + before { login_as(:user) } + + context 'API evaluated before tests' do + subject { APIEvaluatedBeforeTests } + + it 'logs in' do + get '/' + expect(last_response).to be_ok + end + end + + context 'API evaluated after tests' do + let(:api_evaluated_after_tests) do + Class.new(Grape::API) do + use(Warden::Manager) { |manager| manager.failure_app = FailureApp } + + before { env.fetch('warden').authenticate! } + + get '/' + end + end + + subject { api_evaluated_after_tests } + + it 'logs in' do + get '/' + expect(last_response).to be_ok + end + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index c6cd2d063..0cecc9db4 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -14,6 +14,7 @@ require 'cookiejar' require 'json' require 'mime/types' +require 'warden' Dir["#{File.dirname(__FILE__)}/support/*.rb"].each do |file| require file @@ -23,7 +24,10 @@ RSpec.configure do |config| config.include Rack::Test::Methods + config.include Warden::Test::Helpers config.raise_errors_for_deprecations! + config.after(:each) { Warden.test_reset! } + config.before(:each) { Grape::Util::InheritableSetting.reset_global! } end