Commit 13b60da336f95adbcd365033d324d948bc7d6efe
Exists in
master
and in
29 other branches
Merge branch 'AI2897-environment_theme' into 'master'
Ai2897 Environment Theme http://noosfero.org/Development/ActionItem2897 The file controller/themes_controller.rb is needed because it is inherited by controller/my_profile/profile_themes_controller.rb and controller/admin/environment_themes_controller.rb, it is a generalization. Before this functionality was created, there was only one file called controller/my_profile/themes_controller.rb.
Showing
28 changed files
with
830 additions
and
631 deletions
Show diff stats
... | ... | @@ -0,0 +1,75 @@ |
1 | +class ProfileThemesController < ThemesController | |
2 | + | |
3 | + needs_profile | |
4 | + | |
5 | + protect 'edit_appearance', :profile | |
6 | + | |
7 | + no_design_blocks | |
8 | + | |
9 | + def target | |
10 | + @target = profile | |
11 | + end | |
12 | + | |
13 | + def new | |
14 | + if !request.xhr? | |
15 | + id = params[:name] ? params[:name].to_slug : 'my-theme' | |
16 | + t = Theme.new(id, :name => params[:name], :owner => profile, :public => false) | |
17 | + t.save | |
18 | + redirect_to :action => 'index' | |
19 | + else | |
20 | + render :action => 'new', :layout => false | |
21 | + end | |
22 | + end | |
23 | + | |
24 | + def edit | |
25 | + @theme = profile.find_theme(params[:id]) | |
26 | + @css_files = @theme.css_files | |
27 | + @image_files = @theme.image_files | |
28 | + end | |
29 | + | |
30 | + def add_css | |
31 | + @theme = profile.find_theme(params[:id]) | |
32 | + if request.xhr? | |
33 | + render :action => 'add_css', :layout => false | |
34 | + else | |
35 | + @theme.add_css(params[:css]) | |
36 | + redirect_to :action => 'edit', :id => @theme.id | |
37 | + end | |
38 | + end | |
39 | + | |
40 | + def css_editor | |
41 | + @theme = profile.find_theme(params[:id]) | |
42 | + @css = params[:css] | |
43 | + | |
44 | + @code = @theme.read_css(@css) | |
45 | + render :action => 'css_editor', :layout => false | |
46 | + end | |
47 | + | |
48 | + post_only :update_css | |
49 | + def update_css | |
50 | + @theme = profile.find_theme(params[:id]) | |
51 | + @theme.update_css(params[:css], params[:csscode]) | |
52 | + redirect_to :action => 'edit', :id => @theme.id | |
53 | + end | |
54 | + | |
55 | + def add_image | |
56 | + @theme = profile.find_theme(params[:id]) | |
57 | + if request.xhr? | |
58 | + render :action => 'add_image', :layout => false | |
59 | + else | |
60 | + @theme.add_image(params[:image].original_filename, params[:image].read) | |
61 | + redirect_to :action => 'edit', :id => @theme.id | |
62 | + end | |
63 | + end | |
64 | + | |
65 | + def start_test | |
66 | + session[:theme] = params[:id] | |
67 | + redirect_to :controller => 'content_viewer', :profile => profile.identifier, :action => 'view_page' | |
68 | + end | |
69 | + | |
70 | + def stop_test | |
71 | + session[:theme] = nil | |
72 | + redirect_to :action => 'index' | |
73 | + end | |
74 | + | |
75 | +end | ... | ... |
app/controllers/my_profile/themes_controller.rb
... | ... | @@ -1,91 +0,0 @@ |
1 | -class ThemesController < MyProfileController | |
2 | - | |
3 | - protect 'edit_appearance', :profile | |
4 | - no_design_blocks | |
5 | - | |
6 | - def set | |
7 | - profile.update_theme(params[:id]) | |
8 | - redirect_to :action => 'index' | |
9 | - end | |
10 | - | |
11 | - def unset | |
12 | - profile.update_theme(nil) | |
13 | - redirect_to :action => 'index' | |
14 | - end | |
15 | - | |
16 | - def index | |
17 | - @themes = profile.environment.themes + Theme.approved_themes(profile) | |
18 | - @current_theme = profile.theme | |
19 | - | |
20 | - @layout_templates = LayoutTemplate.all | |
21 | - @current_template = profile.layout_template | |
22 | - end | |
23 | - | |
24 | - def new | |
25 | - if !request.xhr? | |
26 | - id = params[:name] ? params[:name].to_slug : 'my-theme' | |
27 | - t = Theme.new(id, :name => params[:name], :owner => profile, :public => false) | |
28 | - t.save | |
29 | - redirect_to :action => 'index' | |
30 | - else | |
31 | - render :action => 'new', :layout => false | |
32 | - end | |
33 | - end | |
34 | - | |
35 | - def edit | |
36 | - @theme = profile.find_theme(params[:id]) | |
37 | - @css_files = @theme.css_files | |
38 | - @image_files = @theme.image_files | |
39 | - end | |
40 | - | |
41 | - def add_css | |
42 | - @theme = profile.find_theme(params[:id]) | |
43 | - if request.xhr? | |
44 | - render :action => 'add_css', :layout => false | |
45 | - else | |
46 | - @theme.add_css(params[:css]) | |
47 | - redirect_to :action => 'edit', :id => @theme.id | |
48 | - end | |
49 | - end | |
50 | - | |
51 | - def css_editor | |
52 | - @theme = profile.find_theme(params[:id]) | |
53 | - @css = params[:css] | |
54 | - | |
55 | - @code = @theme.read_css(@css) | |
56 | - render :action => 'css_editor', :layout => false | |
57 | - end | |
58 | - | |
59 | - post_only :update_css | |
60 | - def update_css | |
61 | - @theme = profile.find_theme(params[:id]) | |
62 | - @theme.update_css(params[:css], params[:csscode]) | |
63 | - redirect_to :action => 'edit', :id => @theme.id | |
64 | - end | |
65 | - | |
66 | - def add_image | |
67 | - @theme = profile.find_theme(params[:id]) | |
68 | - if request.xhr? | |
69 | - render :action => 'add_image', :layout => false | |
70 | - else | |
71 | - @theme.add_image(params[:image].original_filename, params[:image].read) | |
72 | - redirect_to :action => 'edit', :id => @theme.id | |
73 | - end | |
74 | - end | |
75 | - | |
76 | - def start_test | |
77 | - session[:theme] = params[:id] | |
78 | - redirect_to :controller => 'content_viewer', :profile => profile.identifier, :action => 'view_page' | |
79 | - end | |
80 | - | |
81 | - def stop_test | |
82 | - session[:theme] = nil | |
83 | - redirect_to :action => 'index' | |
84 | - end | |
85 | - | |
86 | - def set_layout_template | |
87 | - profile.update_layout_template(params[:id]) | |
88 | - redirect_to :action => 'index' | |
89 | - end | |
90 | - | |
91 | -end |
... | ... | @@ -0,0 +1,42 @@ |
1 | +class ThemesController < ApplicationController | |
2 | + | |
3 | + before_filter :login_required | |
4 | + | |
5 | + no_design_blocks | |
6 | + | |
7 | + # attr_reader :target | |
8 | + | |
9 | + def target | |
10 | + @target | |
11 | + end | |
12 | + | |
13 | + def index | |
14 | + @environment = environment | |
15 | + @themes = environment.themes + Theme.approved_themes(target) | |
16 | + | |
17 | + @current_theme = target.theme | |
18 | + | |
19 | + @layout_templates = LayoutTemplate.all | |
20 | + @current_template = target.layout_template | |
21 | + end | |
22 | + | |
23 | + def set | |
24 | + target.update_theme(params[:id]) | |
25 | + redirect_to :action => 'index' | |
26 | + end | |
27 | + | |
28 | + def unset | |
29 | + if target.kind_of?(Environment) | |
30 | + target.update_theme('default') | |
31 | + else | |
32 | + target.update_theme(nil) | |
33 | + end | |
34 | + redirect_to :action => 'index' | |
35 | + end | |
36 | + | |
37 | + def set_layout_template | |
38 | + target.update_layout_template(params[:id]) | |
39 | + redirect_to :action => 'index' | |
40 | + end | |
41 | + | |
42 | +end | ... | ... |
app/models/environment.rb
... | ... | @@ -26,7 +26,8 @@ class Environment < ActiveRecord::Base |
26 | 26 | 'manage_environment_users' => N_('Manage environment users'), |
27 | 27 | 'manage_environment_templates' => N_('Manage environment templates'), |
28 | 28 | 'manage_environment_licenses' => N_('Manage environment licenses'), |
29 | - 'manage_environment_trusted_sites' => N_('Manage environment trusted sites') | |
29 | + 'manage_environment_trusted_sites' => N_('Manage environment trusted sites'), | |
30 | + 'edit_appearance' => N_('Edit appearance'), | |
30 | 31 | } |
31 | 32 | |
32 | 33 | module Roles |
... | ... | @@ -677,6 +678,16 @@ class Environment < ActiveRecord::Base |
677 | 678 | end |
678 | 679 | end |
679 | 680 | |
681 | + def update_theme(theme) | |
682 | + self.theme = theme | |
683 | + self.save! | |
684 | + end | |
685 | + | |
686 | + def update_layout_template(template) | |
687 | + self.layout_template = template | |
688 | + self.save! | |
689 | + end | |
690 | + | |
680 | 691 | before_create do |env| |
681 | 692 | env.settings[:themes] ||= %w[ |
682 | 693 | aluminium | ... | ... |
app/views/admin_panel/index.rhtml
... | ... | @@ -6,6 +6,7 @@ |
6 | 6 | <tr><td><%= link_to _('Environment settings'), :action => 'site_info' %></td></tr> |
7 | 7 | <tr><td><%= link_to _('Features'), :controller => 'features' %></td></tr> |
8 | 8 | <tr><td><%= link_to _('Plugins'), :controller => 'plugins' %></td></tr> |
9 | + <tr><td><%= link_to _('Appearance'), :controller =>'environment_themes' %></td></tr> | |
9 | 10 | <tr><td><%= link_to _('Sideboxes'), :controller => 'environment_design'%></td></tr> |
10 | 11 | <tr><td><%= link_to _('Homepage'), :action => 'set_portal_community' %></td></tr> |
11 | 12 | <tr><td><%= link_to _('Licenses'), :controller =>'licenses' %></td></tr> | ... | ... |
app/views/profile_editor/index.rhtml
... | ... | @@ -22,7 +22,7 @@ |
22 | 22 | |
23 | 23 | <%= control_panel_button(_('Edit sideboxes'), 'blocks', :controller => 'profile_design', :action => 'index') %> |
24 | 24 | |
25 | - <%= control_panel_button(_('Edit Appearance'), 'design-editor', :controller => 'themes', :action => 'index') %> | |
25 | + <%= control_panel_button(_('Edit Appearance'), 'design-editor', :controller => 'profile_themes', :action => 'index') %> | |
26 | 26 | |
27 | 27 | <%= control_panel_button(_('Edit Header and Footer'), 'header-and-footer', :controller => 'profile_editor', :action => 'header_footer') unless profile.enterprise? && environment.enabled?('disable_header_and_footer') && !user.is_admin?(environment) %> |
28 | 28 | ... | ... |
... | ... | @@ -0,0 +1,11 @@ |
1 | +<h2><%= _('Add a CSS file') %></h2> | |
2 | + | |
3 | +<% form_tag do %> | |
4 | + <%= labelled_form_field(_('File name'), text_field_tag('css')) %> | |
5 | + | |
6 | + <% button_bar do %> | |
7 | + <%= submit_button(:add, _('Add')) %> | |
8 | + <%= lightbox_close_button(_('Cancel')) %> | |
9 | + <% end %> | |
10 | + | |
11 | +<% end %> | ... | ... |
... | ... | @@ -0,0 +1,13 @@ |
1 | +<h2><%= _('CSS code: "%s"') % @css %></h2> | |
2 | + | |
3 | +<% form_tag({:action => 'update_css', :id => @theme.id }, :name => 'csscode_form') do %> | |
4 | + <%= hidden_field_tag('css', @css) %> | |
5 | + <%= text_area_tag('csscode', @code, :id => "codepressWindow", :class => 'codepress css') %> | |
6 | + <% button_bar do %> | |
7 | + <%= submit_button(:save, _('Save')) %> | |
8 | + <% end %> | |
9 | +<% end %> | |
10 | + | |
11 | +<!--<script type='text/javascript'>--> | |
12 | + <!--CodePress.run();--> | |
13 | +<!--</script>--> | ... | ... |
... | ... | @@ -0,0 +1,41 @@ |
1 | +<form> | |
2 | + <%# FIXME %> | |
3 | + <h1 id='theme-name'> | |
4 | + <%= _('Editing theme "%s"') % @theme.name %> | |
5 | + <%= button(:eyes, _('Preview this theme'), :action => 'start_test', :id => @theme.id) %> | |
6 | + <%= button(:back, _('Back'), :action => 'index') %> | |
7 | + </h1> | |
8 | +</form> | |
9 | + | |
10 | + | |
11 | +<div id='css-files-list'> | |
12 | + <h2><%= _('CSS files') %></h2> | |
13 | + <ul> | |
14 | + <% for css in @css_files %> | |
15 | + <li><%= link_to_remote(css, :url => { :action => 'css_editor', :id => @theme.id, :css => css }, :update => { :success => 'css-code' }) %></li> | |
16 | + <% end %> | |
17 | + </ul> | |
18 | + <% button_bar do %> | |
19 | + <%= lightbox_button(:add, _('New CSS'), :action => 'add_css', :id => @theme.id) %> | |
20 | + <% end %> | |
21 | +</div> | |
22 | + | |
23 | +<div id='image-files-list'> | |
24 | + <h2><%= _('Images') %></h2> | |
25 | + <ul> | |
26 | + <% for image in @image_files %> | |
27 | + <li><%= image_tag("/user_themes/#{@theme.id}/images/#{image}") %></li> | |
28 | + <% end %> | |
29 | + </ul> | |
30 | + <% button_bar do %> | |
31 | + <%= lightbox_button(:add, _('Add image'), :action => 'add_image', :id => @theme.id) %> | |
32 | + <% end %> | |
33 | +</div> | |
34 | + | |
35 | +<div id='css-code'> | |
36 | + <center style='padding-top: 5em;'> | |
37 | + <em><%= _('Select a CSS file to edit') %></em> | |
38 | + </center> | |
39 | +</div> | |
40 | + | |
41 | +<%# javascript_include_tag 'codepress/codepress' %> | ... | ... |
... | ... | @@ -0,0 +1,48 @@ |
1 | +<%= render :partial => 'themes/select_template' %> | |
2 | +<%= render :partial => 'themes/select_theme' %> | |
3 | + | |
4 | +<% if environment.enabled?('user_themes') %> | |
5 | + <div id="user-themes" class="list-options"> | |
6 | + | |
7 | + <h2><%= _('My themes') %></h2> | |
8 | + | |
9 | + <% for themes in profile.themes.in_groups_of(3) %> | |
10 | + <div class="list-group"> | |
11 | + <% for theme in themes %><%= | |
12 | + if theme | |
13 | + | |
14 | + selected = theme.id == @current_theme | |
15 | + sel_html = selected ? | |
16 | + content_tag('big', _('(current)') ) : | |
17 | + link_to(_('Use this theme'), :action => 'set', :id => theme.id) | |
18 | + | |
19 | + content_tag( 'div', | |
20 | + image_tag( | |
21 | + '/images/icons-app/design-editor.png', | |
22 | + :alt => (_('The "%s" theme.') % theme.name)) + | |
23 | + '<div class="opt-info">' + | |
24 | + content_tag('strong', theme.name, :class => 'name') + | |
25 | + ' <br/> '+ sel_html +' <br/> ' + | |
26 | + link_to(_('Edit this theme'), :action => 'edit', :id => theme.id) + | |
27 | + ' <br/> ' + | |
28 | + link_to(_('Test this theme'), :action => 'start_test', :id => theme.id) + | |
29 | + '</div>', | |
30 | + :class => 'theme-opt list-opt' + (selected ? ' selected' : '') | |
31 | + ) | |
32 | + | |
33 | + end | |
34 | + %><% end %> | |
35 | + </div> | |
36 | + <% end %> | |
37 | + | |
38 | + </div><!-- end id="user-themes" --> | |
39 | +<% end %> | |
40 | + | |
41 | +<br style="clear:both" /> | |
42 | + | |
43 | +<% button_bar do %> | |
44 | + <% if environment.enabled?('user_themes') %> | |
45 | + <%= lightbox_button(:add, _('New theme ...'), :action => 'new') %> | |
46 | + <% end %> | |
47 | + <%= button(:back, _('Back'), :controller => 'profile_editor', :action => 'index') %> | |
48 | +<% end %> | ... | ... |
... | ... | @@ -0,0 +1,10 @@ |
1 | +<h2><%= _('Create new theme') %></h2> | |
2 | + | |
3 | +<% form_tag(:action => 'new') do %> | |
4 | + | |
5 | + <%= labelled_form_field(_('Name of the new theme:'), text_field_tag(:name)) %> | |
6 | + | |
7 | + <% button_bar do %> | |
8 | + <%= submit_button(:save, _('Create')) %> | |
9 | + <% end %> | |
10 | +<% end %> | ... | ... |
app/views/shared/theme_test_panel.rhtml
... | ... | @@ -6,8 +6,8 @@ |
6 | 6 | <p><small><em><%= _('You can move this window away to have a better visualization of specific parts of screen.') %></em></small></p> |
7 | 7 | |
8 | 8 | <% button_bar do %> |
9 | - <%= button(:ok, _('Finished testing'), :controller => 'themes', :profile => theme_owner, :action => 'stop_test', :id => current_theme) %> | |
10 | - <%= button(:edit, _('Edit theme'), :controller => 'themes', :profile => theme_owner, :action => 'edit', :id => current_theme) %> | |
9 | + <%= button(:ok, _('Finished testing'), :controller => 'profile_themes', :profile => theme_owner, :action => 'stop_test', :id => current_theme) %> | |
10 | + <%= button(:edit, _('Edit theme'), :controller => 'profile_themes', :profile => theme_owner, :action => 'edit', :id => current_theme) %> | |
11 | 11 | <% end %> |
12 | 12 | </div> |
13 | 13 | <%= draggable_element('theme-test-panel') %> | ... | ... |
... | ... | @@ -0,0 +1,35 @@ |
1 | +<h1><%= _('Editing Appearance') %></h1> | |
2 | + | |
3 | +<div id="template-options" class="list-options"> | |
4 | + | |
5 | +<h2><%= _('Select template') %></h2> | |
6 | + | |
7 | +<% for templates in @layout_templates.in_groups_of(3) %> | |
8 | + <div class="list-group"> | |
9 | + <% for template in templates %><%= | |
10 | + if template | |
11 | + base_content = image_tag( | |
12 | + "/designs/templates/#{template.id}/thumbnail.png", | |
13 | + :alt => _('The "%s" template')) + | |
14 | + '<div class="opt-info">'.html_safe + | |
15 | + content_tag('strong', template.name, :class => 'name') + | |
16 | + ' <br/> '.html_safe | |
17 | + | |
18 | + if @current_template == template.id # selected | |
19 | + content_tag( 'div', | |
20 | + base_content + content_tag('big', _('(current)') ) +'</div>'.html_safe, | |
21 | + :class => 'template-opt list-opt selected') | |
22 | + else # Not selected | |
23 | + link_to( | |
24 | + base_content +'</div>'.html_safe, | |
25 | + { :action => 'set_layout_template', :id => template.id }, | |
26 | + :class => 'template-opt list-opt') | |
27 | + end | |
28 | + | |
29 | + end | |
30 | + %><% end %> | |
31 | + </div> | |
32 | +<% end %> | |
33 | + | |
34 | +</div><!-- end id="template-options" --> | |
35 | + | ... | ... |
... | ... | @@ -0,0 +1,37 @@ |
1 | +<% if !@themes.empty? %> | |
2 | +<div id="theme-options" class="list-options"> | |
3 | + | |
4 | +<h2><%= _('Select theme') %></h2> | |
5 | +<%= button :home, _('Use the default theme'), { :action => 'unset'}, :method => 'post', :confirm => _('Are you sure you want to use the environment default theme?') %> | |
6 | + | |
7 | +<% for themes in @themes.in_groups_of(3) %> | |
8 | + <div class="list-group"> | |
9 | + <% for theme in themes %><%= | |
10 | + if theme | |
11 | + | |
12 | + base_content = image_tag( | |
13 | + "/designs/themes/#{theme.id}/preview.png", | |
14 | + :alt => (_('The "%s" theme.') % theme.name)) + | |
15 | + '<div class="opt-info">'.html_safe + | |
16 | + content_tag('strong', theme.name, :class => 'name') + | |
17 | + ' <br/> '.html_safe | |
18 | + | |
19 | + if theme.id == @current_theme # selected | |
20 | + content_tag( 'div', | |
21 | + base_content + content_tag('big', _('(current)') ) +'</div>'.html_safe, | |
22 | + :class => 'theme-opt list-opt selected') | |
23 | + else # Not selected | |
24 | + link_to( | |
25 | + base_content + '</div>'.html_safe, | |
26 | + { :action => 'set', :id => theme.id }, | |
27 | + :class => 'theme-opt list-opt') | |
28 | + end | |
29 | + | |
30 | + end | |
31 | + %><% end %> | |
32 | + </div> | |
33 | +<% end %> | |
34 | + | |
35 | +</div><!-- end id="theme-options" --> | |
36 | +<% end %> | |
37 | + | ... | ... |
app/views/themes/add_css.rhtml
... | ... | @@ -1,11 +0,0 @@ |
1 | -<h2><%= _('Add a CSS file') %></h2> | |
2 | - | |
3 | -<% form_tag do %> | |
4 | - <%= labelled_form_field(_('File name'), text_field_tag('css')) %> | |
5 | - | |
6 | - <% button_bar do %> | |
7 | - <%= submit_button(:add, _('Add')) %> | |
8 | - <%= lightbox_close_button(_('Cancel')) %> | |
9 | - <% end %> | |
10 | - | |
11 | -<% end %> |
app/views/themes/add_image.rhtml
app/views/themes/css_editor.rhtml
... | ... | @@ -1,13 +0,0 @@ |
1 | -<h2><%= _('CSS code: "%s"') % @css %></h2> | |
2 | - | |
3 | -<% form_tag({:action => 'update_css', :id => @theme.id }, :name => 'csscode_form') do %> | |
4 | - <%= hidden_field_tag('css', @css) %> | |
5 | - <%= text_area_tag('csscode', @code, :id => "codepressWindow", :class => 'codepress css') %> | |
6 | - <% button_bar do %> | |
7 | - <%= submit_button(:save, _('Save')) %> | |
8 | - <% end %> | |
9 | -<% end %> | |
10 | - | |
11 | -<!--<script type='text/javascript'>--> | |
12 | - <!--CodePress.run();--> | |
13 | -<!--</script>--> |
app/views/themes/edit.rhtml
... | ... | @@ -1,41 +0,0 @@ |
1 | -<form> | |
2 | - <%# FIXME %> | |
3 | - <h1 id='theme-name'> | |
4 | - <%= _('Editing theme "%s"') % @theme.name %> | |
5 | - <%= button(:eyes, _('Preview this theme'), :action => 'start_test', :id => @theme.id) %> | |
6 | - <%= button(:back, _('Back'), :action => 'index') %> | |
7 | - </h1> | |
8 | -</form> | |
9 | - | |
10 | - | |
11 | -<div id='css-files-list'> | |
12 | - <h2><%= _('CSS files') %></h2> | |
13 | - <ul> | |
14 | - <% for css in @css_files %> | |
15 | - <li><%= link_to_remote(css, :url => { :action => 'css_editor', :id => @theme.id, :css => css }, :update => { :success => 'css-code' }) %></li> | |
16 | - <% end %> | |
17 | - </ul> | |
18 | - <% button_bar do %> | |
19 | - <%= lightbox_button(:add, _('New CSS'), :action => 'add_css', :id => @theme.id) %> | |
20 | - <% end %> | |
21 | -</div> | |
22 | - | |
23 | -<div id='image-files-list'> | |
24 | - <h2><%= _('Images') %></h2> | |
25 | - <ul> | |
26 | - <% for image in @image_files %> | |
27 | - <li><%= image_tag("/user_themes/#{@theme.id}/images/#{image}") %></li> | |
28 | - <% end %> | |
29 | - </ul> | |
30 | - <% button_bar do %> | |
31 | - <%= lightbox_button(:add, _('Add image'), :action => 'add_image', :id => @theme.id) %> | |
32 | - <% end %> | |
33 | -</div> | |
34 | - | |
35 | -<div id='css-code'> | |
36 | - <center style='padding-top: 5em;'> | |
37 | - <em><%= _('Select a CSS file to edit') %></em> | |
38 | - </center> | |
39 | -</div> | |
40 | - | |
41 | -<%# javascript_include_tag 'codepress/codepress' %> |
app/views/themes/index.rhtml
... | ... | @@ -1,120 +0,0 @@ |
1 | -<h1><%= _('Editing Appearance') %></h1> | |
2 | - | |
3 | -<div id="template-options" class="list-options"> | |
4 | - | |
5 | -<h2><%= _('Select template') %></h2> | |
6 | - | |
7 | -<% for templates in @layout_templates.in_groups_of(3) %> | |
8 | - <div class="list-group"> | |
9 | - <% for template in templates %><%= | |
10 | - if template | |
11 | - base_content = image_tag( | |
12 | - "/designs/templates/#{template.id}/thumbnail.png", | |
13 | - :alt => _('The "%s" template')) + | |
14 | - '<div class="opt-info">'.html_safe + | |
15 | - content_tag('strong', template.name, :class => 'name') + | |
16 | - ' <br/> '.html_safe | |
17 | - | |
18 | - if @current_template == template.id # selected | |
19 | - content_tag( 'div', | |
20 | - base_content + content_tag('big', _('(current)') ) +'</div>'.html_safe, | |
21 | - :class => 'template-opt list-opt selected') | |
22 | - else # Not selected | |
23 | - link_to( | |
24 | - base_content +'</div>'.html_safe, | |
25 | - { :action => 'set_layout_template', :id => template.id }, | |
26 | - :class => 'template-opt list-opt') | |
27 | - end | |
28 | - | |
29 | - end | |
30 | - %><% end %> | |
31 | - </div> | |
32 | -<% end %> | |
33 | - | |
34 | -</div><!-- end id="template-options" --> | |
35 | - | |
36 | - | |
37 | -<% if !@themes.empty? %> | |
38 | -<div id="theme-options" class="list-options"> | |
39 | - | |
40 | -<h2><%= _('Select theme') %></h2> | |
41 | -<%= button :home, _('Use the default theme'), { :action => 'unset'}, :method => 'post', :confirm => _('Are you sure you want to use the environment default theme?') %> | |
42 | - | |
43 | -<% for themes in @themes.in_groups_of(3) %> | |
44 | - <div class="list-group"> | |
45 | - <% for theme in themes %><%= | |
46 | - if theme | |
47 | - | |
48 | - base_content = image_tag( | |
49 | - "/designs/themes/#{theme.id}/preview.png", | |
50 | - :alt => (_('The "%s" theme.') % theme.name)) + | |
51 | - '<div class="opt-info">'.html_safe + | |
52 | - content_tag('strong', theme.name, :class => 'name') + | |
53 | - ' <br/> '.html_safe | |
54 | - | |
55 | - if theme.id == @current_theme # selected | |
56 | - content_tag( 'div', | |
57 | - base_content + content_tag('big', _('(current)') ) +'</div>'.html_safe, | |
58 | - :class => 'theme-opt list-opt selected') | |
59 | - else # Not selected | |
60 | - link_to( | |
61 | - base_content + '</div>'.html_safe, | |
62 | - { :action => 'set', :id => theme.id }, | |
63 | - :class => 'theme-opt list-opt') | |
64 | - end | |
65 | - | |
66 | - end | |
67 | - %><% end %> | |
68 | - </div> | |
69 | -<% end %> | |
70 | - | |
71 | -</div><!-- end id="theme-options" --> | |
72 | -<% end %> | |
73 | - | |
74 | - | |
75 | - | |
76 | -<% if environment.enabled?('user_themes') %> | |
77 | - <div id="user-themes" class="list-options"> | |
78 | - | |
79 | - <h2><%= _('My themes') %></h2> | |
80 | - | |
81 | - <% for themes in profile.themes.in_groups_of(3) %> | |
82 | - <div class="list-group"> | |
83 | - <% for theme in themes %><%= | |
84 | - if theme | |
85 | - | |
86 | - selected = theme.id == @current_theme | |
87 | - sel_html = selected ? | |
88 | - content_tag('big', _('(current)') ) : | |
89 | - link_to(_('Use this theme'), :action => 'set', :id => theme.id) | |
90 | - | |
91 | - content_tag( 'div', | |
92 | - image_tag( | |
93 | - '/images/icons-app/design-editor.png', | |
94 | - :alt => (_('The "%s" theme.') % theme.name)) + | |
95 | - '<div class="opt-info">' + | |
96 | - content_tag('strong', theme.name, :class => 'name') + | |
97 | - ' <br/> '+ sel_html +' <br/> ' + | |
98 | - link_to(_('Edit this theme'), :action => 'edit', :id => theme.id) + | |
99 | - ' <br/> ' + | |
100 | - link_to(_('Test this theme'), :action => 'start_test', :id => theme.id) + | |
101 | - '</div>', | |
102 | - :class => 'theme-opt list-opt' + (selected ? ' selected' : '') | |
103 | - ) | |
104 | - | |
105 | - end | |
106 | - %><% end %> | |
107 | - </div> | |
108 | - <% end %> | |
109 | - | |
110 | - </div><!-- end id="user-themes" --> | |
111 | -<% end %> | |
112 | - | |
113 | -<br style="clear:both" /> | |
114 | - | |
115 | -<% button_bar do %> | |
116 | - <% if environment.enabled?('user_themes') %> | |
117 | - <%= lightbox_button(:add, _('New theme ...'), :action => 'new') %> | |
118 | - <% end %> | |
119 | - <%= button(:back, _('Back'), :controller => 'profile_editor', :action => 'index') %> | |
120 | -<% end %> |
app/views/themes/new.rhtml
public/stylesheets/application.css
... | ... | @@ -4323,7 +4323,7 @@ h1#agenda-title { |
4323 | 4323 | padding-left: 0px; |
4324 | 4324 | list-style-type: none; |
4325 | 4325 | } |
4326 | -/* ==> public/stylesheets/controller_themes.css <== */ | |
4326 | +/* ==> public/stylesheets/profile_controller_themes.css <== */ | |
4327 | 4327 | |
4328 | 4328 | .action-themes-index .button-bar { |
4329 | 4329 | padding-top: 20px; |
... | ... | @@ -4397,23 +4397,23 @@ h1#agenda-title { |
4397 | 4397 | #user-themes a:hover { |
4398 | 4398 | text-decoration: underline; |
4399 | 4399 | } |
4400 | -.controller-themes .template-preview-cell { | |
4400 | +.controller-profile_themes .template-preview-cell { | |
4401 | 4401 | text-align: center; |
4402 | 4402 | } |
4403 | -.controller-themes .theme-preview { | |
4403 | +.controller-profile_themes .theme-preview { | |
4404 | 4404 | border: 1px solid #BBB; |
4405 | 4405 | } |
4406 | -.controller-themes #css-files-list h2, .controller-themes #image-files-list h2 { | |
4406 | +.controller-profile_themes #css-files-list h2, .controller-profile_themes #image-files-list h2 { | |
4407 | 4407 | margin-top: 0px; |
4408 | 4408 | } |
4409 | -.controller-themes #css-files-list ul, .controller-themes #image-files-list ul, .controller-themes #css-code textarea { | |
4409 | +.controller-profile_themes #css-files-list ul, .controller-profile_themes #image-files-list ul, .controller-profile_themes #css-code textarea { | |
4410 | 4410 | height: 280px; |
4411 | 4411 | } |
4412 | -.controller-themes #css-files-list ul, .controller-themes #image-files-list ul { | |
4412 | +.controller-profile_themes #css-files-list ul, .controller-profile_themes #image-files-list ul { | |
4413 | 4413 | overflow: auto; |
4414 | 4414 | } |
4415 | 4415 | /* header stuff */ |
4416 | -.controller-themes #theme-name input { | |
4416 | +.controller-profile_themes #theme-name input { | |
4417 | 4417 | font-size: 18px; |
4418 | 4418 | border: 1px solid black; |
4419 | 4419 | background: white; |
... | ... | @@ -4422,78 +4422,78 @@ h1#agenda-title { |
4422 | 4422 | } |
4423 | 4423 | /* files list */ |
4424 | 4424 | |
4425 | -.controller-themes #css-files-list { | |
4425 | +.controller-profile_themes #css-files-list { | |
4426 | 4426 | width: 200px; |
4427 | 4427 | float: left; |
4428 | 4428 | margin-left: 10px; |
4429 | 4429 | } |
4430 | -.controller-themes #css-files-list ul { | |
4430 | +.controller-profile_themes #css-files-list ul { | |
4431 | 4431 | margin: 0px; |
4432 | 4432 | padding-left: 0px; |
4433 | 4433 | background: white; |
4434 | 4434 | border: 1px solid #bbb; |
4435 | 4435 | } |
4436 | -.controller-themes #css-files-list li { | |
4436 | +.controller-profile_themes #css-files-list li { | |
4437 | 4437 | list-style: none; |
4438 | 4438 | margin-bottom: 5px; |
4439 | 4439 | border-bottom: 1px solid #bbb; |
4440 | 4440 | } |
4441 | -.controller-themes #css-files-list li a { | |
4441 | +.controller-profile_themes #css-files-list li a { | |
4442 | 4442 | display: block; |
4443 | 4443 | padding: 1px 5px; |
4444 | 4444 | } |
4445 | -.controller-themes #css-files-list a:hover { | |
4445 | +.controller-profile_themes #css-files-list a:hover { | |
4446 | 4446 | color: red; |
4447 | 4447 | } |
4448 | 4448 | /* images list */ |
4449 | 4449 | |
4450 | -.controller-themes #image-files-list { | |
4450 | +.controller-profile_themes #image-files-list { | |
4451 | 4451 | width: 200px; |
4452 | 4452 | float: right; |
4453 | 4453 | margin-right: 10px; |
4454 | 4454 | } |
4455 | -.controller-themes #image-files-list ul { | |
4455 | +.controller-profile_themes #image-files-list ul { | |
4456 | 4456 | background: white; |
4457 | 4457 | border: 1px solid #bbb; |
4458 | 4458 | } |
4459 | -.controller-themes #image-files-list ul, .controller-themes #image-files-list li { | |
4459 | +.controller-profile_themes #image-files-list ul, .controller-profile_themes #image-files-list li { | |
4460 | 4460 | padding: 0px; |
4461 | 4461 | margin: 0px; |
4462 | 4462 | list-style: none; |
4463 | 4463 | } |
4464 | -.controller-themes #image-files-list li { | |
4464 | +.controller-profile_themes #image-files-list li { | |
4465 | 4465 | border-bottom: 1px solid #bbb; |
4466 | 4466 | padding: 5px 0px; |
4467 | 4467 | text-align: center; |
4468 | 4468 | } |
4469 | -.controller-themes #image-files-list img { | |
4469 | +.controller-profile_themes #image-files-list img { | |
4470 | 4470 | max-width: 98%; |
4471 | 4471 | max-height: 40px; |
4472 | 4472 | } |
4473 | -.controller-themes .msie6 #image-files-list img { | |
4473 | +.controller-profile_themes .msie6 #image-files-list img { | |
4474 | 4474 | width: 50%; |
4475 | 4475 | height: 40px; |
4476 | 4476 | } |
4477 | -.controller-themes #image-files-list li span { | |
4477 | +.controller-profile_themes #image-files-list li span { | |
4478 | 4478 | display: block; |
4479 | 4479 | width: 100%; |
4480 | 4480 | overflow: hidden; |
4481 | 4481 | } |
4482 | 4482 | /* textbox */ |
4483 | 4483 | |
4484 | -.controller-themes #css-code { | |
4484 | +.controller-profile_themes #css-code { | |
4485 | 4485 | margin-left: 220px; |
4486 | 4486 | margin-right: 220px; |
4487 | 4487 | } |
4488 | -.controller-themes .msie6 #css-code { | |
4488 | +.controller-profile_themes .msie6 #css-code { | |
4489 | 4489 | float: left; |
4490 | 4490 | margin-left: 20px; |
4491 | 4491 | margin-right: 240px; |
4492 | 4492 | } |
4493 | -.controller-themes #css-code textarea { | |
4493 | +.controller-profile_themes #css-code textarea { | |
4494 | 4494 | width: 100%; |
4495 | 4495 | } |
4496 | -.controller-themes .msie6 #css-code textarea { | |
4496 | +.controller-profile_themes .msie6 #css-code textarea { | |
4497 | 4497 | width: 500px; |
4498 | 4498 | } |
4499 | 4499 | /* highlights block stuff */ | ... | ... |
test/factories.rb
... | ... | @@ -55,7 +55,7 @@ module Noosfero::Factory |
55 | 55 | ###### old stuff to be rearranged |
56 | 56 | def create_admin_user(env) |
57 | 57 | admin_user = User.find_by_login('adminuser') || create_user('adminuser', :email => 'adminuser@noosfero.org', :password => 'adminuser', :password_confirmation => 'adminuser', :environment => env) |
58 | - admin_role = Role.find_by_name('admin_role') || Role.create!(:name => 'admin_role', :permissions => ['view_environment_admin_panel','edit_environment_features', 'edit_environment_design', 'manage_environment_categories', 'manage_environment_roles', 'manage_environment_trusted_sites', 'manage_environment_validators', 'manage_environment_users', 'manage_environment_templates', 'manage_environment_licenses']) | |
58 | + admin_role = Role.find_by_name('admin_role') || Role.create!(:name => 'admin_role', :permissions => ['view_environment_admin_panel','edit_environment_features', 'edit_environment_design', 'manage_environment_categories', 'manage_environment_roles', 'manage_environment_trusted_sites', 'manage_environment_validators', 'manage_environment_users', 'manage_environment_templates', 'manage_environment_licenses', 'edit_appearance']) | |
59 | 59 | RoleAssignment.create!(:accessor => admin_user.person, :role => admin_role, :resource => env) unless admin_user.person.role_assignments.map{|ra|[ra.role, ra.accessor, ra.resource]}.include?([admin_role, admin_user, env]) |
60 | 60 | admin_user.login |
61 | 61 | end | ... | ... |
... | ... | @@ -0,0 +1,140 @@ |
1 | +require File.dirname(__FILE__) + '/../test_helper' | |
2 | + | |
3 | +class EnvironmentThemesController; def rescue_action(e) raise e end; end | |
4 | + | |
5 | +class EnvironmentThemesControllerTest < ActionController::TestCase | |
6 | + | |
7 | + def setup | |
8 | + @controller = EnvironmentThemesController.new | |
9 | + @request = ActionController::TestRequest.new | |
10 | + @response = ActionController::TestResponse.new | |
11 | + | |
12 | + Theme.stubs(:user_themes_dir).returns(TMP_THEMES_DIR) | |
13 | + | |
14 | + @env = Environment.default | |
15 | + login = create_admin_user(@env) | |
16 | + login_as(login) | |
17 | + @profile = User.find_by_login(login).person | |
18 | + end | |
19 | + | |
20 | + def teardown | |
21 | + FileUtils.rm_rf(TMP_THEMES_DIR) | |
22 | + end | |
23 | + | |
24 | + TMP_THEMES_DIR = RAILS_ROOT + '/test/tmp/environment_themes_controller' | |
25 | + | |
26 | + should 'display themes that can be applied' do | |
27 | + env = Environment.default | |
28 | + Theme.stubs(:approved_themes).with(@env).returns([]) | |
29 | + t1 = 't1' | |
30 | + t2 = 't2' | |
31 | + t3 = 't3' | |
32 | + env.themes = [t1, t2] | |
33 | + env.save | |
34 | + | |
35 | + Theme.stubs(:system_themes).returns([Theme.new(t1), Theme.new(t2), Theme.new(t3)]) | |
36 | + get :index | |
37 | + | |
38 | + %w[ t1 t2 ].each do |item| | |
39 | + assert_tag :tag => 'a', :attributes => { :href => "/admin/environment_themes/set/#{item}" } | |
40 | + end | |
41 | + | |
42 | + assert_no_tag :tag => 'a', :attributes => { :href => "/admin/environment_themes/set/t3" } | |
43 | + end | |
44 | + | |
45 | + should 'highlight current theme' do | |
46 | + env = Environment.default | |
47 | + t1 = 'one' | |
48 | + t2 = 'two' | |
49 | + env.themes = [t1, t2] | |
50 | + env.save | |
51 | + | |
52 | + Theme.stubs(:system_themes).returns([Theme.new(t1), Theme.new(t2)]) | |
53 | + env.update_theme(t1) | |
54 | + get :index | |
55 | + | |
56 | + assert_tag :attributes => { :class => 'theme-opt list-opt selected' } | |
57 | + assert_no_tag :tag => 'a', :attributes => { :href => "/admin/environment_themes/set/one" } | |
58 | + end | |
59 | + | |
60 | + should 'save selection of theme' do | |
61 | + get :set, :id => 'onetheme' | |
62 | + env = Environment.default | |
63 | + assert_equal 'onetheme', env.theme | |
64 | + end | |
65 | + | |
66 | + | |
67 | + should 'unset selection of theme' do | |
68 | + get :unset | |
69 | + env = Environment.default | |
70 | + assert_equal 'default', env.theme | |
71 | + end | |
72 | + | |
73 | + should 'display link to use the default theme' do | |
74 | + env = Environment.default | |
75 | + env.themes = ['new-theme'] | |
76 | + env.save | |
77 | + | |
78 | + Theme.stubs(:system_themes).returns([Theme.new('new-theme')]) | |
79 | + | |
80 | + get :index | |
81 | + assert_tag :tag => 'a', :attributes => { :href => "/admin/environment_themes/unset" } | |
82 | + end | |
83 | + | |
84 | + should 'point back to admin panel' do | |
85 | + get :index | |
86 | + assert_tag :tag => 'a', :attributes => { :href => '/admin' }, :content => 'Back' | |
87 | + end | |
88 | + | |
89 | + should 'list templates' do | |
90 | + all = LayoutTemplate.all | |
91 | + | |
92 | + LayoutTemplate.expects(:all).returns(all) | |
93 | + get :index | |
94 | + assert_same all, assigns(:layout_templates) | |
95 | + end | |
96 | + | |
97 | + should 'display links to set template' do | |
98 | + env = Environment.default | |
99 | + env.layout_template = 'rightbar' | |
100 | + env.save! | |
101 | + t1 = LayoutTemplate.find('default') | |
102 | + t2 = LayoutTemplate.find('leftbar') | |
103 | + LayoutTemplate.expects(:all).returns([t1, t2]) | |
104 | + | |
105 | + get :index | |
106 | + assert_tag :tag => 'a', :attributes => { :href => "/admin/environment_themes/set_layout_template/default"} | |
107 | + assert_tag :tag => 'a', :attributes => { :href => "/admin/environment_themes/set_layout_template/leftbar"} | |
108 | + end | |
109 | + | |
110 | + should 'highlight current template' do | |
111 | + env = Environment.default | |
112 | + env.update_attributes!(:layout_template => 'default') | |
113 | + env.layout_template = 'default' | |
114 | + | |
115 | + t1 = LayoutTemplate.find('default') | |
116 | + t2 = LayoutTemplate.find('leftbar') | |
117 | + LayoutTemplate.expects(:all).returns([t1, t2]) | |
118 | + | |
119 | + get :index | |
120 | + assert_tag :attributes => { :class => 'template-opt list-opt selected' } | |
121 | + assert_no_tag :tag => 'a', :attributes => { :href => "/admin/environment_themes/set_layout_template/default"} | |
122 | + end | |
123 | + | |
124 | + should 'set template' do | |
125 | + env = Environment.default | |
126 | + post :set_layout_template, :id => 'leftbar' | |
127 | + env.reload | |
128 | + assert_equal 'leftbar', env.layout_template | |
129 | + assert_redirected_to :action => 'index' | |
130 | + end | |
131 | + | |
132 | + should 'not display the "Select themes" section if there are no themes to choose from' do | |
133 | + env = Environment.default | |
134 | + env.themes = []; env.save! | |
135 | + Theme.stubs(:system_themes_dir).returns(TMP_THEMES_DIR) # an empty dir | |
136 | + get :index | |
137 | + assert_no_tag :content => "Select theme" | |
138 | + end | |
139 | + | |
140 | +end | ... | ... |
... | ... | @@ -0,0 +1,313 @@ |
1 | +require File.dirname(__FILE__) + '/../test_helper' | |
2 | +# require 'profile_themes_controller' | |
3 | + | |
4 | +class ProfileThemesController; def rescue_action(e) raise e end; end | |
5 | + | |
6 | +class ProfileThemesControllerTest < ActionController::TestCase | |
7 | + | |
8 | + def setup | |
9 | + @controller = ProfileThemesController.new | |
10 | + @request = ActionController::TestRequest.new | |
11 | + @response = ActionController::TestResponse.new | |
12 | + | |
13 | + Theme.stubs(:user_themes_dir).returns(TMP_THEMES_DIR) | |
14 | + | |
15 | + @profile = create_user('testinguser').person | |
16 | + login_as('testinguser') | |
17 | + | |
18 | + @env = Environment.default | |
19 | + @env.enable('user_themes') | |
20 | + @env.save! | |
21 | + end | |
22 | + attr_reader :profile, :env | |
23 | + | |
24 | + def teardown | |
25 | + FileUtils.rm_rf(TMP_THEMES_DIR) | |
26 | + end | |
27 | + | |
28 | + TMP_THEMES_DIR = RAILS_ROOT + '/test/tmp/profile_themes_controller' | |
29 | + | |
30 | + should 'display themes that can be applied' do | |
31 | + env = Environment.default | |
32 | + Theme.stubs(:approved_themes).with(@profile).returns([Theme.new('t1', :name => 't1')]) | |
33 | + t2 = 't2' | |
34 | + t3 = 't3' | |
35 | + env.themes = [t2] | |
36 | + env.save | |
37 | + | |
38 | + Theme.stubs(:system_themes).returns([Theme.new(t2), Theme.new(t3)]) | |
39 | + get :index, :profile => 'testinguser' | |
40 | + | |
41 | + %w[ t1 t2 ].each do |item| | |
42 | + assert_tag :tag => 'a', :attributes => { :href => "/myprofile/testinguser/profile_themes/set/#{item}" } | |
43 | + end | |
44 | + | |
45 | + assert_no_tag :tag => 'a', :attributes => { :href => "/myprofile/testinguser/profile_themes/set/t3" } | |
46 | + end | |
47 | + | |
48 | + should 'highlight current theme' do | |
49 | + env = Environment.default | |
50 | + t1 = 'one' | |
51 | + t2 = 'two' | |
52 | + env.themes = [t1, t2] | |
53 | + env.save | |
54 | + | |
55 | + Theme.stubs(:system_themes).returns([Theme.new(t1), Theme.new(t2)]) | |
56 | + profile.update_theme(t1) | |
57 | + get :index, :profile => 'testinguser' | |
58 | + | |
59 | + assert_tag :attributes => { :class => 'theme-opt list-opt selected' } | |
60 | + assert_no_tag :tag => 'a', :attributes => { :href => "/myprofile/testinguser/profile_themes/set/one" } | |
61 | + end | |
62 | + | |
63 | + should 'display list of my themes for edition' do | |
64 | + Theme.create('three', :owner => profile) | |
65 | + Theme.create('four', :owner => profile) | |
66 | + | |
67 | + get :index, :profile => 'testinguser' | |
68 | + | |
69 | + %w[ three four ].each do |item| | |
70 | + assert_tag :tag => 'a', :attributes => { :href => "/myprofile/testinguser/profile_themes/edit/#{item}" } | |
71 | + end | |
72 | + end | |
73 | + | |
74 | + should 'save selection of theme' do | |
75 | + get :set, :profile => 'testinguser', :id => 'onetheme' | |
76 | + profile = Profile.find(@profile.id) | |
77 | + assert_equal 'onetheme', profile.theme | |
78 | + end | |
79 | + | |
80 | + should 'save selection of theme even if model is invalid' do | |
81 | + @profile.sex = nil | |
82 | + @profile.save! | |
83 | + @profile.environment.custom_person_fields = { 'sex' => {'required' => 'true', 'active' => 'true'} }; @profile.environment.save! | |
84 | + | |
85 | + get :set, :profile => 'testinguser', :id => 'onetheme' | |
86 | + profile = Profile.find(@profile.id) | |
87 | + assert_equal 'onetheme', profile.theme | |
88 | + end | |
89 | + | |
90 | + should 'unset selection of theme' do | |
91 | + get :unset, :profile => 'testinguser' | |
92 | + assert_equal nil, profile.theme | |
93 | + end | |
94 | + | |
95 | + should 'display link to use the default theme' do | |
96 | + env = Environment.default | |
97 | + env.themes = ['new-theme'] | |
98 | + env.save | |
99 | + | |
100 | + Theme.stubs(:system_themes).returns([Theme.new('new-theme')]) | |
101 | + | |
102 | + get :index, :profile => 'testinguser' | |
103 | + assert_tag :tag => 'a', :attributes => { :href => "/myprofile/testinguser/profile_themes/unset" } | |
104 | + end | |
105 | + | |
106 | + should 'point back to control panel' do | |
107 | + get :index, :profile => 'testinguser' | |
108 | + assert_tag :tag => 'a', :attributes => { :href => '/myprofile/testinguser' }, :content => 'Back' | |
109 | + end | |
110 | + | |
111 | + should 'display screen for creating new theme' do | |
112 | + @request.expects(:xhr?).returns(true).at_least_once | |
113 | + get :new, :profile => 'testinguser' | |
114 | + assert_tag :tag => 'form', :attributes => { :action => '/myprofile/testinguser/profile_themes/new', :method => /post/i }, :descendant => { :tag => 'input', :attributes => { :type => 'text', :name => 'name' } } | |
115 | + end | |
116 | + | |
117 | + should 'create a new theme' do | |
118 | + post :new, :profile => 'testinguser', :name => 'My theme' | |
119 | + | |
120 | + ok('theme should be created') do | |
121 | + profile.themes.first.id == 'my-theme' | |
122 | + end | |
123 | + end | |
124 | + | |
125 | + should 'edit a theme' do | |
126 | + theme = Theme.create('mytheme', :owner => profile) | |
127 | + get :edit, :profile => 'testinguser', :id => 'mytheme' | |
128 | + | |
129 | + assert_equal theme, assigns(:theme) | |
130 | + end | |
131 | + | |
132 | + should 'list CSS files in theme' do | |
133 | + theme = Theme.create('mytheme', :owner => profile) | |
134 | + theme.add_css('one.css') | |
135 | + theme.add_css('two.css') | |
136 | + | |
137 | + get :edit, :profile => 'testinguser', :id => 'mytheme' | |
138 | + | |
139 | + %w[ one.css two.css ].each do |item| | |
140 | + assert_includes assigns(:css_files), item | |
141 | + assert_tag :tag => 'li', :descendant => { :tag => 'a', :content => item} | |
142 | + end | |
143 | + end | |
144 | + | |
145 | + should 'display dialog for creating new CSS' do | |
146 | + theme = Theme.create('mytheme', :owner => profile) | |
147 | + @request.stubs(:xhr?).returns(true) | |
148 | + get :add_css, :profile => 'testinguser', :id => 'mytheme' | |
149 | + | |
150 | + assert_tag :tag => 'form', :attributes => { :action => '/myprofile/testinguser/profile_themes/add_css/mytheme', :method => /post/i} | |
151 | + assert_tag :tag => 'input', :attributes => { :name => 'css', :type => 'text' } | |
152 | + assert_tag :tag => 'input', :attributes => { :type => 'submit' } | |
153 | + end | |
154 | + | |
155 | + should 'be able to add new CSS to theme' do | |
156 | + theme = Theme.create('mytheme', :owner => profile) | |
157 | + post :add_css, :profile => 'testinguser', :id => 'mytheme', :css => 'test.css' | |
158 | + | |
159 | + assert_response :redirect | |
160 | + | |
161 | + reloaded_theme = Theme.find('mytheme') | |
162 | + assert_includes reloaded_theme.css_files, 'test.css' | |
163 | + end | |
164 | + | |
165 | + should 'load code from a given CSS file' do | |
166 | + theme = Theme.create('mytheme', :owner => profile); theme.update_css('test.css', '/* sample code */') | |
167 | + get :css_editor, :profile => 'testinguser', :id => 'mytheme', :css => 'test.css' | |
168 | + | |
169 | + assert_tag :tag => 'form', :attributes => { :action => '/myprofile/testinguser/profile_themes/update_css/mytheme' }, :descendant => { :tag => 'textarea', :content => '/* sample code */' } | |
170 | + end | |
171 | + | |
172 | + should 'be able to save CSS code' do | |
173 | + theme = Theme.create('mytheme', :owner => profile); theme.update_css('test.css', '/* sample code */') | |
174 | + get :css_editor, :profile => 'testinguser', :id => 'mytheme', :css => 'test.css' | |
175 | + | |
176 | + assert_tag :tag => 'form', :attributes => { :action => '/myprofile/testinguser/profile_themes/update_css/mytheme' }, :descendant => { :tag => 'input', :attributes => { :type => 'submit' } } | |
177 | + assert_tag :tag => 'form', :attributes => { :action => '/myprofile/testinguser/profile_themes/update_css/mytheme' }, :descendant => { :tag => 'input', :attributes => { :type => 'hidden', :name => 'css', :value => 'test.css' } } | |
178 | + end | |
179 | + | |
180 | + should 'update css code when saving' do | |
181 | + theme = Theme.create('mytheme', :owner => profile); theme.update_css('test.css', '/* sample code */') | |
182 | + post :update_css, :profile => 'testinguser', :id => 'mytheme', :css => 'test.css', :csscode => 'body { background: white; }' | |
183 | + assert_equal 'body { background: white; }', theme.read_css('test.css') | |
184 | + end | |
185 | + | |
186 | + should 'list image files in theme' do | |
187 | + theme = Theme.create('mytheme', :owner => profile) | |
188 | + theme.add_image('one.png', 'FAKE IMAGE DATA 1') | |
189 | + theme.add_image('two.png', 'FAKE IMAGE DATA 2') | |
190 | + | |
191 | + get :edit, :profile => 'testinguser', :id => 'mytheme' | |
192 | + | |
193 | + assert_tag :tag => 'img', :attributes => { :src => '/user_themes/mytheme/images/one.png' } | |
194 | + assert_tag :tag => 'img', :attributes => { :src => '/user_themes/mytheme/images/two.png' } | |
195 | + end | |
196 | + | |
197 | + should 'display "add image" button' do | |
198 | + theme = Theme.create('mytheme', :owner => profile) | |
199 | + get :edit, :profile => 'testinguser', :id => 'mytheme' | |
200 | + | |
201 | + assert_tag :tag => 'a', :attributes => { :href => '/myprofile/testinguser/profile_themes/add_image/mytheme' } | |
202 | + end | |
203 | + | |
204 | + should 'display the "add image" dialog' do | |
205 | + theme = Theme.create('mytheme', :owner => profile) | |
206 | + @request.stubs(:xhr?).returns(true) | |
207 | + | |
208 | + get :add_image, :profile => 'testinguser', :id => 'mytheme' | |
209 | + assert_tag :tag => 'form', :attributes => { :action => '/myprofile/testinguser/profile_themes/add_image/mytheme', :method => /post/i, :enctype => 'multipart/form-data' }, :descendant => { :tag => 'input', :attributes => { :name => 'image', :type => 'file' } } | |
210 | + end | |
211 | + | |
212 | + should 'be able to add new image to theme' do | |
213 | + theme = Theme.create('mytheme', :owner => profile) | |
214 | + @request.stubs(:xhr?).returns(false) | |
215 | + | |
216 | + post :add_image, :profile => 'testinguser', :id => 'mytheme', :image => fixture_file_upload('/files/rails.png', 'image/png', :binary) | |
217 | + assert_redirected_to :action => "edit", :id => 'mytheme' | |
218 | + assert theme.image_files.include?('rails.png') | |
219 | + assert(system('diff', RAILS_ROOT + '/test/fixtures/files/rails.png', TMP_THEMES_DIR + '/mytheme/images/rails.png'), 'should put the correct uploaded file in the right place') | |
220 | + end | |
221 | + | |
222 | + should 'link to "test theme"' do | |
223 | + Theme.create('one', :owner => profile) | |
224 | + Theme.create('two', :owner => profile) | |
225 | + get :index, :profile => 'testinguser' | |
226 | + | |
227 | + %w[ one two ].each do |item| | |
228 | + assert_tag :tag => 'a', :attributes => { :href => '/myprofile/testinguser/profile_themes/start_test/' + item } | |
229 | + end | |
230 | + end | |
231 | + | |
232 | + should 'start testing theme' do | |
233 | + theme = Theme.create('theme-under-test', :owner => profile) | |
234 | + post :start_test, :profile => 'testinguser', :id => 'theme-under-test' | |
235 | + | |
236 | + assert_equal 'theme-under-test', session[:theme] | |
237 | + assert_redirected_to :controller => 'content_viewer', :profile => 'testinguser', :action => 'view_page' | |
238 | + end | |
239 | + | |
240 | + should 'stop testing theme' do | |
241 | + theme = Theme.create('theme-under-test', :owner => profile) | |
242 | + post :stop_test, :profile => 'testinguser', :id => 'theme-under-test' | |
243 | + | |
244 | + assert_nil session[:theme] | |
245 | + assert_redirected_to :action => 'index' | |
246 | + end | |
247 | + | |
248 | + should 'list templates' do | |
249 | + all = LayoutTemplate.all | |
250 | + | |
251 | + LayoutTemplate.expects(:all).returns(all) | |
252 | + get :index, :profile => 'testinguser' | |
253 | + assert_same all, assigns(:layout_templates) | |
254 | + end | |
255 | + | |
256 | + should 'display links to set template' do | |
257 | + profile.layout_template = 'rightbar' | |
258 | + profile.save! | |
259 | + t1 = LayoutTemplate.find('default') | |
260 | + t2 = LayoutTemplate.find('leftbar') | |
261 | + LayoutTemplate.expects(:all).returns([t1, t2]) | |
262 | + | |
263 | + get :index, :profile => 'testinguser' | |
264 | + assert_tag :tag => 'a', :attributes => { :href => "/myprofile/testinguser/profile_themes/set_layout_template/default"} | |
265 | + assert_tag :tag => 'a', :attributes => { :href => "/myprofile/testinguser/profile_themes/set_layout_template/leftbar"} | |
266 | + end | |
267 | + | |
268 | + should 'highlight current template' do | |
269 | + profile.layout_template = 'default' | |
270 | + profile.save! | |
271 | + | |
272 | + t1 = LayoutTemplate.find('default') | |
273 | + t2 = LayoutTemplate.find('leftbar') | |
274 | + LayoutTemplate.expects(:all).returns([t1, t2]) | |
275 | + | |
276 | + get :index, :profile => 'testinguser' | |
277 | + assert_tag :attributes => { :class => 'template-opt list-opt selected' } | |
278 | + assert_no_tag :tag => 'a', :attributes => { :href => "/myprofile/testinguser/profile_themes/set_layout_template/default"} | |
279 | + end | |
280 | + | |
281 | + should 'set template' do | |
282 | + post :set_layout_template, :profile => 'testinguser', :id => 'leftbar' | |
283 | + profile = Profile.find(@profile.id) | |
284 | + assert_equal 'leftbar', profile.layout_template | |
285 | + assert_redirected_to :action => 'index' | |
286 | + end | |
287 | + | |
288 | + should 'set template even if the model is invalid' do | |
289 | + @profile.sex = nil | |
290 | + @profile.save! | |
291 | + @profile.environment.custom_person_fields = { 'sex' => {'required' => 'true', 'active' => 'true'} }; @profile.environment.save! | |
292 | + | |
293 | + post :set_layout_template, :profile => 'testinguser', :id => 'leftbar' | |
294 | + profile = Profile.find(@profile.id) | |
295 | + assert_equal 'leftbar', profile.layout_template | |
296 | + assert_redirected_to :action => 'index' | |
297 | + end | |
298 | + | |
299 | + should 'not display "new theme" button when user themes are disabled' do | |
300 | + env.disable('user_themes') | |
301 | + env.save! | |
302 | + get :index, :profile => 'testinguser' | |
303 | + assert_no_tag :tag => 'a', :attributes => { :href => '/myprofile/testinguser/profile_themes/new' } | |
304 | + end | |
305 | + | |
306 | + should 'not display the "Select themes" section if there are no themes to choose from' do | |
307 | + env.themes = []; env.save! | |
308 | + Theme.stubs(:system_themes_dir).returns(TMP_THEMES_DIR) # an empty dir | |
309 | + get :index, :profile => "testinguser" | |
310 | + assert_no_tag :content => "Select theme" | |
311 | + end | |
312 | + | |
313 | +end | ... | ... |
test/functional/themes_controller_test.rb
... | ... | @@ -1,311 +0,0 @@ |
1 | -require File.dirname(__FILE__) + '/../test_helper' | |
2 | -require 'themes_controller' | |
3 | - | |
4 | -class ThemesController; def rescue_action(e) raise e end; end | |
5 | - | |
6 | -class ThemesControllerTest < ActionController::TestCase | |
7 | - | |
8 | - def setup | |
9 | - @controller = ThemesController.new | |
10 | - @request = ActionController::TestRequest.new | |
11 | - @response = ActionController::TestResponse.new | |
12 | - | |
13 | - Theme.stubs(:user_themes_dir).returns(TMP_THEMES_DIR) | |
14 | - | |
15 | - @profile = create_user('testinguser').person | |
16 | - login_as('testinguser') | |
17 | - | |
18 | - @env = Environment.default | |
19 | - @env.enable('user_themes') | |
20 | - @env.save! | |
21 | - end | |
22 | - attr_reader :profile, :env | |
23 | - | |
24 | - def teardown | |
25 | - FileUtils.rm_rf(TMP_THEMES_DIR) | |
26 | - end | |
27 | - | |
28 | - TMP_THEMES_DIR = RAILS_ROOT + '/test/tmp/themes_controller' | |
29 | - | |
30 | - should 'display themes that can be applied' do | |
31 | - env = Environment.default | |
32 | - Theme.stubs(:approved_themes).with(@profile).returns([Theme.new('t1', :name => 't1')]) | |
33 | - t2 = 't2' | |
34 | - t3 = 't3' | |
35 | - env.themes = [t2] | |
36 | - env.save | |
37 | - | |
38 | - Theme.stubs(:system_themes).returns([Theme.new(t2), Theme.new(t3)]) | |
39 | - get :index, :profile => 'testinguser' | |
40 | - | |
41 | - %w[ t1 t2 ].each do |item| | |
42 | - assert_tag :tag => 'a', :attributes => { :href => "/myprofile/testinguser/themes/set/#{item}" } | |
43 | - end | |
44 | - | |
45 | - assert_no_tag :tag => 'a', :attributes => { :href => "/myprofile/testinguser/themes/set/t3" } | |
46 | - end | |
47 | - | |
48 | - should 'highlight current theme' do | |
49 | - env = Environment.default | |
50 | - t1 = 'one' | |
51 | - t2 = 'two' | |
52 | - env.themes = [t1, t2] | |
53 | - env.save | |
54 | - | |
55 | - Theme.stubs(:system_themes).returns([Theme.new(t1), Theme.new(t2)]) | |
56 | - profile.update_theme(t1) | |
57 | - get :index, :profile => 'testinguser' | |
58 | - | |
59 | - assert_tag :attributes => { :class => 'theme-opt list-opt selected' } | |
60 | - assert_no_tag :tag => 'a', :attributes => { :href => "/myprofile/testinguser/themes/set/one" } | |
61 | - end | |
62 | - | |
63 | - should 'display list of my themes for edition' do | |
64 | - Theme.create('three', :owner => profile) | |
65 | - Theme.create('four', :owner => profile) | |
66 | - | |
67 | - get :index, :profile => 'testinguser' | |
68 | - | |
69 | - %w[ three four ].each do |item| | |
70 | - assert_tag :tag => 'a', :attributes => { :href => "/myprofile/testinguser/themes/edit/#{item}" } | |
71 | - end | |
72 | - end | |
73 | - | |
74 | - should 'save selection of theme' do | |
75 | - get :set, :profile => 'testinguser', :id => 'onetheme' | |
76 | - profile = Profile.find(@profile.id) | |
77 | - assert_equal 'onetheme', profile.theme | |
78 | - end | |
79 | - | |
80 | - should 'save selection of theme even if model is invalid' do | |
81 | - @profile.sex = nil | |
82 | - @profile.save! | |
83 | - @profile.environment.custom_person_fields = { 'sex' => {'required' => 'true', 'active' => 'true'} }; @profile.environment.save! | |
84 | - | |
85 | - get :set, :profile => 'testinguser', :id => 'onetheme' | |
86 | - profile = Profile.find(@profile.id) | |
87 | - assert_equal 'onetheme', profile.theme | |
88 | - end | |
89 | - | |
90 | - should 'unset selection of theme' do | |
91 | - get :unset, :profile => 'testinguser' | |
92 | - assert_equal nil, profile.theme | |
93 | - end | |
94 | - | |
95 | - should 'display link to use the default theme' do | |
96 | - env = Environment.default | |
97 | - env.themes = ['new-theme'] | |
98 | - env.save | |
99 | - | |
100 | - Theme.stubs(:system_themes).returns([Theme.new('new-theme')]) | |
101 | - | |
102 | - get :index, :profile => 'testinguser' | |
103 | - assert_tag :tag => 'a', :attributes => { :href => "/myprofile/testinguser/themes/unset" } | |
104 | - end | |
105 | - | |
106 | - should 'point back to control panel' do | |
107 | - get :index, :profile => 'testinguser' | |
108 | - assert_tag :tag => 'a', :attributes => { :href => '/myprofile/testinguser' }, :content => 'Back' | |
109 | - end | |
110 | - | |
111 | - should 'display screen for creating new theme' do | |
112 | - @request.expects(:xhr?).returns(true).at_least_once | |
113 | - get :new, :profile => 'testinguser' | |
114 | - assert_tag :tag => 'form', :attributes => { :action => '/myprofile/testinguser/themes/new', :method => /post/i }, :descendant => { :tag => 'input', :attributes => { :type => 'text', :name => 'name' } } | |
115 | - end | |
116 | - | |
117 | - should 'create a new theme' do | |
118 | - post :new, :profile => 'testinguser', :name => 'My theme' | |
119 | - | |
120 | - ok('theme should be created') do | |
121 | - profile.themes.first.id == 'my-theme' | |
122 | - end | |
123 | - end | |
124 | - | |
125 | - should 'edit a theme' do | |
126 | - theme = Theme.create('mytheme', :owner => profile) | |
127 | - get :edit, :profile => 'testinguser', :id => 'mytheme' | |
128 | - | |
129 | - assert_equal theme, assigns(:theme) | |
130 | - end | |
131 | - | |
132 | - should 'list CSS files in theme' do | |
133 | - theme = Theme.create('mytheme', :owner => profile) | |
134 | - theme.add_css('one.css') | |
135 | - theme.add_css('two.css') | |
136 | - | |
137 | - get :edit, :profile => 'testinguser', :id => 'mytheme' | |
138 | - | |
139 | - %w[ one.css two.css ].each do |item| | |
140 | - assert_includes assigns(:css_files), item | |
141 | - assert_tag :tag => 'li', :descendant => { :tag => 'a', :content => item} | |
142 | - end | |
143 | - end | |
144 | - | |
145 | - should 'display dialog for creating new CSS' do | |
146 | - theme = Theme.create('mytheme', :owner => profile) | |
147 | - @request.stubs(:xhr?).returns(true) | |
148 | - get :add_css, :profile => 'testinguser', :id => 'mytheme' | |
149 | - | |
150 | - assert_tag :tag => 'form', :attributes => { :action => '/myprofile/testinguser/themes/add_css/mytheme', :method => /post/i} | |
151 | - assert_tag :tag => 'input', :attributes => { :name => 'css', :type => 'text' } | |
152 | - assert_tag :tag => 'input', :attributes => { :type => 'submit' } | |
153 | - end | |
154 | - | |
155 | - should 'be able to add new CSS to theme' do | |
156 | - theme = Theme.create('mytheme', :owner => profile) | |
157 | - post :add_css, :profile => 'testinguser', :id => 'mytheme', :css => 'test.css' | |
158 | - | |
159 | - assert_response :redirect | |
160 | - | |
161 | - reloaded_theme = Theme.find('mytheme') | |
162 | - assert_includes reloaded_theme.css_files, 'test.css' | |
163 | - end | |
164 | - | |
165 | - should 'load code from a given CSS file' do | |
166 | - theme = Theme.create('mytheme', :owner => profile); theme.update_css('test.css', '/* sample code */') | |
167 | - get :css_editor, :profile => 'testinguser', :id => 'mytheme', :css => 'test.css' | |
168 | - | |
169 | - assert_tag :tag => 'form', :attributes => { :action => '/myprofile/testinguser/themes/update_css/mytheme' }, :descendant => { :tag => 'textarea', :content => '/* sample code */' } | |
170 | - end | |
171 | - | |
172 | - should 'be able to save CSS code' do | |
173 | - theme = Theme.create('mytheme', :owner => profile); theme.update_css('test.css', '/* sample code */') | |
174 | - get :css_editor, :profile => 'testinguser', :id => 'mytheme', :css => 'test.css' | |
175 | - | |
176 | - assert_tag :tag => 'form', :attributes => { :action => '/myprofile/testinguser/themes/update_css/mytheme' }, :descendant => { :tag => 'input', :attributes => { :type => 'submit' } } | |
177 | - assert_tag :tag => 'form', :attributes => { :action => '/myprofile/testinguser/themes/update_css/mytheme' }, :descendant => { :tag => 'input', :attributes => { :type => 'hidden', :name => 'css', :value => 'test.css' } } | |
178 | - end | |
179 | - | |
180 | - should 'update css code when saving' do | |
181 | - theme = Theme.create('mytheme', :owner => profile); theme.update_css('test.css', '/* sample code */') | |
182 | - post :update_css, :profile => 'testinguser', :id => 'mytheme', :css => 'test.css', :csscode => 'body { background: white; }' | |
183 | - assert_equal 'body { background: white; }', theme.read_css('test.css') | |
184 | - end | |
185 | - | |
186 | - should 'list image files in theme' do | |
187 | - theme = Theme.create('mytheme', :owner => profile) | |
188 | - theme.add_image('one.png', 'FAKE IMAGE DATA 1') | |
189 | - theme.add_image('two.png', 'FAKE IMAGE DATA 2') | |
190 | - | |
191 | - get :edit, :profile => 'testinguser', :id => 'mytheme' | |
192 | - | |
193 | - assert_tag :tag => 'img', :attributes => { :src => '/user_themes/mytheme/images/one.png' } | |
194 | - assert_tag :tag => 'img', :attributes => { :src => '/user_themes/mytheme/images/two.png' } | |
195 | - end | |
196 | - | |
197 | - should 'display "add image" button' do | |
198 | - theme = Theme.create('mytheme', :owner => profile) | |
199 | - get :edit, :profile => 'testinguser', :id => 'mytheme' | |
200 | - | |
201 | - assert_tag :tag => 'a', :attributes => { :href => '/myprofile/testinguser/themes/add_image/mytheme' } | |
202 | - end | |
203 | - | |
204 | - should 'display the "add image" dialog' do | |
205 | - theme = Theme.create('mytheme', :owner => profile) | |
206 | - @request.stubs(:xhr?).returns(true) | |
207 | - | |
208 | - get :add_image, :profile => 'testinguser', :id => 'mytheme' | |
209 | - assert_tag :tag => 'form', :attributes => { :action => '/myprofile/testinguser/themes/add_image/mytheme', :method => /post/i, :enctype => 'multipart/form-data' }, :descendant => { :tag => 'input', :attributes => { :name => 'image', :type => 'file' } } | |
210 | - end | |
211 | - | |
212 | - should 'be able to add new image to theme' do | |
213 | - theme = Theme.create('mytheme', :owner => profile) | |
214 | - @request.stubs(:xhr?).returns(false) | |
215 | - | |
216 | - post :add_image, :profile => 'testinguser', :id => 'mytheme', :image => fixture_file_upload('/files/rails.png', 'image/png', :binary) | |
217 | - assert_redirected_to :action => "edit", :id => 'mytheme' | |
218 | - assert theme.image_files.include?('rails.png') | |
219 | - assert(system('diff', RAILS_ROOT + '/test/fixtures/files/rails.png', TMP_THEMES_DIR + '/mytheme/images/rails.png'), 'should put the correct uploaded file in the right place') | |
220 | - end | |
221 | - | |
222 | - should 'link to "test theme"' do | |
223 | - Theme.create('one', :owner => profile) | |
224 | - Theme.create('two', :owner => profile) | |
225 | - get :index, :profile => 'testinguser' | |
226 | - | |
227 | - %w[ one two ].each do |item| | |
228 | - assert_tag :tag => 'a', :attributes => { :href => '/myprofile/testinguser/themes/start_test/' + item } | |
229 | - end | |
230 | - end | |
231 | - | |
232 | - should 'start testing theme' do | |
233 | - theme = Theme.create('theme-under-test', :owner => profile) | |
234 | - post :start_test, :profile => 'testinguser', :id => 'theme-under-test' | |
235 | - | |
236 | - assert_equal 'theme-under-test', session[:theme] | |
237 | - assert_redirected_to :controller => 'content_viewer', :profile => 'testinguser', :action => 'view_page' | |
238 | - end | |
239 | - | |
240 | - should 'stop testing theme' do | |
241 | - theme = Theme.create('theme-under-test', :owner => profile) | |
242 | - post :stop_test, :profile => 'testinguser', :id => 'theme-under-test' | |
243 | - | |
244 | - assert_nil session[:theme] | |
245 | - assert_redirected_to :action => 'index' | |
246 | - end | |
247 | - | |
248 | - should 'list templates' do | |
249 | - all = LayoutTemplate.all | |
250 | - | |
251 | - LayoutTemplate.expects(:all).returns(all) | |
252 | - get :index, :profile => 'testinguser' | |
253 | - assert_same all, assigns(:layout_templates) | |
254 | - end | |
255 | - | |
256 | - should 'display links to set template' do | |
257 | - profile.update_attributes!(:layout_template => 'rightbar') | |
258 | - t1 = LayoutTemplate.find('default') | |
259 | - t2 = LayoutTemplate.find('leftbar') | |
260 | - LayoutTemplate.expects(:all).returns([t1, t2]) | |
261 | - | |
262 | - get :index, :profile => 'testinguser' | |
263 | - assert_tag :tag => 'a', :attributes => { :href => "/myprofile/testinguser/themes/set_layout_template/default"} | |
264 | - assert_tag :tag => 'a', :attributes => { :href => "/myprofile/testinguser/themes/set_layout_template/leftbar"} | |
265 | - end | |
266 | - | |
267 | - should 'highlight current template' do | |
268 | - profile.update_attributes!(:layout_template => 'default') | |
269 | - | |
270 | - t1 = LayoutTemplate.find('default') | |
271 | - t2 = LayoutTemplate.find('leftbar') | |
272 | - LayoutTemplate.expects(:all).returns([t1, t2]) | |
273 | - | |
274 | - get :index, :profile => 'testinguser' | |
275 | - assert_tag :attributes => { :class => 'template-opt list-opt selected' } | |
276 | - assert_no_tag :tag => 'a', :attributes => { :href => "/myprofile/testinguser/themes/set_layout_template/default"} | |
277 | - end | |
278 | - | |
279 | - should 'set template' do | |
280 | - post :set_layout_template, :profile => 'testinguser', :id => 'leftbar' | |
281 | - profile = Profile.find(@profile.id) | |
282 | - assert_equal 'leftbar', profile.layout_template | |
283 | - assert_redirected_to :action => 'index' | |
284 | - end | |
285 | - | |
286 | - should 'set template even if the model is invalid' do | |
287 | - @profile.sex = nil | |
288 | - @profile.save! | |
289 | - @profile.environment.custom_person_fields = { 'sex' => {'required' => 'true', 'active' => 'true'} }; @profile.environment.save! | |
290 | - | |
291 | - post :set_layout_template, :profile => 'testinguser', :id => 'leftbar' | |
292 | - profile = Profile.find(@profile.id) | |
293 | - assert_equal 'leftbar', profile.layout_template | |
294 | - assert_redirected_to :action => 'index' | |
295 | - end | |
296 | - | |
297 | - should 'not display "new theme" button when user themes are disabled' do | |
298 | - env.disable('user_themes') | |
299 | - env.save! | |
300 | - get :index, :profile => 'testinguser' | |
301 | - assert_no_tag :tag => 'a', :attributes => { :href => '/myprofile/testinguser/themes/new' } | |
302 | - end | |
303 | - | |
304 | - should 'not display the "Select themes" section if there are no themes to choose from' do | |
305 | - env.themes = []; env.save! | |
306 | - Theme.stubs(:system_themes_dir).returns(TMP_THEMES_DIR) # an empty dir | |
307 | - get :index, :profile => "testinguser" | |
308 | - assert_no_tag :content => "Select theme" | |
309 | - end | |
310 | - | |
311 | -end |