@@ -225,5 +225,112 @@ module VCAP::CloudController
225225 end
226226 end
227227 end
228+
229+ describe 'default flag override in config' do
230+ let ( :key ) { :diego_docker }
231+ let ( :default_value ) { FeatureFlag ::DEFAULT_FLAGS [ key ] }
232+
233+ context 'when there was no previously set conflicting value' do
234+ let ( :config_value ) { !default_value }
235+
236+ before do
237+ FeatureFlag . override_default_flags ( { key => config_value } )
238+ end
239+
240+ context 'and the value is not changed by admin' do
241+ it 'returns the config-set value' do
242+ expect ( FeatureFlag . enabled? ( key ) ) . to be config_value
243+ end
244+ end
245+
246+ context 'and the value is changed by admin' do
247+ let ( :admin_value ) { !config_value }
248+ let ( :admin_override ) do
249+ flag = FeatureFlag . find ( name : key . to_s )
250+ flag . enabled = admin_value
251+ flag . save
252+ end
253+
254+ before do
255+ admin_override
256+ end
257+
258+ it 'returns the admin-set value' do
259+ expect ( FeatureFlag . enabled? ( key ) ) . to be admin_value
260+ end
261+ end
262+ end
263+
264+ context 'when there was previously set conflicting value' do
265+ let ( :admin_value ) { !default_value }
266+
267+ before do
268+ FeatureFlag . make ( name : key . to_s , enabled : admin_value )
269+ end
270+
271+ it 'overwrites the existing admin-set value' do
272+ expect ( FeatureFlag . enabled? ( key ) ) . to be admin_value
273+ FeatureFlag . override_default_flags ( { key => !admin_value } )
274+ expect ( FeatureFlag . enabled? ( key ) ) . to be !admin_value
275+ end
276+ end
277+ end
278+
279+ describe '.override_default_flags' do
280+ context 'with invalid flags' do
281+ it 'raises an error for the one and only invalid name' do
282+ feature_flag_overrides = { an_invalid_name : true }
283+ expect do
284+ FeatureFlag . override_default_flags ( feature_flag_overrides )
285+ end . to raise_error ( 'Invalid feature flag name(s): [:an_invalid_name]' )
286+ end
287+
288+ it 'raises an error for a mix of valid and invalid names' do
289+ feature_flag_overrides = { diego_docker : true , an_invalid_name : true }
290+ expect do
291+ FeatureFlag . override_default_flags ( feature_flag_overrides )
292+ end . to raise_error ( 'Invalid feature flag name(s): [:an_invalid_name]' )
293+ end
294+
295+ it 'raises an error for all invalid names' do
296+ feature_flag_overrides = { invalid_name1 : true , invalid_name2 : false }
297+ expect do
298+ FeatureFlag . override_default_flags ( feature_flag_overrides )
299+ end . to raise_error ( 'Invalid feature flag name(s): [:invalid_name1, :invalid_name2]' )
300+ end
301+
302+ it 'raises an error for invalid values' do
303+ feature_flag_overrides = { diego_docker : 'an invalid value' , user_org_creation : false }
304+ expect do
305+ FeatureFlag . override_default_flags ( feature_flag_overrides )
306+ end . to raise_error ( 'Invalid feature flag value(s): {:diego_docker=>"an invalid value"}' )
307+ end
308+ end
309+
310+ context 'with valid flags' do
311+ let ( :default_diego_docker_value ) { FeatureFlag ::DEFAULT_FLAGS [ :diego_docker ] }
312+ let ( :default_user_org_creation_value ) { FeatureFlag ::DEFAULT_FLAGS [ :user_org_creation ] }
313+
314+ before do
315+ expect do
316+ FeatureFlag . override_default_flags ( { diego_docker : !default_diego_docker_value , user_org_creation : !default_user_org_creation_value } )
317+ end . not_to raise_error
318+ end
319+
320+ it 'updates values' do
321+ expect ( FeatureFlag . enabled? ( :diego_docker ) ) . to be !default_diego_docker_value
322+ expect ( FeatureFlag . enabled? ( :user_org_creation ) ) . to be !default_user_org_creation_value
323+ end
324+ end
325+
326+ context 'with empty flags' do
327+ it 'no effect' do
328+ FeatureFlag . override_default_flags ( { } )
329+ FeatureFlag ::DEFAULT_FLAGS . each do |key , value |
330+ expect ( FeatureFlag . enabled? ( key ) ) . to eq value
331+ end
332+ end
333+ end
334+ end
228335 end
229336end
0 commit comments