Skip to content
Snippets Groups Projects
Commit 42844df9 authored by Akihiko Odaki (@fn_aki@pawoo.net)'s avatar Akihiko Odaki (@fn_aki@pawoo.net) Committed by Eugen Rochko
Browse files

Spec ScopedSettings (#3559)

parent b0fe58dc
No related branches found
No related tags found
No related merge requests found
...@@ -41,37 +41,6 @@ RSpec.describe User, type: :model do ...@@ -41,37 +41,6 @@ RSpec.describe User, type: :model do
end end
end end
describe 'settings' do
it 'inherits default settings from default yml' do
expect(Setting.boost_modal).to eq false
expect(Setting.interactions['must_be_follower']).to eq false
user = User.new
expect(user.settings.boost_modal).to eq false
expect(user.settings.interactions['must_be_follower']).to eq false
end
it 'can update settings' do
user = Fabricate(:user)
expect(user.settings['interactions']['must_be_follower']).to eq false
user.settings['interactions'] = user.settings['interactions'].merge('must_be_follower' => true)
user.reload
expect(user.settings['interactions']['must_be_follower']).to eq true
end
xit 'does not mutate defaults via the cache' do
user = Fabricate(:user)
user.settings['interactions']['must_be_follower'] = true
# TODO
# This mutates the global settings default such that future user
# instances will inherit the incorrect starting values
other = Fabricate(:user)
expect(other.settings['interactions']['must_be_follower']).to eq false
end
end
describe 'scopes' do describe 'scopes' do
describe 'recent' do describe 'recent' do
it 'returns an array of recent users ordered by id' do it 'returns an array of recent users ordered by id' do
...@@ -285,4 +254,14 @@ RSpec.describe User, type: :model do ...@@ -285,4 +254,14 @@ RSpec.describe User, type: :model do
end end
end end
end end
it_behaves_like 'Settings-extended' do
def create!
User.create!(account: Fabricate(:account), email: 'foo@mastodon.space', password: 'abcd1234' )
end
def fabricate
Fabricate(:user)
end
end
end end
# 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
# 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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment