Commit 91398d8a15ab6e0d30d539ade51aaa9b197d3eeb

Authored by AntonioTerceiro
1 parent 9a139d20

r267@sede: terceiro | 2007-07-29 23:41:06 -0300

ActionItem0: several stuff; working on design editor
 


git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@271 3f533792-8f58-4932-b0fe-aaf55b0a4547
vendor/plugins/design/lib/acts_as_design.rb
@@ -25,6 +25,13 @@ class ActiveRecord::Base @@ -25,6 +25,13 @@ class ActiveRecord::Base
25 serialize :design_data 25 serialize :design_data
26 attr_protected :design_data 26 attr_protected :design_data
27 27
  28 + after_create do |design|
  29 + template = Design::Template.find(design.template)
  30 + while design.boxes.size < template.number_of_boxes
  31 + design.boxes << Design::Box.new(:name => 'Block')
  32 + end
  33 + end
  34 +
28 def design_data 35 def design_data
29 self[:design_data] ||= Hash.new 36 self[:design_data] ||= Hash.new
30 end 37 end
vendor/plugins/design/lib/design.rb
1 require 'design/controller_methods' 1 require 'design/controller_methods'
2 2
3 require 'design/fixed_design_holder' 3 require 'design/fixed_design_holder'
4 -require 'design/proxy_design_holder' 4 +require 'design/template'
5 5
6 require 'design/helper' 6 require 'design/helper'
7 require 'design/editor' 7 require 'design/editor'
@@ -22,7 +22,7 @@ module Design @@ -22,7 +22,7 @@ module Design
22 22
23 if config.has_key?(:holder) 23 if config.has_key?(:holder)
24 holder_variable_name = config[:holder] 24 holder_variable_name = config[:holder]
25 - data[:design] = Design::ProxyDesignHolder.new(self.instance_variable_get("@#{holder_variable_name}")) 25 + data[:design] = self.instance_variable_get("@#{holder_variable_name}")
26 else 26 else
27 options = (config[:fixed].kind_of? Hash) ? config[:fixed] : {} 27 options = (config[:fixed].kind_of? Hash) ? config[:fixed] : {}
28 data[:design] = Design::FixedDesignHolder.new(options) 28 data[:design] = Design::FixedDesignHolder.new(options)
vendor/plugins/design/lib/design/editor.rb
@@ -6,27 +6,52 @@ module Design @@ -6,27 +6,52 @@ module Design
6 # from flexible_template 6 # from flexible_template
7 module Editor 7 module Editor
8 8
9 - def designer  
10 - end  
11 -  
12 - def flexible_template_edit_template?  
13 - @ft_config[:edit_mode] 9 + def design_editor
  10 +
  11 + if request.post?
  12 + design_editor_set_template
  13 + design_editor_set_theme
  14 + design_editor_set_icon_theme
  15 +
  16 + if self.class.design_plugin_config[:autosave] && design.respond_to?(:save)
  17 + design.save
  18 + end
  19 +
  20 + if request.xhr?
  21 + render :text => 'ok'
  22 + else
  23 + redirect_to :action => 'design_editor'
  24 + end
  25 +
  26 + else
  27 + render :action => 'design_editor'
  28 + end
14 end 29 end
15 -  
16 - # Set the default template to the profile  
17 - def set_default_template  
18 - set_template(design,params[:template_name]) if exist_template? params[:template_name] 30 +
  31 + private
  32 +
  33 + # Set to the owner the template choosed
  34 + def design_editor_set_template
  35 + if exists_template?(params[:template])
  36 + design.template = params[:template]
  37 + end
19 end 38 end
20 -  
21 - # Set the default theme to the profile  
22 - def set_default_theme  
23 - set_theme(design,params[:theme_name]) if exist_theme? params[:theme_name] 39 +
  40 + # Set to the owner the theme choosed
  41 + def design_editor_set_theme
  42 + if exists_theme?(params[:theme])
  43 + design.theme = params[:theme]
  44 + end
