Commit 89e0c33d3e031a1ed237ba07818c54bbb5ab8230
1 parent
229119fe
Exists in
master
and in
23 other branches
ActionItem122: starting to implement controller
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@2391 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
5 changed files
with
107 additions
and
4 deletions
Show diff stats
app/controllers/my_profile/themes_controller.rb
| 1 | -class ThemesController < ApplicationController | |
| 1 | +class ThemesController < MyProfileController | |
| 2 | + | |
| 2 | 3 | no_design_blocks |
| 4 | + | |
| 5 | + def set | |
| 6 | + profile.update_attributes!(:theme => params[:id]) | |
| 7 | + redirect_to :action => 'index' | |
| 8 | + end | |
| 9 | + | |
| 10 | + def index | |
| 11 | + @themes = Theme.system_themes | |
| 12 | + @selected_theme = profile.theme | |
| 13 | + end | |
| 14 | + | |
| 3 | 15 | end | ... | ... |
| ... | ... | @@ -0,0 +1,22 @@ |
| 1 | +class Theme | |
| 2 | + | |
| 3 | + attr_reader :id | |
| 4 | + | |
| 5 | + def initialize(id) | |
| 6 | + @id = id | |
| 7 | + end | |
| 8 | + | |
| 9 | + def name | |
| 10 | + id | |
| 11 | + end | |
| 12 | + | |
| 13 | + class << self | |
| 14 | + def system_themes | |
| 15 | + Dir.glob(RAILS_ROOT + '/public/designs/themes/*').map do |item| | |
| 16 | + File.basename(item) | |
| 17 | + end.map do |item| | |
| 18 | + new(item) | |
| 19 | + end | |
| 20 | + end | |
| 21 | + end | |
| 22 | +end | ... | ... |
| ... | ... | @@ -0,0 +1,14 @@ |
| 1 | +<h1><%= _('Editing Appearance') %></h1> | |
| 2 | + | |
| 3 | +<h2><%= _('Select theme') %></h2> | |
| 4 | + | |
| 5 | +<div> | |
| 6 | + <% for theme in @themes %> | |
| 7 | + <%= link_to image_tag('/images/icons-app/design-editor.png', :alt => (_('Select the "%s" theme.') % theme.name)) + content_tag('span', theme.name), :action => 'set', :id => theme.id %> | |
| 8 | + <% end %> | |
| 9 | +</div> | |
| 10 | + | |
| 11 | + | |
| 12 | +<% button_bar do %> | |
| 13 | + <%= button(:back, _('Back'), :controller => 'profile_editor', :action => 'index') %> | |
| 14 | +<% end %> | ... | ... |
test/functional/themes_controller_test.rb
| 1 | 1 | require File.dirname(__FILE__) + '/../test_helper' |
| 2 | 2 | |
| 3 | 3 | class ThemesControllerTest < ActionController::TestCase |
| 4 | - # Replace this with your real tests. | |
| 5 | - def test_truth | |
| 6 | - assert true | |
| 4 | + | |
| 5 | + should 'display list of themes for selection' do | |
| 6 | + profile = create_user('testinguser').person | |
| 7 | + Theme.expects(:system_themes).returns([Theme.new('first'), Theme.new('second')]) | |
| 8 | + get :index, :profile => 'testinguser' | |
| 9 | + | |
| 10 | + %w[ first second ].each do |item| | |
| 11 | + assert_tag :tag => 'a', :attributes => { :href => "/myprofile/testinguser/themes/set/#{item}" }, :descendant => { :tag => 'img' } | |
| 12 | + end | |
| 13 | + end | |
| 14 | + | |
| 15 | + should 'save selection of theme' do | |
| 16 | + profile = create_user('testinguser').person | |
| 17 | + | |
| 18 | + get :set, :profile => 'testinguser', :id => 'onetheme' | |
| 19 | + profile.reload | |
| 20 | + assert_equal 'onetheme', profile.theme | |
| 21 | + end | |
| 22 | + | |
| 23 | + should 'point back to control panel' do | |
| 24 | + create_user('testinguser').person | |
| 25 | + get :index, :profile => 'testinguser' | |
| 26 | + assert_tag :tag => 'a', :attributes => { :href => '/myprofile/testinguser' }, :content => 'Back' | |
| 7 | 27 | end |
| 28 | + | |
| 29 | + should 'check access control when choosing theme' | |
| 30 | + | |
| 31 | + should 'check access control when editing themes' | |
| 32 | + | |
| 33 | + should 'only allow environment-approved themes to be selected' | |
| 34 | + | |
| 35 | + should 'list user-created themes with link for editing' | |
| 36 | + | |
| 37 | + should 'offer to create new theme' | |
| 38 | + | |
| 39 | + should 'be able to save new theme' | |
| 40 | + | |
| 41 | + should 'be able to save existing theme' | |
| 42 | + | |
| 8 | 43 | end | ... | ... |
| ... | ... | @@ -0,0 +1,20 @@ |
| 1 | +require File.dirname(__FILE__) + '/../test_helper' | |
| 2 | + | |
| 3 | +class ThemeTest < ActiveSupport::TestCase | |
| 4 | + should 'list system themes' do | |
| 5 | + Dir.expects(:glob).with(RAILS_ROOT + '/public/designs/themes/*').returns( | |
| 6 | + [ | |
| 7 | + RAILS_ROOT + '/public/designs/themes/themeone', | |
| 8 | + RAILS_ROOT + '/public/designs/themes/themetwo', | |
| 9 | + RAILS_ROOT + '/public/designs/themes/themethree' | |
| 10 | + ]) | |
| 11 | + | |
| 12 | + assert_equal ['themeone', 'themetwo', 'themethree'], Theme.system_themes.map(&:id) | |
| 13 | + end | |
| 14 | + | |
| 15 | + should 'use id as name by default' do | |
| 16 | + assert_equal 'the-id', Theme.new('the-id').name | |
| 17 | + end | |
| 18 | + | |
| 19 | +end | |
| 20 | + | ... | ... |