diff options
-rw-r--r-- | app/helpers/preferences_helper.rb | 6 | ||||
-rw-r--r-- | spec/helpers/preferences_helper_spec.rb | 77 |
2 files changed, 59 insertions, 24 deletions
diff --git a/app/helpers/preferences_helper.rb b/app/helpers/preferences_helper.rb index 51a6b3fa997..7f1b6a69926 100644 --- a/app/helpers/preferences_helper.rb +++ b/app/helpers/preferences_helper.rb @@ -30,7 +30,11 @@ module PreferencesHelper end def user_application_theme - Gitlab::Themes.by_id(current_user.try(:theme_id)).css_class + Gitlab::Themes.for_user(current_user).css_class + end + + def user_color_scheme + Gitlab::ColorSchemes.for_user(current_user).css_class end def prefer_readme? diff --git a/spec/helpers/preferences_helper_spec.rb b/spec/helpers/preferences_helper_spec.rb index b4dee272bfd..06f69262b71 100644 --- a/spec/helpers/preferences_helper_spec.rb +++ b/spec/helpers/preferences_helper_spec.rb @@ -1,51 +1,82 @@ require 'spec_helper' describe PreferencesHelper do + describe 'dashboard_choices' do + it 'raises an exception when defined choices may be missing' do + expect(User).to receive(:dashboards).and_return(foo: 'foo') + expect { helper.dashboard_choices }.to raise_error(RuntimeError) + end + + it 'raises an exception when defined choices may be using the wrong key' do + expect(User).to receive(:dashboards).and_return(foo: 'foo', bar: 'bar') + expect { helper.dashboard_choices }.to raise_error(KeyError) + end + + it 'provides better option descriptions' do + expect(helper.dashboard_choices).to match_array [ + ['Your Projects (default)', 'projects'], + ['Starred Projects', 'stars'] + ] + end + end + describe 'user_application_theme' do context 'with a user' do it "returns user's theme's css_class" do - user = double('user', theme_id: 3) - allow(self).to receive(:current_user).and_return(user) - expect(user_application_theme).to eq 'ui_green' + stub_user(theme_id: 3) + + expect(helper.user_application_theme).to eq 'ui_green' end it 'returns the default when id is invalid' do - user = double('user', theme_id: Gitlab::Themes::THEMES.size + 5) + stub_user(theme_id: Gitlab::Themes.count + 5) allow(Gitlab.config.gitlab).to receive(:default_theme).and_return(2) - allow(self).to receive(:current_user).and_return(user) - expect(user_application_theme).to eq 'ui_charcoal' + expect(helper.user_application_theme).to eq 'ui_charcoal' end end context 'without a user' do - before do - allow(self).to receive(:current_user).and_return(nil) - end - it 'returns the default theme' do - expect(user_application_theme).to eq Gitlab::Themes.default.css_class + stub_user + + expect(helper.user_application_theme).to eq Gitlab::Themes.default.css_class end end end - describe 'dashboard_choices' do - it 'raises an exception when defined choices may be missing' do - expect(User).to receive(:dashboards).and_return(foo: 'foo') - expect { dashboard_choices }.to raise_error(RuntimeError) + describe 'user_color_scheme' do + context 'with a user' do + it "returns user's scheme's css_class" do + allow(helper).to receive(:current_user). + and_return(double(color_scheme_id: 3)) + + expect(helper.user_color_scheme).to eq 'solarized-light' + end + + it 'returns the default when id is invalid' do + allow(helper).to receive(:current_user). + and_return(double(color_scheme_id: Gitlab::ColorSchemes.count + 5)) + end end - it 'raises an exception when defined choices may be using the wrong key' do - expect(User).to receive(:dashboards).and_return(foo: 'foo', bar: 'bar') - expect { dashboard_choices }.to raise_error(KeyError) + context 'without a user' do + it 'returns the default theme' do + stub_user + + expect(helper.user_color_scheme). + to eq Gitlab::ColorSchemes.default.css_class + end end + end - it 'provides better option descriptions' do - expect(dashboard_choices).to match_array [ - ['Your Projects (default)', 'projects'], - ['Starred Projects', 'stars'] - ] + def stub_user(messages = {}) + if messages.empty? + allow(helper).to receive(:current_user).and_return(nil) + else + allow(helper).to receive(:current_user). + and_return(double('user', messages)) end end end |