kanbanworkflowstimelinescrumrubyroadmapproject-planningproject-managementopenprojectangularissue-trackerifcgantt-chartganttbug-trackerboardsbcf
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
4.9 KiB
149 lines
4.9 KiB
#-- copyright
|
|
# OpenProject is a project management system.
|
|
# Copyright (C) 2012-2017 the OpenProject Foundation (OPF)
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License version 3.
|
|
#
|
|
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
|
|
# Copyright (C) 2006-2017 Jean-Philippe Lang
|
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
#
|
|
# See doc/COPYRIGHT.rdoc for more details.
|
|
#++
|
|
|
|
require 'spec_helper'
|
|
|
|
module OpenProject
|
|
describe Themes do
|
|
before do Themes.clear_themes end
|
|
|
|
describe '.new_theme' do
|
|
it 'returns a new theme' do
|
|
theme = Themes.new_theme { |theme|
|
|
theme.identifier = :new_theme
|
|
}
|
|
expect(theme).to be_kind_of Themes::Theme
|
|
expect(theme.identifier).to eq :new_theme
|
|
end
|
|
end
|
|
|
|
describe '.themes' do
|
|
it 'returns the known themes' do
|
|
theme = Themes.new_theme
|
|
expect(Themes.themes).to include theme
|
|
end
|
|
end
|
|
|
|
describe '.clear_themes' do
|
|
it 'clears the known themes' do
|
|
theme = Themes.new_theme
|
|
Themes.clear_themes
|
|
expect(Themes.themes).to be_empty
|
|
end
|
|
end
|
|
|
|
describe '.theme' do
|
|
it 'returns a theme by name' do
|
|
theme = Themes.new_theme { |theme|
|
|
theme.identifier = :new_theme
|
|
}
|
|
expect(Themes.theme(:new_theme)).to be theme
|
|
end
|
|
|
|
it 'returns the default theme if theme not found' do
|
|
expect(Themes.theme(:missing_theme)).to be Themes.default_theme
|
|
end
|
|
end
|
|
|
|
describe '.default_theme' do
|
|
it 'returns the instance of the default theme class' do
|
|
expect(Themes.default_theme).to be Themes::DefaultTheme.instance
|
|
end
|
|
end
|
|
|
|
describe '.each' do
|
|
it 'iterates over the registered themes' do
|
|
Themes.new_theme do |theme|
|
|
theme.identifier = :new_theme
|
|
end
|
|
themes = []
|
|
Themes.each do |theme| themes << theme.identifier end
|
|
expect(themes).to eq [:new_theme]
|
|
end
|
|
end
|
|
|
|
describe '.inject' do
|
|
it 'iterates over the registered themes' do
|
|
Themes.new_theme do |theme|
|
|
theme.identifier = :new_theme
|
|
end
|
|
identifiers = Themes.inject [] { |themes, theme| themes << theme.identifier }
|
|
expect(identifiers).to eq [:new_theme]
|
|
end
|
|
end
|
|
|
|
describe '.current_theme' do
|
|
it 'returns the theme with identifier defined by current theme identifier' do
|
|
theme = Themes.new_theme { |theme|
|
|
theme.identifier = :new_theme
|
|
}
|
|
allow(Themes).to receive(:application_theme_identifier).and_return :new_theme
|
|
expect(Themes.current_theme).to eq theme
|
|
end
|
|
|
|
it "returns the default theme if configured theme wasn't found" do
|
|
allow(Themes).to receive(:application_theme_identifier).and_return :missing_theme
|
|
expect(Themes.current_theme).to eq Themes.default_theme
|
|
end
|
|
|
|
describe ' with a given user' do
|
|
let(:user) { FactoryGirl.build(:user) }
|
|
|
|
it 'returns the theme identifier defined by the user' do
|
|
user_theme = Themes.new_theme { |t| t.identifier = :user_theme }
|
|
user.pref[:theme] = :user_theme
|
|
expect(Themes.current_theme(user: user)).to eq user_theme
|
|
end
|
|
|
|
it 'returns the theme identifier defined by the app' do
|
|
app_theme = Themes.new_theme { |t| t.identifier = :app_theme }
|
|
user.pref[:theme] = nil
|
|
allow(Themes).to receive(:application_theme_identifier).and_return :app_theme
|
|
expect(Themes.current_theme(user: user)).to eq app_theme
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '.application_theme_identifier' do
|
|
it 'normalizes current theme setting to a symbol' do
|
|
allow(Setting).to receive(:ui_theme).and_return 'new_theme'
|
|
expect(Themes.application_theme_identifier).to eq :new_theme
|
|
end
|
|
|
|
it 'returns nil for an empty string' do
|
|
allow(Setting).to receive(:ui_theme).and_return ''
|
|
expect(Themes.application_theme_identifier).to be_nil
|
|
end
|
|
|
|
it 'returns nil for nil' do
|
|
allow(Setting).to receive(:ui_theme).and_return nil
|
|
expect(Themes.application_theme_identifier).to be_nil
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|