From f65e4797cff01fd29ad89c9ba7284bbfbafe7ec2 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 3 Jul 2025 14:40:03 +1000 Subject: [PATCH] Add feature toggle for DFC dev platform --- app/helpers/admin/enterprises_helper.rb | 14 +++++++++++--- .../enterprises/form/_connected_apps.html.haml | 4 ++-- .../dfc_provider/application_controller.rb | 5 +++++ .../dfc_provider/platforms_controller.rb | 6 +++++- lib/open_food_network/feature_toggle.rb | 3 +++ spec/helpers/admin/enterprises_helper_spec.rb | 5 +++++ 6 files changed, 31 insertions(+), 6 deletions(-) diff --git a/app/helpers/admin/enterprises_helper.rb b/app/helpers/admin/enterprises_helper.rb index 83d1423fc5..82d3c01c99 100644 --- a/app/helpers/admin/enterprises_helper.rb +++ b/app/helpers/admin/enterprises_helper.rb @@ -26,8 +26,8 @@ module Admin show_enterprise_fees = can?(:manage_enterprise_fees, enterprise) && (is_shop || enterprise.is_primary_producer) show_connected_apps = can?(:manage_connected_apps, enterprise) && - feature?(:connected_apps, spree_current_user, enterprise) && - Spree::Config.connected_apps_enabled.present? + (connected_apps_enabled(enterprise).present? || + dfc_platforms_available?) show_inventory_settings = feature?(:inventory, spree_current_user.enterprises) && is_shop show_options = { @@ -42,11 +42,19 @@ module Admin build_enterprise_side_menu_items(is_shop:, show_options:) end - def connected_apps_enabled + def connected_apps_enabled(enterprise) + return [] unless feature?(:connected_apps, spree_current_user, enterprise) + connected_apps_enabled = Spree::Config.connected_apps_enabled&.split(',') || [] ConnectedApp::TYPES & connected_apps_enabled end + def dfc_platforms_available? + DfcProvider::PlatformsController::PLATFORM_IDS.keys.any? do |id| + feature?(id) + end + end + def enterprise_attachment_removal_modal_id attachment_removal_parameter # remove_logo|remove_promo_image|remove_white_label_logo end diff --git a/app/views/admin/enterprises/form/_connected_apps.html.haml b/app/views/admin/enterprises/form/_connected_apps.html.haml index 0bb3ecf85d..ac531eb315 100644 --- a/app/views/admin/enterprises/form/_connected_apps.html.haml +++ b/app/views/admin/enterprises/form/_connected_apps.html.haml @@ -1,5 +1,5 @@ -- connected_apps_enabled.each do |type| +- connected_apps_enabled(enterprise).each do |type| = render partial: "/admin/enterprises/form/connected_apps/#{type}", locals: { enterprise:, connected_app: enterprise.connected_apps.public_send(type).first } -= render partial: "/admin/enterprises/form/dfc_permissions" += render partial: "/admin/enterprises/form/dfc_permissions" if dfc_platforms_available? diff --git a/engines/dfc_provider/app/controllers/dfc_provider/application_controller.rb b/engines/dfc_provider/app/controllers/dfc_provider/application_controller.rb index 16ebe0411e..d403ba8958 100644 --- a/engines/dfc_provider/app/controllers/dfc_provider/application_controller.rb +++ b/engines/dfc_provider/app/controllers/dfc_provider/application_controller.rb @@ -63,5 +63,10 @@ module DfcProvider def import DfcIo.import(request.body) end + + # Checks weather a feature is enabled for any of the given actors. + def feature?(feature, *actors) + OpenFoodNetwork::FeatureToggle.enabled?(feature, *actors) + end end end diff --git a/engines/dfc_provider/app/controllers/dfc_provider/platforms_controller.rb b/engines/dfc_provider/app/controllers/dfc_provider/platforms_controller.rb index 7da338949d..374e82855f 100644 --- a/engines/dfc_provider/app/controllers/dfc_provider/platforms_controller.rb +++ b/engines/dfc_provider/app/controllers/dfc_provider/platforms_controller.rb @@ -57,7 +57,7 @@ module DfcProvider def platforms id = DfcProvider::Engine.routes.url_helpers.enterprise_platforms_url(current_enterprise.id) - platforms = PLATFORM_IDS.keys.map(&method(:platform)) + platforms = available_platforms.map(&method(:platform)) { '@context': "https://cdn.startinblox.com/owl/context-bis.jsonld", @@ -69,6 +69,10 @@ module DfcProvider } end + def available_platforms + PLATFORM_IDS.keys.select(&method(:feature?)) + end + def platform(key) { '@type': "dfc-t:Platform", diff --git a/lib/open_food_network/feature_toggle.rb b/lib/open_food_network/feature_toggle.rb index daef91de47..42a1cb6642 100644 --- a/lib/open_food_network/feature_toggle.rb +++ b/lib/open_food_network/feature_toggle.rb @@ -64,6 +64,9 @@ module OpenFoodNetwork "hub_address" => <<~DESC, Show the hub's address as shipping address on pickup orders. DESC + "cqcm-dev" => <<~DESC, + Show DFC Permissions interface to share data with CQCM dev platform. + DESC }.merge(conditional_features).freeze; # Features you would like to be enabled to start with. diff --git a/spec/helpers/admin/enterprises_helper_spec.rb b/spec/helpers/admin/enterprises_helper_spec.rb index a2b1e24255..84c9c5884d 100644 --- a/spec/helpers/admin/enterprises_helper_spec.rb +++ b/spec/helpers/admin/enterprises_helper_spec.rb @@ -38,5 +38,10 @@ RSpec.describe Admin::EnterprisesHelper do expect(visible_items.pluck(:name)).to include "inventory_settings" end end + + it "hides Connected Apps by default" do + user.enterprises << enterprise + expect(visible_items.pluck(:name)).not_to include "connected_apps" + end end end