diff --git a/config/routes.rb b/config/routes.rb index 1dad9de8e..038e62db1 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -26,7 +26,12 @@ Rails.application.routes.draw do get "/locale/:locale", to: "stories#index" draw :admin - draw :listing + + # The lambda (e.g. `->`) allows for dynamic checking. In other words we check with each + # request. + constraints(->(_req) { Listing.feature_enabled? }) do + draw :listing + end namespace :stories, defaults: { format: "json" } do resource :feed, only: [:show] do diff --git a/spec/routing/all_routes_spec.rb b/spec/routing/all_routes_spec.rb index 3bc3c3ac9..69d47d649 100644 --- a/spec/routing/all_routes_spec.rb +++ b/spec/routing/all_routes_spec.rb @@ -10,6 +10,22 @@ RSpec.describe "all routes", type: :routing do end end + describe "/listings" do + subject(:a_request) { { get: "/listings" } } + + context "when enabled" do + before { allow(Listing).to receive(:feature_enabled?).and_return(true) } + + it { is_expected.to route_to(controller: "listings", action: "index", locale: nil) } + end + + context "when disabled" do + before { allow(Listing).to receive(:feature_enabled?).and_return(false) } + + it { is_expected.not_to route_to(controller: "listings", action: "index", locale: nil) } + end + end + it "renders a podcast index if there is a podcast with the slug successfully" do expect(get: "/#{podcast.slug}").to route_to( controller: "stories",