Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib/feature/definition_spec.rb')
-rw-r--r--spec/lib/feature/definition_spec.rb93
1 files changed, 45 insertions, 48 deletions
diff --git a/spec/lib/feature/definition_spec.rb b/spec/lib/feature/definition_spec.rb
index 2f95f8eeab7..3d11ad4c0d8 100644
--- a/spec/lib/feature/definition_spec.rb
+++ b/spec/lib/feature/definition_spec.rb
@@ -54,22 +54,10 @@ RSpec.describe Feature::Definition do
describe '#valid_usage!' do
context 'validates type' do
it 'raises exception for invalid type' do
- expect { definition.valid_usage!(type_in_code: :invalid, default_enabled_in_code: false) }
+ expect { definition.valid_usage!(type_in_code: :invalid) }
.to raise_error(/The `type:` of `feature_flag` is not equal to config/)
end
end
-
- context 'validates default enabled' do
- it 'raises exception for different value' do
- expect { definition.valid_usage!(type_in_code: :development, default_enabled_in_code: false) }
- .to raise_error(/The `default_enabled:` of `feature_flag` is not equal to config/)
- end
-
- it 'allows passing `default_enabled: :yaml`' do
- expect { definition.valid_usage!(type_in_code: :development, default_enabled_in_code: :yaml) }
- .not_to raise_error
- end
- end
end
describe '.paths' do
@@ -165,18 +153,14 @@ RSpec.describe Feature::Definition do
using RSpec::Parameterized::TableSyntax
let(:definition) do
- Feature::Definition.new("development/enabled_feature_flag.yml",
- name: :enabled_feature_flag,
- type: 'development',
- milestone: milestone,
- default_enabled: false)
+ described_class.new("development/enabled_feature_flag.yml",
+ name: :enabled_feature_flag,
+ type: 'development',
+ milestone: milestone,
+ default_enabled: false)
end
before do
- allow(Feature::Definition).to receive(:definitions) do
- { definition.key => definition }
- end
-
allow(Gitlab).to receive(:version_info).and_return(Gitlab::VersionInfo.parse(current_milestone))
end
@@ -192,7 +176,7 @@ RSpec.describe Feature::Definition do
end
with_them do
- it {is_expected.to be(expected)}
+ it { is_expected.to be(expected) }
end
end
@@ -207,7 +191,7 @@ RSpec.describe Feature::Definition do
it 'validates it usage' do
expect(definition).to receive(:valid_usage!)
- described_class.valid_usage!(:feature_flag, type: :development, default_enabled: false)
+ described_class.valid_usage!(:feature_flag, type: :development)
end
end
@@ -221,7 +205,7 @@ RSpec.describe Feature::Definition do
it 'raises exception' do
expect do
- described_class.valid_usage!(:unknown_feature_flag, type: :development, default_enabled: false)
+ described_class.valid_usage!(:unknown_feature_flag, type: :development)
end.to raise_error(/Missing feature definition for `unknown_feature_flag`/)
end
end
@@ -235,7 +219,7 @@ RSpec.describe Feature::Definition do
it 'does not raise exception' do
expect do
- described_class.valid_usage!(:unknown_feature_flag, type: :development, default_enabled: false)
+ described_class.valid_usage!(:unknown_feature_flag, type: :development)
end.not_to raise_error
end
end
@@ -243,7 +227,7 @@ RSpec.describe Feature::Definition do
context 'for an unknown type' do
it 'raises exception' do
expect do
- described_class.valid_usage!(:unknown_feature_flag, type: :unknown_type, default_enabled: false)
+ described_class.valid_usage!(:unknown_feature_flag, type: :unknown_type)
end.to raise_error(/Unknown feature flag type used: `unknown_type`/)
end
end
@@ -254,23 +238,23 @@ RSpec.describe Feature::Definition do
using RSpec::Parameterized::TableSyntax
let(:definition) do
- Feature::Definition.new("development/enabled_feature_flag.yml",
- name: :enabled_feature_flag,
- type: 'development',
- milestone: milestone,
- log_state_changes: log_state_change,
- default_enabled: false)
+ described_class.new("development/enabled_feature_flag.yml",
+ name: :enabled_feature_flag,
+ type: 'development',
+ milestone: milestone,
+ log_state_changes: log_state_change,
+ default_enabled: false)
end
before do
- allow(Feature::Definition).to receive(:definitions) do
- { definition.key => definition }
- end
+ stub_feature_flag_definition(:enabled_feature_flag,
+ milestone: milestone,
+ log_state_changes: log_state_change)
allow(Gitlab).to receive(:version_info).and_return(Gitlab::VersionInfo.new(10, 0, 0))
end
- subject { Feature::Definition.log_states?(key) }
+ subject { described_class.log_states?(key) }
where(:ctx, :key, :milestone, :log_state_change, :expected) do
'When flag does not exist' | :no_flag | "0.0" | true | false
@@ -286,10 +270,11 @@ RSpec.describe Feature::Definition do
end
describe '.default_enabled?' do
- subject { described_class.default_enabled?(key) }
+ subject { described_class.default_enabled?(key, default_enabled_if_undefined: default_value) }
context 'when feature flag exist' do
let(:key) { definition.key }
+ let(:default_value) { nil }
before do
allow(described_class).to receive(:definitions) do
@@ -319,21 +304,33 @@ RSpec.describe Feature::Definition do
context 'when feature flag does not exist' do
let(:key) { :unknown_feature_flag }
- context 'when on dev or test environment' do
- it 'raises an error' do
- expect { subject }.to raise_error(
- Feature::InvalidFeatureFlagError,
- "The feature flag YAML definition for 'unknown_feature_flag' does not exist")
+ context 'when passing default value' do
+ let(:default_value) { false }
+
+ it 'returns default value' do
+ expect(subject).to eq(default_value)
end
end
- context 'when on production environment' do
- before do
- allow(Gitlab::ErrorTracking).to receive(:should_raise_for_dev?).and_return(false)
+ context 'when default value is undefined' do
+ let(:default_value) { nil }
+
+ context 'when on dev or test environment' do
+ it 'raises an error' do
+ expect { subject }.to raise_error(
+ Feature::InvalidFeatureFlagError,
+ "The feature flag YAML definition for 'unknown_feature_flag' does not exist")
+ end
end
- it 'returns false' do
- expect(subject).to eq(false)
+ context 'when on production environment' do
+ before do
+ allow(Gitlab::ErrorTracking).to receive(:should_raise_for_dev?).and_return(false)
+ end
+
+ it 'returns false' do
+ expect(subject).to eq(false)
+ end
end
end
end