2018-04-24 16:28:04 +00:00
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
describe ApplicationSettings::UpdateService do
|
2018-05-25 16:44:15 +00:00
|
|
|
let(:application_settings) { create(:application_setting) }
|
2018-04-24 16:28:04 +00:00
|
|
|
let(:admin) { create(:user, :admin) }
|
|
|
|
let(:params) { {} }
|
|
|
|
|
|
|
|
subject { described_class.new(application_settings, admin, params) }
|
|
|
|
|
|
|
|
before do
|
|
|
|
# So the caching behaves like it would in production
|
|
|
|
stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false')
|
2018-10-17 18:03:33 +00:00
|
|
|
|
|
|
|
# Creating these settings first ensures they're used by other factories
|
|
|
|
application_settings
|
2018-04-24 16:28:04 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
describe 'updating terms' do
|
|
|
|
context 'when the passed terms are blank' do
|
|
|
|
let(:params) { { terms: '' } }
|
|
|
|
|
|
|
|
it 'does not create terms' do
|
|
|
|
expect { subject.execute }.not_to change { ApplicationSetting::Term.count }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when passing terms' do
|
|
|
|
let(:params) { { terms: 'Be nice! ' } }
|
|
|
|
|
|
|
|
it 'creates the terms' do
|
|
|
|
expect { subject.execute }.to change { ApplicationSetting::Term.count }.by(1)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'does not create terms if they are the same as the existing ones' do
|
|
|
|
create(:term, terms: 'Be nice!')
|
|
|
|
|
|
|
|
expect { subject.execute }.not_to change { ApplicationSetting::Term.count }
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'updates terms if they already existed' do
|
|
|
|
create(:term, terms: 'Other terms')
|
|
|
|
|
|
|
|
subject.execute
|
|
|
|
|
|
|
|
expect(application_settings.terms).to eq('Be nice!')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'Only queries once when the terms are changed' do
|
|
|
|
create(:term, terms: 'Other terms')
|
|
|
|
expect(application_settings.terms).to eq('Other terms')
|
|
|
|
|
|
|
|
subject.execute
|
|
|
|
|
|
|
|
expect(application_settings.terms).to eq('Be nice!')
|
|
|
|
expect { 2.times { application_settings.terms } }
|
|
|
|
.not_to exceed_query_limit(0)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2018-05-25 16:44:15 +00:00
|
|
|
|
|
|
|
describe 'performance bar settings' do
|
|
|
|
using RSpec::Parameterized::TableSyntax
|
|
|
|
|
|
|
|
where(:params_performance_bar_enabled,
|
|
|
|
:params_performance_bar_allowed_group_path,
|
|
|
|
:previous_performance_bar_allowed_group_id,
|
|
|
|
:expected_performance_bar_allowed_group_id) do
|
|
|
|
true | '' | nil | nil
|
|
|
|
true | '' | 42_000_000 | nil
|
|
|
|
true | nil | nil | nil
|
|
|
|
true | nil | 42_000_000 | nil
|
|
|
|
true | 'foo' | nil | nil
|
|
|
|
true | 'foo' | 42_000_000 | nil
|
|
|
|
true | 'group_a' | nil | 42_000_000
|
|
|
|
true | 'group_b' | 42_000_000 | 43_000_000
|
|
|
|
true | 'group_a' | 42_000_000 | 42_000_000
|
|
|
|
false | '' | nil | nil
|
|
|
|
false | '' | 42_000_000 | nil
|
|
|
|
false | nil | nil | nil
|
|
|
|
false | nil | 42_000_000 | nil
|
|
|
|
false | 'foo' | nil | nil
|
|
|
|
false | 'foo' | 42_000_000 | nil
|
|
|
|
false | 'group_a' | nil | nil
|
|
|
|
false | 'group_b' | 42_000_000 | nil
|
|
|
|
false | 'group_a' | 42_000_000 | nil
|
|
|
|
end
|
|
|
|
|
|
|
|
with_them do
|
|
|
|
let(:params) do
|
|
|
|
{
|
|
|
|
performance_bar_enabled: params_performance_bar_enabled,
|
|
|
|
performance_bar_allowed_group_path: params_performance_bar_allowed_group_path
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
before do
|
|
|
|
if previous_performance_bar_allowed_group_id == 42_000_000 || params_performance_bar_allowed_group_path == 'group_a'
|
|
|
|
create(:group, id: 42_000_000, path: 'group_a')
|
|
|
|
end
|
|
|
|
|
|
|
|
if expected_performance_bar_allowed_group_id == 43_000_000 || params_performance_bar_allowed_group_path == 'group_b'
|
|
|
|
create(:group, id: 43_000_000, path: 'group_b')
|
|
|
|
end
|
|
|
|
|
|
|
|
application_settings.update!(performance_bar_allowed_group_id: previous_performance_bar_allowed_group_id)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'sets performance_bar_allowed_group_id when present and performance_bar_enabled == true' do
|
|
|
|
expect(application_settings.performance_bar_allowed_group_id).to eq(previous_performance_bar_allowed_group_id)
|
|
|
|
|
|
|
|
if previous_performance_bar_allowed_group_id != expected_performance_bar_allowed_group_id
|
|
|
|
expect { subject.execute }
|
|
|
|
.to change(application_settings, :performance_bar_allowed_group_id)
|
|
|
|
.from(previous_performance_bar_allowed_group_id).to(expected_performance_bar_allowed_group_id)
|
|
|
|
else
|
|
|
|
expect { subject.execute }
|
|
|
|
.not_to change(application_settings, :performance_bar_allowed_group_id)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when :performance_bar_allowed_group_path is not present' do
|
|
|
|
let(:group) { create(:group) }
|
|
|
|
|
|
|
|
before do
|
|
|
|
application_settings.update!(performance_bar_allowed_group_id: group.id)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'does not change the performance bar settings' do
|
|
|
|
expect { subject.execute }
|
|
|
|
.not_to change(application_settings, :performance_bar_allowed_group_id)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when :performance_bar_enabled is not present' do
|
|
|
|
let(:group) { create(:group) }
|
|
|
|
let(:params) { { performance_bar_allowed_group_path: group.full_path } }
|
|
|
|
|
|
|
|
it 'implicitely defaults to true' do
|
|
|
|
expect { subject.execute }
|
|
|
|
.to change(application_settings, :performance_bar_allowed_group_id)
|
|
|
|
.from(nil).to(group.id)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2018-04-24 16:28:04 +00:00
|
|
|
end
|