diff --git a/app/controllers/autocompletes_controller.rb b/app/controllers/autocompletes_controller.rb index 156b6e4..8e56102 100644 --- a/app/controllers/autocompletes_controller.rb +++ b/app/controllers/autocompletes_controller.rb @@ -1,10 +1,16 @@ class AutocompletesController < ApplicationController def show - render json: DiscoveryEngine::Autocomplete::Complete.new(query).completion_result + render json: completion_result end private + def completion_result + return CompletionResult.new(suggestions: []) if Rails.configuration.disable_autocomplete + + DiscoveryEngine::Autocomplete::Complete.new(query).completion_result + end + def query params[:q] end diff --git a/config/application.rb b/config/application.rb index 272479c..9e98a25 100644 --- a/config/application.rb +++ b/config/application.rb @@ -40,5 +40,11 @@ class Application < Rails::Application ## currently only using a single instance (the Publishing "shared" Redis). If we ever need to ## use multiple Redis instances, this is the only place that needs updating. config.redlock_redis_instances = [config.redis_url] + + # Feature flags + def self.feature_flag(name) + ActiveModel::Type::Boolean.new.cast(ENV.fetch(name, false)) + end + config.disable_autocomplete = feature_flag("GOVUK_SEARCH_DISABLE_AUTOCOMPLETE") end end diff --git a/spec/requests/autocomplete_request_spec.rb b/spec/requests/autocomplete_request_spec.rb index ce6c0ee..e641e18 100644 --- a/spec/requests/autocomplete_request_spec.rb +++ b/spec/requests/autocomplete_request_spec.rb @@ -17,4 +17,19 @@ }) end end + + context "when autocomplete is disabled through the feature flag" do + before do + allow(Rails.configuration).to receive(:disable_autocomplete).and_return(true) + end + + it "returns empty suggestions" do + get "/autocomplete.json?q=foo" + + expect(response).to have_http_status(:ok) + expect(JSON.parse(response.body)).to eq({ + "suggestions" => [], + }) + end + end end