diff --git a/Gemfile.lock b/Gemfile.lock index b7aae1b197..233b372b94 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -286,15 +286,15 @@ GEM websocket-driver (>= 0.6, < 0.8) ffaker (2.23.0) ffi (1.16.3) - flipper (0.26.2) + flipper (1.2.2) concurrent-ruby (< 2) - flipper-active_record (0.26.2) + flipper-active_record (1.2.2) activerecord (>= 4.2, < 8) - flipper (~> 0.26.2) - flipper-ui (0.26.2) + flipper (~> 1.2.2) + flipper-ui (1.2.2) erubi (>= 1.0.0, < 2.0.0) - flipper (~> 0.26.2) - rack (>= 1.4, < 3) + flipper (~> 1.2.2) + rack (>= 1.4, < 4) rack-protection (>= 1.5.3, <= 4.0.0) sanitize (< 7) fog-aws (2.0.1) @@ -686,7 +686,7 @@ GEM rubyzip (2.3.2) rufus-scheduler (3.8.2) fugit (~> 1.1, >= 1.1.6) - sanitize (6.0.2) + sanitize (6.1.0) crass (~> 1.0.2) nokogiri (>= 1.12.0) sass (3.4.25) diff --git a/config/initializers/flipper.rb b/config/initializers/flipper.rb index 4a4aecaf25..446ac3ee70 100644 --- a/config/initializers/flipper.rb +++ b/config/initializers/flipper.rb @@ -2,8 +2,23 @@ require "flipper" require "flipper/adapters/active_record" require "open_food_network/feature_toggle" -Flipper.register(:admins) { |actor| actor.respond_to?(:admin?) && actor.admin? } +Rails.application.configure do + # Disable Flipper's built-in test helper. + # It fails in CI and feature don't get activated. + config.flipper.test_help = false +end +Flipper.configure do |flipper| + # Still use recommended test setup with faster memory adapter: + if Rails.env.test? + # Use a shared Memory adapter for all tests. The adapter is instantiated + # outside of the block so the same instance is returned in new threads. + adapter = Flipper::Adapters::Memory.new + flipper.adapter { adapter } + end +end + +Flipper.register(:admins) { |actor| actor.respond_to?(:admin?) && actor.admin? } Flipper::UI.configure do |config| config.descriptions_source = ->(_keys) do # return has to be hash of {String key => String description} diff --git a/db/migrate/20240222192158_change_flipper_gates_value_to_text.rb b/db/migrate/20240222192158_change_flipper_gates_value_to_text.rb new file mode 100644 index 0000000000..67fabe7d4e --- /dev/null +++ b/db/migrate/20240222192158_change_flipper_gates_value_to_text.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +class ChangeFlipperGatesValueToText < ActiveRecord::Migration[7.0] + def up + # Ensure this incremental update migration is idempotent + return unless connection.column_exists? :flipper_gates, :value, :string + + if index_exists? :flipper_gates, [:feature_key, :key, :value] + remove_index :flipper_gates, [:feature_key, :key, :value] + end + change_column :flipper_gates, :value, :text + add_index :flipper_gates, [:feature_key, :key, :value], unique: true, length: { value: 255 } + end + + def down + change_column :flipper_gates, :value, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 42e4b6ac40..e212860c24 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -282,7 +282,7 @@ ActiveRecord::Schema[7.0].define(version: 2024_04_30_075133) do create_table "flipper_gates", id: :serial, force: :cascade do |t| t.string "feature_key", null: false t.string "key", null: false - t.string "value" + t.text "value" t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false t.index ["feature_key", "key", "value"], name: "index_flipper_gates_on_feature_key_and_key_and_value", unique: true diff --git a/spec/base_spec_helper.rb b/spec/base_spec_helper.rb index 1238281f00..42ce4e6ad6 100644 --- a/spec/base_spec_helper.rb +++ b/spec/base_spec_helper.rb @@ -102,7 +102,7 @@ RSpec.configure do |config| end # Reset all feature toggles to prevent leaking. - config.before(:suite) do + config.before(:each) do Flipper.features.each(&:remove) OpenFoodNetwork::FeatureToggle.setup! end