diff options
Diffstat (limited to 'spec/services/feature_flags/enable_service_spec.rb')
-rw-r--r-- | spec/services/feature_flags/enable_service_spec.rb | 154 |
1 files changed, 0 insertions, 154 deletions
diff --git a/spec/services/feature_flags/enable_service_spec.rb b/spec/services/feature_flags/enable_service_spec.rb deleted file mode 100644 index c0008b1933f..00000000000 --- a/spec/services/feature_flags/enable_service_spec.rb +++ /dev/null @@ -1,154 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe FeatureFlags::EnableService do - include FeatureFlagHelpers - - let_it_be(:project) { create(:project) } - let_it_be(:user) { create(:user) } - - let(:params) { {} } - let(:service) { described_class.new(project, user, params) } - - before_all do - project.add_developer(user) - end - - describe '#execute' do - subject { service.execute } - - context 'with params to enable default strategy on prd scope' do - let(:params) do - { - name: 'awesome', - environment_scope: 'prd', - strategy: { name: 'default', parameters: {} }.stringify_keys - } - end - - context 'when there is no persisted feature flag' do - it 'creates a new feature flag with scope' do - feature_flag = subject[:feature_flag] - scope = feature_flag.scopes.find_by_environment_scope(params[:environment_scope]) - expect(subject[:status]).to eq(:success) - expect(feature_flag.name).to eq(params[:name]) - expect(feature_flag.default_scope).not_to be_active - expect(scope).to be_active - expect(scope.strategies).to include(params[:strategy]) - end - - context 'when params include default scope' do - let(:params) do - { - name: 'awesome', - environment_scope: '*', - strategy: { name: 'userWithId', parameters: { 'userIds': 'abc' } }.deep_stringify_keys - } - end - - it 'create a new feature flag with an active default scope with the specified strategy' do - feature_flag = subject[:feature_flag] - expect(subject[:status]).to eq(:success) - expect(feature_flag.default_scope).to be_active - expect(feature_flag.default_scope.strategies).to include(params[:strategy]) - end - end - end - - context 'when there is a persisted feature flag' do - let!(:feature_flag) { create_flag(project, params[:name]) } - - context 'when there is no persisted scope' do - it 'creates a new scope for the persisted feature flag' do - feature_flag = subject[:feature_flag] - scope = feature_flag.scopes.find_by_environment_scope(params[:environment_scope]) - expect(subject[:status]).to eq(:success) - expect(feature_flag.name).to eq(params[:name]) - expect(scope).to be_active - expect(scope.strategies).to include(params[:strategy]) - end - end - - context 'when there is a persisted scope' do - let!(:feature_flag_scope) do - create_scope(feature_flag, params[:environment_scope], active, strategies) - end - - let(:active) { true } - - context 'when the persisted scope does not have the specified strategy yet' do - let(:strategies) { [{ name: 'userWithId', parameters: { 'userIds': 'abc' } }] } - - it 'adds the specified strategy to the scope' do - subject - - feature_flag_scope.reload - expect(feature_flag_scope.strategies).to include(params[:strategy]) - end - - context 'when the persisted scope is inactive' do - let(:active) { false } - - it 'reactivates the scope' do - expect { subject } - .to change { feature_flag_scope.reload.active }.from(false).to(true) - end - end - end - - context 'when the persisted scope has the specified strategy already' do - let(:strategies) { [params[:strategy]] } - - it 'does not add a duplicated strategy to the scope' do - expect { subject } - .not_to change { feature_flag_scope.reload.strategies.count } - end - end - end - end - end - - context 'when strategy is not specified in params' do - let(:params) do - { - name: 'awesome', - environment_scope: 'prd' - } - end - - it 'returns error' do - expect(subject[:status]).to eq(:error) - expect(subject[:message]).to include('Scopes strategies must be an array of strategy hashes') - end - end - - context 'when environment scope is not specified in params' do - let(:params) do - { - name: 'awesome', - strategy: { name: 'default', parameters: {} }.stringify_keys - } - end - - it 'returns error' do - expect(subject[:status]).to eq(:error) - expect(subject[:message]).to include("Scopes environment scope can't be blank") - end - end - - context 'when name is not specified in params' do - let(:params) do - { - environment_scope: 'prd', - strategy: { name: 'default', parameters: {} }.stringify_keys - } - end - - it 'returns error' do - expect(subject[:status]).to eq(:error) - expect(subject[:message]).to include("Name can't be blank") - end - end - end -end |