Commit 89e0c33d3e031a1ed237ba07818c54bbb5ab8230

Authored by AntonioTerceiro
1 parent 229119fe

ActionItem122: starting to implement controller

git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@2391 3f533792-8f58-4932-b0fe-aaf55b0a4547
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
... ...
app/models/theme.rb 0 → 100644
... ... @@ -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
... ...
app/views/themes/index.rhtml 0 → 100644
... ... @@ -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
... ...
test/unit/theme_test.rb 0 → 100644
... ... @@ -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 +
... ...