24 end 45 end
25 -  
26 - # Set the default icons theme to the profile  
27 - def set_default_icon_theme  
28 - set_icon_theme(design,params[:icon_theme_name]) if exist_icon_theme? params[:icon_theme_name] 46 +
  47 + # Set to the owner the icon_theme choosed
  48 + def design_editor_set_icon_theme
  49 + if request.post? && exists_icon_theme?(params[:icon_theme])
  50 + design.icon_theme = params[:icon_theme]
  51 + end
29 end 52 end
  53 +
  54 + # TODO: see below here
30 55
31 def flexible_template_set_sort_mode 56 def flexible_template_set_sort_mode
32 box = design.boxes.find(params[:box_id]) 57 box = design.boxes.find(params[:box_id])
@@ -97,23 +122,6 @@ module Design @@ -97,23 +122,6 @@ module Design
97 122
98 private 123 private
99 124
100 - # Set to the owner the theme choosed  
101 - def set_theme(object, theme_name)  
102 - object.flexible_template_theme = theme_name  
103 - object.save  
104 - end  
105 -  
106 - # Set to the owner the icons theme choosed  
107 - def set_icon_theme(object,icon_theme_name)  
108 - object.flexible_template_icon_theme = icon_theme_name  
109 - object.save  
110 - end  
111 -  
112 - # Set to the owner the template choosed  
113 - def set_template(object, template_name)  
114 - object.flexible_template_template = template_name  
115 - object.save  
116 - end  
117 125
118 #Load a set of boxes belongs to a owner. We have to situations. 126 #Load a set of boxes belongs to a owner. We have to situations.
119 # 1 - The owner has equal or more boxes that boxes defined in template. 127 # 1 - The owner has equal or more boxes that boxes defined in template.
@@ -154,16 +162,16 @@ module Design @@ -154,16 +162,16 @@ module Design
154 number_of_boxes 162 number_of_boxes
155 end 163 end
156 164
157 - def exist_template? template  
158 - @ft_config[:available_templates].include?(template) 165 + def exists_template?(template)
  166 + Design.available_templates.include?(template)
159 end 167 end
160 168
161 - def exist_theme? theme  
162 - @ft_config[:available_themes].include?(theme) 169 + def exists_theme?(theme)
  170 + Design.available_themes.include?(theme)
163 end 171 end
164 172
165 - def exist_icon_theme? icon_theme  
166 - @ft_config[:available_icon_themes].include?(icon_theme) 173 + def exists_icon_theme?(icon_theme)
  174 + Design.available_icon_themes.include?(icon_theme)
167 end 175 end
168 176
169 def parse_path(files_path = [], remove_until = 'public') 177 def parse_path(files_path = [], remove_until = 'public')
vendor/plugins/design/lib/design/editor/helper.rb
@@ -9,9 +9,7 @@ module Design @@ -9,9 +9,7 @@ module Design
9 module Helper 9 module Helper
10 10
11 # draws the user interface for the design editor. 11 # draws the user interface for the design editor.
12 - def design_display_editor()  
13 - # TODO: check this  
14 - raise NotImplementedError 12 + def design_display_editor(content)
15 13
16 content = [content_tag( 14 content = [content_tag(
17 :ul,[ 15 :ul,[
@@ -33,8 +31,8 @@ module Design @@ -33,8 +31,8 @@ module Design
33 ].join("\n"), 31 ].join("\n"),
34 :class => 'select_options' 32 :class => 'select_options'
35 ), 33 ),
36 - @ft_config[:boxes].map{ |box|  
37 - content_tag(:div, edit_blocks(box, main_content) , :id=>"box_#{box.number}") 34 + design.boxes.map { |box|
  35 + content_tag(:div, edit_blocks(box, content) , :id=>"box_#{box.number}")
38 }].join("\n") 36 }].join("\n")
39 37
40 content = content_tag(:div, content, :id => 'flexible_template_edit_mode') 38 content = content_tag(:div, content, :id => 'flexible_template_edit_mode')
@@ -57,6 +55,7 @@ module Design @@ -57,6 +55,7 @@ module Design
57 # end 55 # end
58 56
59 57
  58 + # FIXME: WTF?
