From 42844df966d7f503321c82a1f04a8a9be0210dbf Mon Sep 17 00:00:00 2001 From: "Akihiko Odaki (@fn_aki@pawoo.net)" Date: Mon, 5 Jun 2017 00:07:39 +0900 Subject: Spec ScopedSettings (#3559) --- .../examples/lib/settings/scoped_settings.rb | 74 ++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 spec/support/examples/lib/settings/scoped_settings.rb (limited to 'spec/support/examples/lib/settings/scoped_settings.rb') 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 -- cgit