diff options
Diffstat (limited to 'spec/support/examples/lib')
-rw-r--r-- | spec/support/examples/lib/settings/scoped_settings.rb | 74 | ||||
-rw-r--r-- | spec/support/examples/lib/settings/settings_extended.rb | 15 |
2 files changed, 89 insertions, 0 deletions
diff --git a/spec/support/examples/lib/settings/scoped_settings.rb b/spec/support/examples/lib/settings/scoped_settings.rb new file mode 100644 index 000000000..2457dcfbf --- /dev/null +++ b/spec/support/examples/lib/settings/scoped_settings.rb @@ -0,0 +1,74 @@ +# frozen_string_literal: true + +shared_examples 'ScopedSettings' do + describe '[]' do + it 'inherits default settings' do + expect(Setting.boost_modal).to eq false + expect(Setting.interactions['must_be_follower']).to eq false + + settings = create! + + expect(settings['boost_modal']).to eq false + expect(settings['interactions']['must_be_follower']).to eq false + end + end + + describe 'all_as_records' do + # expecting [] and []= works + + it 'returns records merged with default values except hashes' do + expect(Setting.boost_modal).to eq false + expect(Setting.delete_modal).to eq true + + settings = create! + settings['boost_modal'] = true + + records = settings.all_as_records + + expect(records['boost_modal'].value).to eq true + expect(records['delete_modal'].value).to eq true + end + end + + describe 'missing methods' do + # expecting [] and []= works. + + it 'reads settings' do + expect(Setting.boost_modal).to eq false + settings = create! + expect(settings.boost_modal).to eq false + end + + it 'updates settings' do + settings = fabricate + settings.boost_modal = true + expect(settings['boost_modal']).to eq true + end + end + + it 'can update settings with [] and can read with []=' do + settings = fabricate + + settings['boost_modal'] = true + settings['interactions'] = settings['interactions'].merge('must_be_follower' => true) + + Setting.save! + + expect(settings['boost_modal']).to eq true + expect(settings['interactions']['must_be_follower']).to eq true + + Rails.cache.clear + + expect(settings['boost_modal']).to eq true + expect(settings['interactions']['must_be_follower']).to eq true + end + + xit 'does not mutate defaults via the cache' do + fabricate['interactions']['must_be_follower'] = true + # TODO + # This mutates the global settings default such that future + # instances will inherit the incorrect starting values + + expect(fabricate.settings['interactions']['must_be_follower']).to eq false + end +end diff --git a/spec/support/examples/lib/settings/settings_extended.rb b/spec/support/examples/lib/settings/settings_extended.rb new file mode 100644 index 000000000..5a9d34bb0 --- /dev/null +++ b/spec/support/examples/lib/settings/settings_extended.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +shared_examples 'Settings-extended' do + describe 'settings' do + def fabricate + super.settings + end + + def create! + super.settings + end + + it_behaves_like 'ScopedSettings' + end +end |