Skip to content

Commit

Permalink
Add regression test for escaping feature names
Browse files Browse the repository at this point in the history
* 7151715 was merged which escapes
feature_names like we were doing before the change to support slashes
and adding the FeatureNameFromRoute module for pulling the feature name
out of the request.  This adds a regression spec to make sure this
continues to work in the future as changes are made.
  • Loading branch information
AlexWheeler committed Oct 2, 2018
1 parent 7070a43 commit 369a8c8
Showing 1 changed file with 46 additions and 28 deletions.
74 changes: 46 additions & 28 deletions spec/flipper/ui/action_spec.rb
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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/(?<feature_name>.*)\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

0 comments on commit 369a8c8

Please sign in to comment.