From 939467885851eb0f3fc5bcbaab6cb585bb85710d Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Fri, 21 Sep 2018 15:43:24 -0500 Subject: [PATCH] Add ProjectFeature check for feature flag This will allow an explicitly-disabled feature flag to override a feature being available for a project. As an extreme example, we could quickly disable issues across all projects at runtime by running `Feature.disable(:issues)`. --- app/models/project_feature.rb | 3 +++ spec/models/project_feature_spec.rb | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/app/models/project_feature.rb b/app/models/project_feature.rb index 4a0324e8b5c..754c2461d23 100644 --- a/app/models/project_feature.rb +++ b/app/models/project_feature.rb @@ -55,6 +55,9 @@ class ProjectFeature < ActiveRecord::Base default_value_for :repository_access_level, value: ENABLED, allows_nil: false def feature_available?(feature, user) + # This feature might not be behind a feature flag at all, so default to true + return false unless ::Feature.enabled?(feature, user, default_enabled: true) + get_permission(user, access_level(feature)) end diff --git a/spec/models/project_feature_spec.rb b/spec/models/project_feature_spec.rb index cd7f77024da..2a193864e46 100644 --- a/spec/models/project_feature_spec.rb +++ b/spec/models/project_feature_spec.rb @@ -73,6 +73,22 @@ describe ProjectFeature do end end end + + context 'when feature is disabled by a feature flag' do + it 'returns false' do + stub_feature_flags(issues: false) + + expect(project.feature_available?(:issues, user)).to eq(false) + end + end + + context 'when feature is enabled by a feature flag' do + it 'returns true' do + stub_feature_flags(issues: true) + + expect(project.feature_available?(:issues, user)).to eq(true) + end + end end context 'repository related features' do