comfortable_mexican_sofa 1.4.22 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. data/.travis.yml +2 -2
  2. data/Gemfile +3 -7
  3. data/VERSION +1 -1
  4. data/app/assets/stylesheets/comfortable_mexican_sofa/form.css +44 -1
  5. data/app/controllers/cms_admin/files_controller.rb +10 -1
  6. data/app/controllers/cms_admin/layouts_controller.rb +9 -0
  7. data/app/controllers/cms_admin/pages_controller.rb +1 -1
  8. data/app/controllers/cms_admin/snippets_controller.rb +10 -1
  9. data/app/models/cms/block.rb +29 -0
  10. data/app/models/cms/file.rb +9 -19
  11. data/app/models/cms/layout.rb +9 -0
  12. data/app/models/cms/page.rb +3 -4
  13. data/app/models/cms/snippet.rb +9 -0
  14. data/app/views/cms_admin/files/_file.html.erb +1 -1
  15. data/app/views/cms_admin/files/_index.html.erb +1 -12
  16. data/app/views/cms_admin/files/_page_form.html.erb +12 -0
  17. data/app/views/cms_admin/files/destroy.js.erb +1 -1
  18. data/app/views/cms_admin/files/index.html.erb +6 -2
  19. data/app/views/cms_admin/layouts/_index_branch.html.erb +5 -1
  20. data/app/views/cms_admin/layouts/index.html.erb +1 -1
  21. data/app/views/cms_admin/pages/_form_blocks.html.erb +2 -2
  22. data/app/views/cms_admin/pages/edit.html.erb +1 -1
  23. data/app/views/cms_admin/pages/new.html.erb +1 -1
  24. data/app/views/cms_admin/snippets/index.html.erb +6 -2
  25. data/comfortable_mexican_sofa.gemspec +16 -10
  26. data/config/initializers/comfortable_mexican_sofa.rb +0 -4
  27. data/config/initializers/paperclip.rb +25 -0
  28. data/config/locales/en.yml +2 -0
  29. data/config/locales/es.yml +2 -0
  30. data/config/routes.rb +8 -8
  31. data/db/migrate/01_create_cms.rb +6 -0
  32. data/db/migrate/upgrades/06_upgrade_to_1_5_0.rb +21 -0
  33. data/lib/comfortable_mexican_sofa/configuration.rb +14 -19
  34. data/lib/comfortable_mexican_sofa/form_builder.rb +48 -36
  35. data/lib/comfortable_mexican_sofa/tag.rb +2 -12
  36. data/lib/comfortable_mexican_sofa/tags/collection.rb +0 -4
  37. data/lib/comfortable_mexican_sofa/tags/field_datetime.rb +0 -4
  38. data/lib/comfortable_mexican_sofa/tags/field_integer.rb +0 -4
  39. data/lib/comfortable_mexican_sofa/tags/field_string.rb +0 -4
  40. data/lib/comfortable_mexican_sofa/tags/field_text.rb +0 -4
  41. data/lib/comfortable_mexican_sofa/tags/file.rb +5 -0
  42. data/lib/comfortable_mexican_sofa/tags/page_datetime.rb +0 -4
  43. data/lib/comfortable_mexican_sofa/tags/page_file.rb +44 -0
  44. data/lib/comfortable_mexican_sofa/tags/page_files.rb +44 -0
  45. data/lib/comfortable_mexican_sofa/tags/page_integer.rb +0 -4
  46. data/lib/comfortable_mexican_sofa/tags/page_rich_text.rb +0 -4
  47. data/lib/comfortable_mexican_sofa/tags/page_string.rb +0 -4
  48. data/lib/comfortable_mexican_sofa/tags/page_text.rb +0 -4
  49. data/lib/comfortable_mexican_sofa/tags/snippet.rb +5 -0
  50. data/lib/comfortable_mexican_sofa/view_methods.rb +6 -1
  51. data/test/fixtures/cms/files.yml +2 -1
  52. data/test/fixtures/cms/layouts.yml +4 -1
  53. data/test/fixtures/cms/snippets.yml +1 -0
  54. data/test/functional/cms_admin/files_controller_test.rb +17 -19
  55. data/test/functional/cms_admin/layouts_controller_test.rb +18 -1
  56. data/test/functional/cms_admin/pages_controller_test.rb +63 -22
  57. data/test/functional/cms_admin/snippets_controller_test.rb +18 -1
  58. data/test/gemfiles/Gemfile.rails-3.0.x +10 -0
  59. data/test/gemfiles/Gemfile.rails-3.1.x +10 -0
  60. data/test/test_helper.rb +13 -12
  61. data/test/unit/configuration_test.rb +1 -1
  62. data/test/unit/models/block_test.rb +112 -1
  63. data/test/unit/models/file_test.rb +1 -51
  64. data/test/unit/models/layout_test.rb +1 -0
  65. data/test/unit/models/snippet_test.rb +14 -0
  66. data/test/unit/tags/collection_test.rb +5 -5
  67. data/test/unit/tags/field_datetime_test.rb +2 -2
  68. data/test/unit/tags/field_integer_test.rb +2 -2
  69. data/test/unit/tags/field_string_test.rb +2 -2
  70. data/test/unit/tags/field_text_test.rb +2 -2
  71. data/test/unit/tags/page_datetime_test.rb +2 -2
  72. data/test/unit/tags/page_file_test.rb +79 -0
  73. data/test/unit/tags/page_files_test.rb +72 -0
  74. data/test/unit/tags/page_integer_test.rb +2 -2
  75. data/test/unit/tags/page_rich_text_test.rb +2 -2
  76. data/test/unit/tags/page_string_test.rb +2 -2
  77. data/test/unit/tags/page_text_test.rb +2 -2
  78. data/test/unit/view_methods_test.rb +2 -1
  79. metadata +20 -14
  80. data/gemfiles/Gemfile.rails-3.0.x +0 -14
  81. data/gemfiles/Gemfile.rails-3.1.x +0 -14