60 def flexible_template_block_helper_dict(str) 59 def flexible_template_block_helper_dict(str)
61 { 60 {
62 'plain_content' => _('Plain Content') , 61 'plain_content' => _('Plain Content') ,
@@ -67,6 +66,70 @@ module Design @@ -67,6 +66,70 @@ module Design
67 66
68 private 67 private
69 68
  69 + ########################################
  70 + # TEMPLATE/THEME/ICON THEME CHANGE BOXES
  71 + ########################################
  72 +
  73 + # Generate a select option to choose one of the available templates.
  74 + # The available templates are those in 'public/templates'
  75 + def select_template
  76 + available_templates = Design.available_templates
  77 +
  78 + template_options = options_for_select(available_templates.map{|template| [template, template] }, design.template)
  79 + [ select_tag('template', template_options ),
  80 + change_template].join("\n")
  81 + end
  82 +
  83 + # Generate a observer to reload a page when a template is selected
  84 + def change_template
  85 + observe_field( 'template',
  86 + :url => {:action => 'design_editor'},
  87 + :with =>"'template=' + escape(value)",
  88 + :complete => "document.location.reload();",
  89 + :method => :post
  90 + )
  91 + end
  92 +
  93 + # Generate a select option to choose one of the available themes.
  94 + # The available themes are those in 'public/themes'
  95 + def select_theme
  96 + available_themes = Design.available_themes
  97 + theme_options = options_for_select(available_themes.map{|theme| [theme, theme] }, design.theme)
  98 + [ select_tag('theme', theme_options ),
  99 + change_theme].join("\n")
  100 + end
  101 +
  102 + # Generate a observer to reload a page when a theme is selected
  103 + def change_theme
  104 + observe_field( 'theme',
  105 + :url => {:action => 'design_editor'},
  106 + :with =>"'theme=' + escape(value)",
  107 + :complete => "document.location.reload();",
  108 + :method => :post
  109 + )
  110 + end
  111 +
  112 + # Generate a select option to choose one of the available icons themes.
  113 + # The available icons themes are those in 'public/icons'
  114 + def select_icon_theme
  115 + available_icon_themes = Design.available_icon_themes
  116 + icon_theme_options = options_for_select(available_icon_themes.map{|icon_theme| [icon_theme, icon_theme] }, design.icon_theme )
  117 + [ select_tag('icon_theme', icon_theme_options ),
  118 + change_icon_theme].join("\n")
  119 + end
  120 +
  121 + # Generate a observer to reload a page when a icons theme is selected
  122 + def change_icon_theme
  123 + observe_field( 'icon_theme',
  124 + :url => {:action => 'design_editor'},
  125 + :with =>"'icon_theme=' + escape(value)",
  126 + :complete => "document.location.reload();",
  127 + :method => :post
  128 + )
  129 + end
  130 +
  131 +
  132 +
70 ################################################# 133 #################################################
71 # TEMPLATES METHODS RELATED 134 # TEMPLATES METHODS RELATED
72 ################################################# 135 #################################################
@@ -126,7 +189,7 @@ module Design @@ -126,7 +189,7 @@ module Design
126 189
127 # Allows an draggable element change between diferrents boxes 190 # Allows an draggable element change between diferrents boxes
128 def drag_drop_items(box) 191 def drag_drop_items(box)
129 - boxes = @ft_config[:boxes].reject{|b| b.id == box.id} 192 + boxes = design.boxes.reject{|b| b.id == box.id}
130 193
131 boxes.map{ |b| 194 boxes.map{ |b|
132 drop_receiving_element("box_#{box.number}", 195 drop_receiving_element("box_#{box.number}",
@@ -140,24 +203,6 @@ module Design @@ -140,24 +203,6 @@ module Design
140 end 203 end
141 204
142 205
143 - # Generate a select option to choose one of the available templates.  
144 - # The available templates are those in 'public/templates'  
145 - def select_template  
146 - available_templates = @ft_config[:available_templates]  
147 -  
148 - template_options = options_for_select(available_templates.map{|template| [template, template] }, @ft_config[:template])  
149 - [ select_tag('template_name', template_options ),  
150 - change_template].join("\n")  
151 - end  
152 -  
153 - # Generate a observer to reload a page when a template is selected  
154 - def change_template  
155 - observe_field( 'template_name',  
156 - :url => {:action => 'set_default_template'},  
157 - :with =>"'template_name=' + escape(value) + '&object_id=' + escape(#{@ft_config[:owner].id})",  
158 - :complete => "document.location.reload();"  
159 - )  
160 - end  
161 206
162 def available_blocks 207 def available_blocks
163 #TOD O check if are valids blocks 208 #TOD O check if are valids blocks
@@ -230,46 +275,10 @@ module Design @@ -230,46 +275,10 @@ module Design
230 275
231 end 276 end
232 277
233 - # Generate a select option to choose one of the available themes.  
234 - # The available themes are those in 'public/themes'  
235 - def select_theme  
236 - available_themes = @ft_config[:available_themes]  
237 - theme_options = options_for_select(available_themes.map{|theme| [theme, theme] }, @ft_config[:theme])  
238 - [ select_tag('theme_name', theme_options ),  
239 - change_theme].join("\n")  
240 - end  
241 -  
242 - # Generate a observer to reload a page when a theme is selected  
243 - def change_theme  
244 - observe_field( 'theme_name',  
245 - :url => {:action => 'set_default_theme'},  
246 - :with =>"'theme_name=' + escape(value) + '&object_id=' + escape(#{@ft_config[:owner].id})",  
247 - :complete => "document.location.reload();"  
248 - )  
249 - end  
250 -  
251 -  
252 ################################################# 278 #################################################
253 #ICONS THEMES RELATED 279 #ICONS THEMES RELATED
254 ################################################# 280 #################################################
255 281
256 - # Generate a select option to choose one of the available icons themes.  
257 - # The available icons themes are those in 'public/icons'  
258 - def select_icon_theme  
259 - available_icon_themes = @ft_config[:available_icon_themes]  
260 - icon_theme_options = options_for_select(available_icon_themes.map{|icon_theme| [icon_theme, icon_theme] }, @ft_config[:icon_theme])  
261 - [ select_tag('icon_theme_name', icon_theme_options ),  
262 - change_icon_theme].join("\n")  
263 - end  
264 -  
265 - # Generate a observer to reload a page when a icons theme is selected  
266 - def change_icon_theme  
267 - observe_field( 'icon_theme_name',  
268 - :url => {:action => 'set_default_icon_theme'},  
269 - :with =>"'icon_theme_name=' + escape(value) + '&object_id=' + escape(#{@ft_config[:owner].id})",  
270 - :complete => "document.location.reload();"  
271 - )  
272 - end  
273 282
274 283
275 end # END OF module Helper 284 end # END OF module Helper
vendor/plugins/design/lib/design/helper.rb
@@ -26,10 +26,19 @@ module Design @@ -26,10 +26,19 @@ module Design
26 # 26 #
27 # If not blocks are present (e.g. the design holder has no blocks yet), 27 # If not blocks are present (e.g. the design holder has no blocks yet),
28 # +content+ is returned right away. 28 # +content+ is returned right away.
  29 + #
  30 + # If running in design_editor mode
29 def design_display(content = "") 31 def design_display(content = "")
30 32
  33 + # dispatch to Design::Editor::Helper if running in editor mode
  34 + if (self.respond_to?(:design_display_editor) && params[:action] =~ /^design_editor/)
  35 + return design_display_editor(content)
  36 + end
  37 +
31 # no blocks. nothing to be done 38 # no blocks. nothing to be done
32 - return content if design.boxes.empty? 39 + if design.boxes.empty?
  40 + return content
  41 + end
33 42
34 # Generate all boxes of the current profile and considering the defined 43 # Generate all boxes of the current profile and considering the defined
35 # on template. 44 # on template.
vendor/plugins/design/lib/design/template.rb 0 → 100644
@@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
  1 +module Design
  2 + class Template
  3 +
  4 + def initialize(name, data)
  5 + @data = data
  6 + @data['name'] = name
  7 + end
  8 + def self.find(name)
  9 + directory = File.join(Design.public_filesystem_root, Design.design_root, 'templates', name)
  10 + yaml_files = Dir.glob(File.join(directory, '*.yml'))
  11 +
  12 + if yaml_files.size != 1
  13 + raise "#{name} is not a valid template. There must be one (and only one) YAML (*.yml) file describing it in #{directory})"
  14 + end
  15 +
  16 + data = YAML.load_file(yaml_files.first)
  17 +
  18 + self.new(name, data)
  19 + end
  20 + def name
  21 + @data['name']
  22 + end
  23 + def title
  24 + @data['title'] || name
  25 + end
  26 + def number_of_boxes
  27 + @data['number_of_boxes'] || 3
  28 + end
  29 + end
  30 +end
vendor/plugins/design/test/acts_as_design_test.rb
@@ -2,6 +2,14 @@ require File.join(File.dirname(__FILE__), &#39;test_helper&#39;) @@ -2,6 +2,14 @@ require File.join(File.dirname(__FILE__), &#39;test_helper&#39;)
2 2
3 class ActsAsDesignTest < Test::Unit::TestCase 3 class ActsAsDesignTest < Test::Unit::TestCase
4 4
  5 + def setup
  6 + Design.public_filesystem_root = File.join(File.dirname(__FILE__))
  7 + end
  8 +
  9 + def teardown
  10 + Design.public_filesystem_root = nil
  11 + end
  12 +
5 def test_should_provide_template_attribute 13 def test_should_provide_template_attribute
6 user = DesignTestUser.new 14 user = DesignTestUser.new
7 assert_equal 'default', user.template 15 assert_equal 'default', user.template
@@ -42,4 +50,13 @@ class ActsAsDesignTest &lt; Test::Unit::TestCase @@ -42,4 +50,13 @@ class ActsAsDesignTest &lt; Test::Unit::TestCase
42 end 50 end
43 end 51 end
44 52
  53 + def test_should_create_boxes_when_creating
  54 + user = DesignTestUser.create!(:name => 'A test user')
  55 +
  56 + # default template (test/designs/templates/default/default.yml) defines
  57 + # 3 boxes
  58 + assert_equal 3, Design::Template.find('default').number_of_boxes
  59 + assert_equal 3, user.boxes.size
  60 + end
  61 +
45 end 62 end
vendor/plugins/design/test/design_editor_test.rb
@@ -3,7 +3,7 @@ require File.join(File.dirname(__FILE__), &#39;test_helper&#39;) @@ -3,7 +3,7 @@ require File.join(File.dirname(__FILE__), &#39;test_helper&#39;)
3 class DesignEditorTest < Test::Unit::TestCase 3 class DesignEditorTest < Test::Unit::TestCase
4 4
5 def setup 5 def setup
6 - @controller = DesignHelperTestController.new 6 + @controller = DesignEditorTestController.new
7 @request = ActionController::TestRequest.new 7 @request = ActionController::TestRequest.new
8 @response = ActionController::TestResponse.new 8 @response = ActionController::TestResponse.new
9 9
@@ -14,4 +14,65 @@ class DesignEditorTest &lt; Test::Unit::TestCase @@ -14,4 +14,65 @@ class DesignEditorTest &lt; Test::Unit::TestCase
14 Design.public_filesystem_root = nil 14 Design.public_filesystem_root = nil
15 end 15 end
16 16
  17 + def test_should_render_design_in_editor_mode
  18 + get :design_editor
  19 + assert_response :success
  20 + assert_template 'design_editor'
  21 + end
  22 +
  23 + def test_should_set_new_template
  24 + assert_equal 'default', @controller.send(:design).template
  25 + post :design_editor, :template => 'empty'
  26 + assert_response :redirect
  27 + assert_redirected_to :action => 'design_editor'
  28 + assert_equal 'empty', @controller.send(:design).template
  29 + assert @controller.send(:design).saved?
  30 + end
  31 +
  32 + def test_should_not_set_to_unexisting_template
  33 + assert_equal 'default', @controller.send(:design).template
  34 + post :design_editor, :template => 'no_existing_template'
  35 + assert_response :redirect
  36 + assert_redirected_to :action => 'design_editor'
  37 + assert_equal 'default', @controller.send(:design).template
  38 + assert @controller.send(:design).saved?
  39 + end
  40 +
  41 +
  42 + def test_should_set_new_theme
  43 + assert_equal 'default', @controller.send(:design).theme
  44 + post :design_editor, :theme => 'empty'
  45 + assert_response :redirect
  46 + assert_redirected_to :action => 'design_editor'
  47 + assert_equal 'empty', @controller.send(:design).theme
  48 + assert @controller.send(:design).saved?
  49 + end
  50 +
  51 + def test_should_not_set_to_unexisting_theme
  52 + assert_equal 'default', @controller.send(:design).theme
  53 + post :design_editor, :theme => 'no_existing_theme'
  54 + assert_response :redirect
  55 + assert_redirected_to :action => 'design_editor'
  56 + assert_equal 'default', @controller.send(:design).theme
  57 + assert @controller.send(:design).saved?
  58 + end
  59 +
  60 + def test_should_set_new_icon_theme
  61 + assert_equal 'default', @controller.send(:design).icon_theme
  62 + post :design_editor, :icon_theme => 'empty'
  63 + assert_response :redirect
  64 + assert_redirected_to :action => 'design_editor'
  65 + assert_equal 'empty', @controller.send(:design).icon_theme
  66 + assert @controller.send(:design).saved?
  67 + end
  68 +
  69 + def test_should_not_set_to_unexisting_icon_theme
  70 + assert_equal 'default', @controller.send(:design).icon_theme
  71 + post :design_editor, :icon_theme => 'no_existing_icon_theme'
  72 + assert_response :redirect
  73 + assert_redirected_to :action => 'design_editor'
  74 + assert_equal 'default', @controller.send(:design).icon_theme
  75 + assert @controller.send(:design).saved?
  76 + end
  77 +
17 end 78 end
vendor/plugins/design/test/design_helper_test.rb
@@ -81,6 +81,7 @@ class DesignHelperTest &lt; Test::Unit::TestCase @@ -81,6 +81,7 @@ class DesignHelperTest &lt; Test::Unit::TestCase
81 81
82 def test_should_generate_all_boxes 82 def test_should_generate_all_boxes
83 get :index 83 get :index
  84 + assert_response :success
84 assert_tag :tag => 'div', :attributes => { :id => 'box_1' } 85 assert_tag :tag => 'div', :attributes => { :id => 'box_1' }
85 assert_tag :tag => 'div', :attributes => { :id => 'box_2' } 86 assert_tag :tag => 'div', :attributes => { :id => 'box_2' }
86 assert_tag :tag => 'div', :attributes => { :id => 'box_3' } 87 assert_tag :tag => 'div', :attributes => { :id => 'box_3' }
@@ -88,6 +89,7 @@ class DesignHelperTest &lt; Test::Unit::TestCase @@ -88,6 +89,7 @@ class DesignHelperTest &lt; Test::Unit::TestCase
88 89
89 def test_should_render_array_as_list 90 def test_should_render_array_as_list
90 get :index 91 get :index
  92 + assert_response :success
91 assert_tag :tag => 'ul', :descendant => { 93 assert_tag :tag => 'ul', :descendant => {
92 :tag => 'li', :content => 'item1' 94 :tag => 'li', :content => 'item1'
93 } 95 }
@@ -101,16 +103,19 @@ class DesignHelperTest &lt; Test::Unit::TestCase @@ -101,16 +103,19 @@ class DesignHelperTest &lt; Test::Unit::TestCase
101 103
102 def test_should_process_block_returned_as_content 104 def test_should_process_block_returned_as_content
103 get :index 105 get :index
  106 + assert_response :success
104 assert_tag :tag => 'a', :attributes => { :href => /controller_linked_from_block/ } 107 assert_tag :tag => 'a', :attributes => { :href => /controller_linked_from_block/ }
105 end 108 end
106 109
107 def test_should_put_string_as_is 110 def test_should_put_string_as_is
108 get :index 111 get :index
  112 + assert_response :success
109 assert_tag :tag => 'div', :content => "this is a fixed content block hacked for testing", :attributes => { :class => 'block' } 113 assert_tag :tag => 'div', :content => "this is a fixed content block hacked for testing", :attributes => { :class => 'block' }
110 end 114 end
111 115
112 def test_should_provide_javascript_link_if_available 116 def test_should_provide_javascript_link_if_available
113 get :javascript 117 get :javascript
  118 + assert_response :success
114 assert_tag :tag => 'script', :attributes => { 119 assert_tag :tag => 'script', :attributes => {
115 :type => 'text/javascript', 120 :type => 'text/javascript',
116 :src => '/designs/templates/default/javascripts/one.js' 121 :src => '/designs/templates/default/javascripts/one.js'
@@ -123,6 +128,7 @@ class DesignHelperTest &lt; Test::Unit::TestCase @@ -123,6 +128,7 @@ class DesignHelperTest &lt; Test::Unit::TestCase
123 128
124 def test_should_provide_stylesheet_links_if_available 129 def test_should_provide_stylesheet_links_if_available
125 get :template_stylesheets 130 get :template_stylesheets
  131 + assert_response :success
126 assert_tag :tag => 'link', :attributes => { 132 assert_tag :tag => 'link', :attributes => {
127 :type => 'text/css', 133 :type => 'text/css',
128 :href => '/designs/templates/default/stylesheets/one.css' 134 :href => '/designs/templates/default/stylesheets/one.css'
@@ -135,6 +141,7 @@ class DesignHelperTest &lt; Test::Unit::TestCase @@ -135,6 +141,7 @@ class DesignHelperTest &lt; Test::Unit::TestCase
135 141
136 def test_should_provide_theme_stylesheet_links_if_available 142 def test_should_provide_theme_stylesheet_links_if_available
137 get :theme_stylesheets 143 get :theme_stylesheets
  144 + assert_response :success
138 assert_tag :tag => 'link', :attributes => { 145 assert_tag :tag => 'link', :attributes => {
139 :type => 'text/css', 146 :type => 'text/css',
140 :href => '/designs/themes/default/one.css' 147 :href => '/designs/themes/default/one.css'
@@ -143,6 +150,7 @@ class DesignHelperTest &lt; Test::Unit::TestCase @@ -143,6 +150,7 @@ class DesignHelperTest &lt; Test::Unit::TestCase
143 150
144 def test_should_support_displaying_icons 151 def test_should_support_displaying_icons
145 get :icons 152 get :icons
  153 + assert_response :success
146 assert_tag :tag => 'img', :attributes => { 154 assert_tag :tag => 'img', :attributes => {
147 :src => '/designs/icons/default/something.png' 155 :src => '/designs/icons/default/something.png'
148 } 156 }
@@ -153,6 +161,7 @@ class DesignHelperTest &lt; Test::Unit::TestCase @@ -153,6 +161,7 @@ class DesignHelperTest &lt; Test::Unit::TestCase
153 161
154 def test_should_provide_full_header_tags 162 def test_should_provide_full_header_tags
155 get :all_header_tags 163 get :all_header_tags
  164 + assert_response :success
156 165
157 # template JS 166 # template JS
158 assert_tag :tag => 'script', :attributes => { 167 assert_tag :tag => 'script', :attributes => {
vendor/plugins/design/test/designs/templates/default/default.yml 0 → 100644
@@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
  1 +title: A default template for testing
  2 +number_of_boxes: 3
vendor/plugins/design/test/proxy_design_holder_test.rb
@@ -1,43 +0,0 @@ @@ -1,43 +0,0 @@
1 -require File.join(File.dirname(__FILE__), 'test_helper')  
2 -  
3 -  
4 -class ProxyDesignHolderTest < Test::Unit::TestCase  
5 -  
6 - # FIXME: rewrite this test with mocha  
7 - def test_design_should_interact_with_sample_holder  
8 - design = Design::ProxyDesignHolder.new(SampleHolderForTestingProxyDesignHolder.new)  
9 - design.template = 'bli'  
10 - assert_equal 'bli', design.template  
11 - design.theme = 'bli'  
12 - assert_equal 'bli', design.theme  
13 - design.icon_theme = 'bli'  
14 - assert_equal 'bli', design.icon_theme  
15 - design.boxes = []  
16 - assert_equal [], design.boxes  
17 - end  
18 -  
19 - def test_design_user_controller_should_get_a_proper_design  
20 - controller = ProxyDesignHolderTestController.new  
21 - design = controller.send(:design)  
22 - design.template = 'bli'  
23 - assert_equal 'bli', design.template  
24 - design.theme = 'bli'  
25 - assert_equal 'bli', design.theme  
26 - design.icon_theme = 'bli'  
27 - assert_equal 'bli', design.icon_theme  
28 - design.boxes = []  
29 - assert_equal [], design.boxes  
30 - end  
31 -  
32 - def test_should_not_proxy_unrelated_method_calls  
33 - # to be safe  
34 - assert_nothing_raised do  
35 - 1.succ  
36 - end  
37 - assert_raise NoMethodError do  
38 - design = Design::ProxyDesignHolder.new(1)  
39 - design.succ  
40 - end  
41 - end  
42 -  
43 -end  
vendor/plugins/design/test/test_helper.rb
@@ -47,6 +47,15 @@ end @@ -47,6 +47,15 @@ end
47 47
48 class SampleHolderForTestingProxyDesignHolder 48 class SampleHolderForTestingProxyDesignHolder
49 attr_accessor :template, :theme, :icon_theme, :boxes 49 attr_accessor :template, :theme, :icon_theme, :boxes
  50 + def initialize
  51 + @saved = false
  52 + end
  53 + def save
  54 + @saved = true
  55 + end
  56 + def saved?
  57 + @saved
  58 + end
50 end 59 end
51 60
52 class ProxyDesignHolderTestController < ActionController::Base 61 class ProxyDesignHolderTestController < ActionController::Base
@@ -69,8 +78,26 @@ class InheritanceDesignTestController &lt; ProxyDesignHolderTestController @@ -69,8 +78,26 @@ class InheritanceDesignTestController &lt; ProxyDesignHolderTestController
69 end 78 end
70 79
71 class DesignEditorTestController < ActionController::Base 80 class DesignEditorTestController < ActionController::Base
72 - design_editor :holder => 'sample_object' 81 +
  82 + self.template_root = File.join(File.dirname(__FILE__), 'views')
  83 + layout 'design_editor_test'
  84 + design_editor :holder => 'sample_object', :autosave => true
73 def initialize 85 def initialize
74 @sample_object = SampleHolderForTestingProxyDesignHolder.new 86 @sample_object = SampleHolderForTestingProxyDesignHolder.new
  87 + @sample_object.template = 'default'
  88 + @sample_object.theme = 'default'
  89 + @sample_object.icon_theme = 'default'
  90 + def @sample_object.id
  91 + 1
  92 + end
  93 +
  94 + box1 = Design::Box.new(:number => 1)
  95 + box2 = Design::Box.new(:number => 2)
  96 + main_block = Design::MainBlock.new(:position => 1)
  97 + box2.blocks << main_block
  98 + main_block.box = box2
  99 + main_block.name = 'Main block'
  100 + box3 = Design::Box.new(:number => 3)
  101 + @sample_object.boxes = [ box1, box2, box3 ]
75 end 102 end
76 end 103 end
vendor/plugins/design/test/views/design_editor_test/design_editor.rhtml 0 → 100644
@@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
  1 +<h1>Design editor</h1>
  2 +
  3 +<p>This is a sample text so you can have an idea of how your design will look like.</p>
vendor/plugins/design/test/views/layouts/design_editor_test.rhtml 0 → 100644
@@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
  1 +<html>
  2 + <head>
  3 + <%= design_all_header_tags %>
  4 + </head>
  5 + <body>
  6 + <%= design_display(yield) %>
  7 + </body>
  8 +</html>