require 'helper'
RSpec.describe Flipper::UI do
let(:token) {
if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
Rack::Protection::AuthenticityToken.random_token
else
"a"
end
}
let(:session) {
if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
{:csrf => token}
else
{"_csrf_token" => token}
end
}
describe "Initializing middleware with flipper instance" do
let(:app) { build_app(flipper) }
it "works" do
flipper.enable :some_great_feature
get "/features"
expect(last_response.status).to be(200)
expect(last_response.body).to include("some_great_feature")
end
end
describe "Initializing middleware lazily with a block" do
let(:app) {
build_app(lambda { flipper })
}
it "works" do
flipper.enable :some_great_feature
get "/features"
expect(last_response.status).to be(200)
expect(last_response.body).to include("some_great_feature")
end
end
describe "Request method unsupported by action" do
it "raises error" do
expect {
head '/features'
}.to raise_error(Flipper::UI::RequestMethodNotSupported)
end
end
describe "Inspecting the built Rack app" do
it "returns a String" do
expect(build_app(flipper).inspect).to be_a(String)
end
end
# See https://github.com/jnunemaker/flipper/issues/80
it "can route features with names that match static directories" do
post "features/refactor-images/actors",
{"value" => "User:6", "operation" => "enable", "authenticity_token" => token},
"rack.session" => session
expect(last_response.status).to be(302)
expect(last_response.headers["Location"]).to eq("/features/refactor-images")
end
it "should not have an application_breadcrumb_href by default" do
expect(Flipper::UI.application_breadcrumb_href).to be(nil)
end
context "with application_breadcrumb_href not set" do
before do
@original_application_breadcrumb_href = Flipper::UI.application_breadcrumb_href
Flipper::UI.application_breadcrumb_href = nil
end
after do
Flipper::UI.application_breadcrumb_href = @original_application_breadcrumb_href
end
it 'does not add App breadcrumb' do
get "/features"
expect(last_response.body).to_not include('App')
end
end
context "with application_breadcrumb_href set" do
before do
@original_application_breadcrumb_href = Flipper::UI.application_breadcrumb_href
Flipper::UI.application_breadcrumb_href = "/myapp"
end
after do
Flipper::UI.application_breadcrumb_href = @original_application_breadcrumb_href
end
it 'does add App breadcrumb' do
get "/features"
expect(last_response.body).to include('App')
end
end
context "with application_breadcrumb_href set to full url" do
before do
@original_application_breadcrumb_href = Flipper::UI.application_breadcrumb_href
Flipper::UI.application_breadcrumb_href = "https://myapp.com/"
end
after do
Flipper::UI.application_breadcrumb_href = @original_application_breadcrumb_href
end
it 'does add App breadcrumb' do
get "/features"
expect(last_response.body).to include('App')
end
end
it "should set feature_creation_enabled to true by default" do
expect(Flipper::UI.feature_creation_enabled).to be(true)
end
context "with feature_creation_enabled set to true" do
before do
@original_feature_creation_enabled = Flipper::UI.feature_creation_enabled
Flipper::UI.feature_creation_enabled = true
end
it 'has the add_feature button' do
get '/features'
expect(last_response.body).to include('Add Feature')
end
after do
Flipper::UI.feature_creation_enabled = @original_feature_creation_enabled
end
end
context "with feature_creation_enabled set to false" do
before do
@original_feature_creation_enabled = Flipper::UI.feature_creation_enabled
Flipper::UI.feature_creation_enabled = false
end
it 'does not have the add_feature button' do
get '/features'
expect(last_response.body).to_not include('Add Feature')
end
after do
Flipper::UI.feature_creation_enabled = @original_feature_creation_enabled
end
end
end