Commit 91398d8a15ab6e0d30d539ade51aaa9b197d3eeb
1 parent
9a139d20
Exists in
master
and in
29 other branches
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
Showing
14 changed files
with
295 additions
and
148 deletions
Show diff stats
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. |
@@ -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__), 'test_helper') | @@ -2,6 +2,14 @@ require File.join(File.dirname(__FILE__), 'test_helper') | ||
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 < Test::Unit::TestCase | @@ -42,4 +50,13 @@ class ActsAsDesignTest < 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__), 'test_helper') | @@ -3,7 +3,7 @@ require File.join(File.dirname(__FILE__), 'test_helper') | ||
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 < Test::Unit::TestCase | @@ -14,4 +14,65 @@ class DesignEditorTest < 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 < Test::Unit::TestCase | @@ -81,6 +81,7 @@ class DesignHelperTest < 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 < Test::Unit::TestCase | @@ -88,6 +89,7 @@ class DesignHelperTest < 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 < Test::Unit::TestCase | @@ -101,16 +103,19 @@ class DesignHelperTest < 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 < Test::Unit::TestCase | @@ -123,6 +128,7 @@ class DesignHelperTest < 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 < Test::Unit::TestCase | @@ -135,6 +141,7 @@ class DesignHelperTest < 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 < Test::Unit::TestCase | @@ -143,6 +150,7 @@ class DesignHelperTest < 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 < Test::Unit::TestCase | @@ -153,6 +161,7 @@ class DesignHelperTest < 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
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 < ProxyDesignHolderTestController | @@ -69,8 +78,26 @@ class InheritanceDesignTestController < 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
vendor/plugins/design/test/views/layouts/design_editor_test.rhtml
0 → 100644