diff --git a/spec/flipper/ui/action_spec.rb b/spec/flipper/ui/action_spec.rb index 388ace6e7..46ff4f1fd 100644 --- a/spec/flipper/ui/action_spec.rb +++ b/spec/flipper/ui/action_spec.rb @@ -1,8 +1,9 @@ require 'helper' RSpec.describe Flipper::UI::Action do - let(:action_subclass) do - Class.new(described_class) do + describe 'request methods' do + let(:action_subclass) do + Class.new(described_class) def noooope raise 'should never run this' end @@ -23,37 +24,54 @@ def delete [200, {}, 'delete'] end end - end - it "won't run method that isn't whitelisted" do - fake_request = Struct.new(:request_method, :env, :session).new('NOOOOPE', {}, {}) - action = action_subclass.new(flipper, fake_request) - expect do - action.run - end.to raise_error(Flipper::UI::RequestMethodNotSupported) - end + it "won't run method that isn't whitelisted" do + fake_request = Struct.new(:request_method, :env, :session).new('NOOOOPE', {}, {}) + action = action_subclass.new(flipper, fake_request) + expect do + action.run + end.to raise_error(Flipper::UI::RequestMethodNotSupported) + end - it 'will run get' do - fake_request = Struct.new(:request_method, :env, :session).new('GET', {}, {}) - action = action_subclass.new(flipper, fake_request) - expect(action.run).to eq([200, {}, 'get']) - end + it 'will run get' do + fake_request = Struct.new(:request_method, :env, :session).new('GET', {}, {}) + action = action_subclass.new(flipper, fake_request) + expect(action.run).to eq([200, {}, 'get']) + end - it 'will run post' do - fake_request = Struct.new(:request_method, :env, :session).new('POST', {}, {}) - action = action_subclass.new(flipper, fake_request) - expect(action.run).to eq([200, {}, 'post']) - end + it 'will run post' do + fake_request = Struct.new(:request_method, :env, :session).new('POST', {}, {}) + action = action_subclass.new(flipper, fake_request) + expect(action.run).to eq([200, {}, 'post']) + end - it 'will run put' do - fake_request = Struct.new(:request_method, :env, :session).new('PUT', {}, {}) - action = action_subclass.new(flipper, fake_request) - expect(action.run).to eq([200, {}, 'put']) + it 'will run put' do + fake_request = Struct.new(:request_method, :env, :session).new('PUT', {}, {}) + action = action_subclass.new(flipper, fake_request) + expect(action.run).to eq([200, {}, 'put']) + end end - it 'will run delete' do - fake_request = Struct.new(:request_method, :env, :session).new('DELETE', {}, {}) - action = action_subclass.new(flipper, fake_request) - expect(action.run).to eq([200, {}, 'delete']) + describe 'FeatureNameFromRoute' do + let(:action_subclass) do + Class.new(described_class) do |parent| + include parent::FeatureNameFromRoute + + route %r{\A/features/(?.*)\Z} + + def get + [200, { feature_name: feature_name }, 'get'] + end + end + end + + it 'decodes feature_name' do + requested_feature_name = Rack::Utils.escape("team:side_pane") + fake_request = Struct + .new(:request_method, :env, :session, :path_info) + .new('GET', {}, {}, "/features/#{requested_feature_name}") + action = action_subclass.new(flipper, fake_request) + expect(action.run).to eq([200, { feature_name: "team:side_pane" }, 'get']) + end end end