@@ -47,10 +47,6 @@ class ComfortableMexicanSofa::Tag::Collection
47
47
  klass.respond_to?(:cms_collection) ? klass.cms_collection(*collection_params).all : klass.all
48
48
  end
49
49
 
50
- def content=(value)
51
- block.content = value
52
- end
53
-
54
50
  def content
55
51
  block.content
56
52
  end
@@ -6,10 +6,6 @@ class ComfortableMexicanSofa::Tag::FieldDateTime
6
6
  /\{\{\s*cms:field:(#{label}):datetime\s*\}\}/
7
7
  end
8
8
 
9
- def content=(value)
10
- block.content = value
11
- end
12
-
13
9
  def content
14
10
  block.content
15
11
  end
@@ -6,10 +6,6 @@ class ComfortableMexicanSofa::Tag::FieldInteger
6
6
  /\{\{\s*cms:field:(#{label}):integer\s*\}\}/
7
7
  end
8
8
 
9
- def content=(value)
10
- block.content = value
11
- end
12
-
13
9
  def content
14
10
  block.content
15
11
  end
@@ -6,10 +6,6 @@ class ComfortableMexicanSofa::Tag::FieldString
6
6
  /\{\{\s*cms:field:(#{label}):?(?:string)?\s*\}\}/
7
7
  end
8
8
 
9
- def content=(value)
10
- block.content = value
11
- end
12
-
13
9
  def content
14
10
  block.content
15
11
  end
@@ -6,10 +6,6 @@ class ComfortableMexicanSofa::Tag::FieldText
6
6
  /\{\{\s*cms:field:(#{label}):?(?:text)?\s*?\}\}/
7
7
  end
8
8
 
9
- def content=(value)
10
- block.content = value
11
- end
12
-
13
9
  def content
14
10
  block.content
15
11
  end
@@ -6,6 +6,11 @@ class ComfortableMexicanSofa::Tag::File
6
6
  /\{\{\s*cms:file:(#{label}):?(.*?)\s*\}\}/
7
7
  end
8
8
 
9
+ # Initializing Cms::File object
10
+ def file
11
+ page.site.files.detect{|f| f.file_file_name == self.label.to_s}
12
+ end
13
+
9
14
  def content
10
15
  return unless file
11
16
 
@@ -6,10 +6,6 @@ class ComfortableMexicanSofa::Tag::PageDateTime
6
6
  /\{\{\s*cms:page:(#{label}):datetime\s*\}\}/
7
7
  end
8
8
 
9
- def content=(value)
10
- block.content = value
11
- end
12
-
13
9
  def content
14
10
  block.content
15
11
  end
@@ -0,0 +1,44 @@
1
+ class ComfortableMexicanSofa::Tag::PageFile
2
+ include ComfortableMexicanSofa::Tag
3
+
4
+ # Signature of a tag:
5
+ # {{ cms:page_file:some_label:type:params }}
6
+ # Simple tag can be:
7
+ # {{ cms:page_file:some_label }}
8
+ def self.regex_tag_signature(label = nil)
9
+ label ||= /[\w\-]+/
10
+ /\{\{\s*cms:page_file:(#{label}):?(.*?)\s*\}\}/
11
+ end
12
+
13
+ # Type of the tag controls how file is rendered
14
+ def type
15
+ %w(partial url image link).member?(params[0]) ? params[0] : 'url'
16
+ end
17
+
18
+ def content
19
+ block.files.first
20
+ end
21
+
22
+ def render
23
+ file = block.files.first
24
+ case self.type
25
+ when 'url'
26
+ return '' unless file
27
+ file.file.url
28
+ when 'link'
29
+ return '' unless file
30
+ text = params[1] || label
31
+ "<a href='#{file.file.url}' target='_blank'>#{text}</a>"
32
+ when 'image'
33
+ return '' unless file
34
+ text = params[1] || label
35
+ "<img src='#{file.file.url}' alt='#{text}' />"
36
+ when 'partial'
37
+ path = params[1] || 'partials/page_file'
38
+ ps = (self.params[2..-1] || []).collect_with_index{|p, i| ":param_#{i+1} => '#{p}'"}.join(', ')
39
+ ps = ps.present?? ", #{ps}" : ''
40
+ "<%= render :partial => '#{path}', :locals => {:identifier => #{file.try(:id) || 'nil'}#{ps}} %>"
41
+ end
42
+ end
43
+
44
+ end
@@ -0,0 +1,44 @@
1
+ class ComfortableMexicanSofa::Tag::PageFiles
2
+ include ComfortableMexicanSofa::Tag
3
+
4
+ def self.regex_tag_signature(label = nil)
5
+ label ||= /[\w\-]+/
6
+ /\{\{\s*cms:page_files:(#{label}):?(.*?)\s*\}\}/
7
+ end
8
+
9
+ def type
10
+ %w(partial url image link).member?(params[0]) ? params[0] : 'url'
11
+ end
12
+
13
+ def content
14
+ block.files
15
+ end
16
+
17
+ def render
18
+ files = block.files
19
+ case self.type
20
+ when 'url'
21
+ return '' if files.blank?
22
+ files.collect do |file|
23
+ file.file.url
24
+ end.join(', ')
25
+ when 'link'
26
+ return '' if files.blank?
27
+ files.collect do |file|
28
+ "<a href='#{file.file.url}' target='_blank'>#{file.label}</a>"
29
+ end.join(' ')
30
+ when 'image'
31
+ return '' if files.blank?
32
+ files.collect do |file|
33
+ "<img src='#{file.file.url}' alt='#{file.label}' />"
34
+ end.join(' ')
35
+ when 'partial'
36
+ path = params[1] || 'partials/page_files'
37
+ ps = (self.params[2..-1] || []).collect_with_index{|p, i| ":param_#{i+1} => '#{p}'"}.join(', ')
38
+ ps = ps.present?? ", #{ps}" : ''
39
+ ids = files.present?? files.collect(&:id).join(',') : ''
40
+ "<%= render :partial => '#{path}', :locals => {:identifier => [#{ids}]#{ps}} %>"
41
+ end
42
+ end
43
+
44
+ end
@@ -6,10 +6,6 @@ class ComfortableMexicanSofa::Tag::PageInteger
6
6
  /\{\{\s*cms:page:(#{label}):integer\s*\}\}/
7
7
  end
8
8
 
9
- def content=(value)
10
- block.content = value
11
- end
12
-
13
9
  def content
14
10
  block.content
15
11
  end
@@ -6,10 +6,6 @@ class ComfortableMexicanSofa::Tag::PageRichText
6
6
  /\{\{\s*cms:page:(#{label}):rich_text\s*\}\}/
7
7
  end
8
8
 
9
- def content=(value)
10
- block.content = value
11
- end
12
-
13
9
  def content
14
10
  block.content
15
11
  end
@@ -6,10 +6,6 @@ class ComfortableMexicanSofa::Tag::PageString
6
6
  /\{\{\s*cms:page:(#{label}):string\s*\}\}/
7
7
  end
8
8
 
9
- def content=(value)
10
- block.content = value
11
- end
12
-
13
9
  def content
14
10
  block.content
15
11
  end
@@ -6,10 +6,6 @@ class ComfortableMexicanSofa::Tag::PageText
6
6
  /\{\{\s*cms:page:(#{label}):?(?:text)?\s*\}\}/
7
7
  end
8
8
 
9
- def content=(value)
10
- block.content = value
11
- end
12
-
13
9
  def content
14
10
  block.content
15
11
  end
@@ -6,6 +6,11 @@ class ComfortableMexicanSofa::Tag::Snippet
6
6
  /\{\{\s*cms:snippet:(#{label})\s*\}\}/
7
7
  end
8
8
 
9
+ # Find or initialize Cms::Snippet object
10
+ def snippet
11
+ page.site.snippets.detect{|s| s.slug == self.label.to_s} || page.site.snippets.build(:slug => self.label.to_s)
12
+ end
13
+
9
14
  def content
10
15
  snippet.content
11
16
  end
@@ -19,7 +19,12 @@ module ComfortableMexicanSofa::ViewMethods
19
19
  # cms_snippet_content(:my_snippet)
20
20
  def cms_snippet_content(snippet_slug, cms_site = nil)
21
21
  return '' unless cms_site ||= (@cms_site || Cms::Site.find_site(request.host.downcase, request.fullpath))
22
- return '' unless snippet = cms_site.snippets.find_by_slug(snippet_slug)
22
+ case snippet_slug
23
+ when Cms::Snippet
24
+ snippet = snippet_slug
25
+ else
26
+ return '' unless snippet = cms_site.snippets.find_by_slug(snippet_slug)
27
+ end
23
28
  render :inline => ComfortableMexicanSofa::Tag.process_content(Cms::Page.new, snippet.content)
24
29
  end
25
30
 
@@ -4,4 +4,5 @@ default:
4
4
  file_file_name: sample.jpg
5
5
  file_content_type: image/jpeg
6
6
  file_file_size: 20099
7
- description: Description
7
+ description: Description
8
+ position: 0
@@ -12,6 +12,7 @@ default:
12
12
  layout_content_c
13
13
  css: default_css
14
14
  js: default_js
15
+ position: 0
15
16
 
16
17
  nested:
17
18
  site: default
@@ -23,6 +24,7 @@ nested:
23
24
  {{cms:page:content}}
24
25
  css: nested_css
25
26
  js: nested_js
27
+ position: 0
26
28
 
27
29
  child:
28
30
  site: default
@@ -33,4 +35,5 @@ child:
33
35
  {{cms:page:left_column}}
34
36
  {{cms:page:right_column}}
35
37
  css: child_css
36
- js: child_js
38
+ js: child_js
39
+ position: 0
@@ -3,3 +3,4 @@ default:
3
3
  label: Default Snippet
4
4
  slug: default
5
5
  content: default_snippet_content
6
+ position: 0
@@ -123,25 +123,6 @@ class CmsAdmin::FilesControllerTest < ActionController::TestCase
123
123
  end
124
124
  end
125
125
 
126
- def test_create_as_xhr_with_page_id
127
- ComfortableMexicanSofa.config.auto_file_categorization = true
128
- request.env['HTTP_X_FILE_NAME'] = 'test.pdf'
129
- request.env['CONTENT_TYPE'] = 'application/pdf'
130
-
131
- assert_difference ['Cms::File.count', 'Cms::Category.count', 'Cms::Categorization.count'] do
132
- xhr :post, :create, :site_id => cms_sites(:default), :file => {
133
- :page_id => cms_pages(:default).id
134
- }
135
- assert_response :success
136
-
137
- file = Cms::File.last
138
- assert_equal 'test.pdf', file.file_file_name
139
- assert_equal 1, file.categories.count
140
- assert_equal '[page] /', file.categories.first.label
141
- assert_equal 'Cms::File', file.categories.first.categorized_type
142
- end
143
- end
144
-
145
126
  def test_update
146
127
  file = cms_files(:default)
147
128
  put :update, :site_id => file.site, :id => file, :file => {
@@ -184,4 +165,21 @@ class CmsAdmin::FilesControllerTest < ActionController::TestCase
184
165
  end
185
166
  end
186
167
 
168
+ def test_reorder
169
+ file_one = cms_files(:default)
170
+ file_two = cms_sites(:default).files.create(
171
+ :file => fixture_file_upload('files/valid_image.jpg')
172
+ )
173
+ assert_equal 0, file_one.position
174
+ assert_equal 1, file_two.position
175
+
176
+ post :reorder, :site_id => cms_sites(:default), :cms_file => [file_two.id, file_one.id]
177
+ assert_response :success
178
+ file_one.reload
179
+ file_two.reload
180
+
181
+ assert_equal 1, file_one.position
182
+ assert_equal 0, file_two.position
183
+ end
184
+
187
185
  end
@@ -34,7 +34,6 @@ class CmsAdmin::LayoutsControllerTest < ActionController::TestCase
34
34
  assert assigns(:layout)
35
35
  assert_template :edit
36
36
  assert_select "form[action=/cms-admin/sites/#{layout.site.id}/layouts/#{layout.id}]"
37
- assert_select "form[action='/cms-admin/sites/#{layout.site.id}/files?file[layout_id]=#{layout.id}']"
38
37
  end
39
38
 
40
39
  def test_get_edit_failure
@@ -102,5 +101,23 @@ class CmsAdmin::LayoutsControllerTest < ActionController::TestCase
102
101
  assert_equal 'Layout deleted', flash[:notice]
103
102
  end
104
103
  end
104
+
105
+ def test_reorder
106
+ layout_one = cms_layouts(:default)
107
+ layout_two = cms_sites(:default).layouts.create!(
108
+ :label => 'test',
109
+ :slug => 'test'
110
+ )
111
+ assert_equal 0, layout_one.position
112
+ assert_equal 1, layout_two.position
113
+
114
+ post :reorder, :site_id => cms_sites(:default), :cms_layout => [layout_two.id, layout_one.id]
115
+ assert_response :success
116
+ layout_one.reload
117
+ layout_two.reload
118
+
119
+ assert_equal 1, layout_one.position
120
+ assert_equal 0, layout_two.position
121
+ end
105
122
 
106
123
  end
@@ -49,77 +49,119 @@ class CmsAdmin::PagesControllerTest < ActionController::TestCase
49
49
  def test_get_new_with_field_datetime
50
50
  cms_layouts(:default).update_attribute(:content, '{{cms:field:test_label:datetime}}')
51
51
  get :new, :site_id => cms_sites(:default)
52
- assert_select "input[type='text'][name='page[blocks_attributes][][content]'][class='datetime']"
53
- assert_select "input[type='hidden'][name='page[blocks_attributes][][label]'][value='test_label']"
52
+ assert_response :success
53
+ assert_select "input[type='text'][name='page[blocks_attributes][0][content]'][class='datetime']"
54
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][label]'][value='test_label']"
54
55
  end
55
56
 
56
57
  def test_get_new_with_field_integer
57
58
  cms_layouts(:default).update_attribute(:content, '{{cms:field:test_label:integer}}')
58
59
  get :new, :site_id => cms_sites(:default)
59
- assert_select "input[type='number'][name='page[blocks_attributes][][content]']"
60
- assert_select "input[type='hidden'][name='page[blocks_attributes][][label]'][value='test_label']"
60
+ assert_response :success
61
+ assert_select "input[type='number'][name='page[blocks_attributes][0][content]']"
62
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][label]'][value='test_label']"
61
63
  end
62
64
 
63
65
  def test_get_new_with_field_string
64
66
  cms_layouts(:default).update_attribute(:content, '{{cms:field:test_label:string}}')
65
67
  get :new, :site_id => cms_sites(:default)
66
- assert_select "input[type='text'][name='page[blocks_attributes][][content]']"
67
- assert_select "input[type='hidden'][name='page[blocks_attributes][][label]'][value='test_label']"
68
+ assert_response :success
69
+ assert_select "input[type='text'][name='page[blocks_attributes][0][content]']"
70
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][label]'][value='test_label']"
68
71
  end
69
72
 
70
73
  def test_get_new_with_field_text
71
74
  cms_layouts(:default).update_attribute(:content, '{{cms:field:test_label:text}}')
72
75
  get :new, :site_id => cms_sites(:default)
73
- assert_select "textarea[name='page[blocks_attributes][][content]'][class='code']"
74
- assert_select "input[type='hidden'][name='page[blocks_attributes][][label]'][value='test_label']"
76
+ assert_response :success
77
+ assert_select "textarea[name='page[blocks_attributes][0][content]'][class='code']"
78
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][label]'][value='test_label']"
75
79
  end
76
80
 
77
81
  def test_get_new_with_page_datetime
78
82
  cms_layouts(:default).update_attribute(:content, '{{cms:page:test_label:datetime}}')
79
83
  get :new, :site_id => cms_sites(:default)
80
- assert_select "input[type='text'][name='page[blocks_attributes][][content]'][class='datetime']"
81
- assert_select "input[type='hidden'][name='page[blocks_attributes][][label]'][value='test_label']"
84
+ assert_response :success
85
+ assert_select "input[type='text'][name='page[blocks_attributes][0][content]'][class='datetime']"
86
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][label]'][value='test_label']"
82
87
  end
83
88
 
84
89
  def test_get_new_with_page_integer
85
90
  cms_layouts(:default).update_attribute(:content, '{{cms:page:test_label:integer}}')
86
91
  get :new, :site_id => cms_sites(:default)
87
- assert_select "input[type='number'][name='page[blocks_attributes][][content]']"
88
- assert_select "input[type='hidden'][name='page[blocks_attributes][][label]'][value='test_label']"
92
+ assert_response :success
93
+ assert_select "input[type='number'][name='page[blocks_attributes][0][content]']"
94
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][label]'][value='test_label']"
89
95
  end
90
96
 
91
97
  def test_get_new_with_page_string
92
98
  cms_layouts(:default).update_attribute(:content, '{{cms:page:test_label:string}}')
93
99
  get :new, :site_id => cms_sites(:default)
94
- assert_select "input[type='text'][name='page[blocks_attributes][][content]']"
95
- assert_select "input[type='hidden'][name='page[blocks_attributes][][label]'][value='test_label']"
100
+ assert_response :success
101
+ assert_select "input[type='text'][name='page[blocks_attributes][0][content]']"
102
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][label]'][value='test_label']"
96
103
  end
97
104
 
98
105
  def test_get_new_with_page_text
99
106
  cms_layouts(:default).update_attribute(:content, '{{cms:page:test_label}}')
100
107
  get :new, :site_id => cms_sites(:default)
101
- assert_select "textarea[name='page[blocks_attributes][][content]'][class='code']"
102
- assert_select "input[type='hidden'][name='page[blocks_attributes][][label]'][value='test_label']"
108
+ assert_response :success
109
+ assert_select "textarea[name='page[blocks_attributes][0][content]'][class='code']"
110
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][label]'][value='test_label']"
111
+ end
112
+
113
+ def test_get_new_with_page_file
114
+ cms_layouts(:default).update_attribute(:content, '{{cms:page_file:test_label}}')
115
+ get :new, :site_id => cms_sites(:default)
116
+ assert_response :success
117
+ assert_select "input[type='file'][name='page[blocks_attributes][0][content]']"
118
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][label]'][value='test_label']"
119
+ end
120
+
121
+ def test_get_new_with_page_files
122
+ cms_layouts(:default).update_attribute(:content, '{{cms:page_files:test_label}}')
123
+ get :new, :site_id => cms_sites(:default)
124
+ assert_response :success
125
+ assert_select "input[type='file'][name='page[blocks_attributes][0][content][]'][multiple=multiple]"
126
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][label]'][value='test_label']"
103
127
  end
104
128
 
105
129
  def test_get_new_with_collection
106
130
  snippet = cms_snippets(:default)
107
131
  cms_layouts(:default).update_attribute(:content, '{{cms:collection:snippet:cms/snippet}}')
108
132
  get :new, :site_id => cms_sites(:default)
109
- assert_select "select[name='page[blocks_attributes][][content]']" do
133
+ assert_response :success
134
+ assert_select "select[name='page[blocks_attributes][0][content]']" do
110
135
  assert_select "option[value='']", :html => '---- Select Cms/Snippet ----'
111
136
  assert_select "option[value='#{snippet.id}']", :html => snippet.label
112
137
  end
113
- assert_select "input[type='hidden'][name='page[blocks_attributes][][label]'][value='snippet']"
138
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][label]'][value='snippet']"
114
139
  end
115
140
 
116
141
  def test_get_new_with_rich_page_text
117
142
  cms_layouts(:default).update_attribute(:content, '{{cms:page:test_label:rich_text}}')
118
143
  get :new, :site_id => cms_sites(:default)
119
- assert_select "textarea[name='page[blocks_attributes][][content]'][class='rich_text']"
120
- assert_select "input[type='hidden'][name='page[blocks_attributes][][label]'][value='test_label']"
144
+ assert_response :success
145
+ assert_select "textarea[name='page[blocks_attributes][0][content]'][class='rich_text']"
146
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][label]'][value='test_label']"
121
147
  end
122
-
148
+
149
+ def test_get_new_with_several_tag_fields
150
+ cms_layouts(:default).update_attribute(:content, '{{cms:page:label_a}}{{cms:page:label_b}}')
151
+ get :new, :site_id => cms_sites(:default)
152
+ assert_response :success
153
+ assert_select "textarea[name='page[blocks_attributes][0][content]']"
154
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][label]'][value='label_a']"
155
+ assert_select "textarea[name='page[blocks_attributes][1][content]']"
156
+ assert_select "input[type='hidden'][name='page[blocks_attributes][1][label]'][value='label_b']"
157
+ end
158
+
159
+ def test_get_new_with_crashy_tag
160
+ cms_layouts(:default).update_attribute(:content, '{{cms:collection:label:invalid}}')
161
+ get :new, :site_id => cms_sites(:default)
162
+ assert_response :success
163
+ end
164
+
123
165
  def test_get_new_as_child_page
124
166
  get :new, :site_id => cms_sites(:default), :parent_id => cms_pages(:default)
125
167
  assert_response :success
@@ -136,7 +178,6 @@ class CmsAdmin::PagesControllerTest < ActionController::TestCase
136
178
  assert_template :edit
137
179
  assert_select "form[action=/cms-admin/sites/#{page.site.id}/pages/#{page.id}]"
138
180
  assert_select "select[data-url=/cms-admin/sites/#{page.site.id}/pages/#{page.id}/form_blocks]"
139
- assert_select "form[action='/cms-admin/sites/#{page.site.id}/files?file[page_id]=#{page.id}']"
140
181
  end
141
182
 
142
183
  def test_get_edit_failure