lucy_cms 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (245) hide show
  1. data/Gemfile +19 -0
  2. data/Gemfile.lock +88 -0
  3. data/LICENSE +24 -0
  4. data/README.md +161 -0
  5. data/Rakefile +26 -0
  6. data/VERSION +1 -0
  7. data/app/controllers/application_controller.rb +5 -0
  8. data/app/controllers/cms_admin/base_controller.rb +43 -0
  9. data/app/controllers/cms_admin/layouts_controller.rb +66 -0
  10. data/app/controllers/cms_admin/pages_controller.rb +111 -0
  11. data/app/controllers/cms_admin/sessions_controller.rb +25 -0
  12. data/app/controllers/cms_admin/sites_controller.rb +69 -0
  13. data/app/controllers/cms_admin/snippets_controller.rb +62 -0
  14. data/app/controllers/cms_admin/upload_dirs_controller.rb +79 -0
  15. data/app/controllers/cms_admin/users_controller.rb +129 -0
  16. data/app/controllers/cms_content_controller.rb +51 -0
  17. data/app/models/cms_block.rb +28 -0
  18. data/app/models/cms_layout.rb +118 -0
  19. data/app/models/cms_page.rb +163 -0
  20. data/app/models/cms_site.rb +38 -0
  21. data/app/models/cms_snippet.rb +70 -0
  22. data/app/models/cms_upload.rb +19 -0
  23. data/app/models/cms_upload_dir.rb +11 -0
  24. data/app/models/cms_user.rb +93 -0
  25. data/app/views/cms_admin/layouts/_form.html.erb +10 -0
  26. data/app/views/cms_admin/layouts/_index_branch.html.erb +24 -0
  27. data/app/views/cms_admin/layouts/edit.html.erb +6 -0
  28. data/app/views/cms_admin/layouts/index.html.erb +6 -0
  29. data/app/views/cms_admin/layouts/new.html.erb +6 -0
  30. data/app/views/cms_admin/pages/_form.html.erb +37 -0
  31. data/app/views/cms_admin/pages/_form_blocks.html.erb +7 -0
  32. data/app/views/cms_admin/pages/_index_branch.html.erb +40 -0
  33. data/app/views/cms_admin/pages/edit.html.erb +5 -0
  34. data/app/views/cms_admin/pages/form_blocks.js.erb +2 -0
  35. data/app/views/cms_admin/pages/index.html.erb +6 -0
  36. data/app/views/cms_admin/pages/new.html.erb +5 -0
  37. data/app/views/cms_admin/pages/toggle_branch.js.erb +11 -0
  38. data/app/views/cms_admin/sessions/new.html.erb +12 -0
  39. data/app/views/cms_admin/sites/_form.html.erb +16 -0
  40. data/app/views/cms_admin/sites/edit.html.erb +6 -0
  41. data/app/views/cms_admin/sites/new.html.erb +6 -0
  42. data/app/views/cms_admin/sites/setup.html.erb +16 -0
  43. data/app/views/cms_admin/snippets/_form.html.erb +4 -0
  44. data/app/views/cms_admin/snippets/edit.html.erb +6 -0
  45. data/app/views/cms_admin/snippets/index.html.erb +23 -0
  46. data/app/views/cms_admin/snippets/new.html.erb +6 -0
  47. data/app/views/cms_admin/upload_dirs/_file.html.erb +15 -0
  48. data/app/views/cms_admin/upload_dirs/_form.html.erb +2 -0
  49. data/app/views/cms_admin/upload_dirs/conflict.html.erb +12 -0
  50. data/app/views/cms_admin/upload_dirs/index.html.erb +23 -0
  51. data/app/views/cms_admin/upload_dirs/new.html.erb +6 -0
  52. data/app/views/cms_admin/upload_dirs/show.html.erb +26 -0
  53. data/app/views/cms_admin/upload_dirs/uploads_destroy.js.erb +3 -0
  54. data/app/views/cms_admin/users/_form.html.erb +9 -0
  55. data/app/views/cms_admin/users/_index_branch.html.erb +16 -0
  56. data/app/views/cms_admin/users/change_password.html.erb +14 -0
  57. data/app/views/cms_admin/users/edit.html.erb +17 -0
  58. data/app/views/cms_admin/users/index.html.erb +6 -0
  59. data/app/views/cms_admin/users/new.html.erb +14 -0
  60. data/app/views/layouts/cms_admin.html.erb +52 -0
  61. data/config/application.rb +48 -0
  62. data/config/boot.rb +13 -0
  63. data/config/database.yml +22 -0
  64. data/config/environment.rb +5 -0
  65. data/config/environments/development.rb +22 -0
  66. data/config/environments/production.rb +49 -0
  67. data/config/environments/test.rb +35 -0
  68. data/config/initializers/LucyCMS.rb +37 -0
  69. data/config/initializers/mime_types.rb +5 -0
  70. data/config/locales/en.yml +5 -0
  71. data/config/routes.rb +45 -0
  72. data/config.ru +4 -0
  73. data/db/cms_seeds/example.local/layouts/default.yml +8 -0
  74. data/db/cms_seeds/example.local/layouts/nested.yml +6 -0
  75. data/db/cms_seeds/example.local/pages/child/subchild.yml +14 -0
  76. data/db/cms_seeds/example.local/pages/child.yml +10 -0
  77. data/db/cms_seeds/example.local/pages/index.yml +11 -0
  78. data/db/cms_seeds/example.local/snippets/example.yml +4 -0
  79. data/db/migrate/01_create_cms.rb +114 -0
  80. data/db/seeds.rb +7 -0
  81. data/lib/LucyCMS/acts_as_tree.rb +102 -0
  82. data/lib/LucyCMS/cms_tag/field_datetime.rb +26 -0
  83. data/lib/LucyCMS/cms_tag/field_integer.rb +26 -0
  84. data/lib/LucyCMS/cms_tag/field_string.rb +26 -0
  85. data/lib/LucyCMS/cms_tag/field_text.rb +26 -0
  86. data/lib/LucyCMS/cms_tag/helper.rb +20 -0
  87. data/lib/LucyCMS/cms_tag/page_datetime.rb +22 -0
  88. data/lib/LucyCMS/cms_tag/page_integer.rb +22 -0
  89. data/lib/LucyCMS/cms_tag/page_rich_text.rb +22 -0
  90. data/lib/LucyCMS/cms_tag/page_string.rb +22 -0
  91. data/lib/LucyCMS/cms_tag/page_text.rb +22 -0
  92. data/lib/LucyCMS/cms_tag/partial.rb +21 -0
  93. data/lib/LucyCMS/cms_tag/snippet.rb +22 -0
  94. data/lib/LucyCMS/cms_tag.rb +119 -0
  95. data/lib/LucyCMS/configuration.rb +36 -0
  96. data/lib/LucyCMS/controller_methods.rb +42 -0
  97. data/lib/LucyCMS/engine.rb +12 -0
  98. data/lib/LucyCMS/form_builder.rb +129 -0
  99. data/lib/LucyCMS/rails_extensions.rb +22 -0
  100. data/lib/LucyCMS/site_form_builder.rb +129 -0
  101. data/lib/LucyCMS/view_hooks.rb +30 -0
  102. data/lib/LucyCMS/view_methods.rb +68 -0
  103. data/lib/LucyCMS.rb +40 -0
  104. data/lib/generators/README +17 -0
  105. data/lib/generators/cms_generator.rb +44 -0
  106. data/lib/tasks/LucyCMS.rake +283 -0
  107. data/lucy_cms.gemspec +100 -0
  108. data/public/404.html +26 -0
  109. data/public/422.html +26 -0
  110. data/public/500.html +26 -0
  111. data/public/favicon.ico +0 -0
  112. data/public/images/LucyCMS/arrow_bottom.gif +0 -0
  113. data/public/images/LucyCMS/arrow_right.gif +0 -0
  114. data/public/images/LucyCMS/icon_folder.png +0 -0
  115. data/public/images/LucyCMS/icon_layout.gif +0 -0
  116. data/public/images/LucyCMS/icon_move.gif +0 -0
  117. data/public/images/LucyCMS/icon_regular.gif +0 -0
  118. data/public/images/LucyCMS/icon_snippet.gif +0 -0
  119. data/public/images/LucyCMS/icon_upload.png +0 -0
  120. data/public/images/LucyCMS/icon_user.jpg +0 -0
  121. data/public/javascripts/LucyCMS/cms.js +204 -0
  122. data/public/javascripts/LucyCMS/codemirror/codemirror.css +102 -0
  123. data/public/javascripts/LucyCMS/codemirror/codemirror.js +23 -0
  124. data/public/javascripts/LucyCMS/codemirror/codemirror_base.js +88 -0
  125. data/public/javascripts/LucyCMS/codemirror/parse_css.js +4 -0
  126. data/public/javascripts/LucyCMS/codemirror/parse_html_mixed.js +3 -0
  127. data/public/javascripts/LucyCMS/codemirror/parse_js.js +12 -0
  128. data/public/javascripts/LucyCMS/codemirror/parse_xml.js +7 -0
  129. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  130. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  131. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  132. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  133. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  134. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  135. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  136. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  137. data/public/javascripts/LucyCMS/jquery-ui/images/ui-icons_222222_256x240.png +0 -0
  138. data/public/javascripts/LucyCMS/jquery-ui/images/ui-icons_2e83ff_256x240.png +0 -0
  139. data/public/javascripts/LucyCMS/jquery-ui/images/ui-icons_454545_256x240.png +0 -0
  140. data/public/javascripts/LucyCMS/jquery-ui/images/ui-icons_888888_256x240.png +0 -0
  141. data/public/javascripts/LucyCMS/jquery-ui/images/ui-icons_cd0a0a_256x240.png +0 -0
  142. data/public/javascripts/LucyCMS/jquery-ui/jquery-ui.css +362 -0
  143. data/public/javascripts/LucyCMS/jquery-ui/jquery-ui.js +190 -0
  144. data/public/javascripts/LucyCMS/jquery.js +154 -0
  145. data/public/javascripts/LucyCMS/plupload/plupload.full.min.js +1 -0
  146. data/public/javascripts/LucyCMS/plupload/plupload.html5.min.js +1 -0
  147. data/public/javascripts/LucyCMS/plupload/plupload.min.js +1 -0
  148. data/public/javascripts/LucyCMS/rails.js +132 -0
  149. data/public/javascripts/LucyCMS/tiny_mce/jquery.tinymce.js +1 -0
  150. data/public/javascripts/LucyCMS/tiny_mce/langs/en.js +170 -0
  151. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/about.htm +54 -0
  152. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/anchor.htm +26 -0
  153. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/charmap.htm +52 -0
  154. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/color_picker.htm +73 -0
  155. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/editor_template.js +1 -0
  156. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/image.htm +80 -0
  157. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
  158. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/img/icons.gif +0 -0
  159. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/about.js +72 -0
  160. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/anchor.js +37 -0
  161. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/charmap.js +335 -0
  162. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/color_picker.js +253 -0
  163. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/image.js +245 -0
  164. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/link.js +156 -0
  165. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/source_editor.js +56 -0
  166. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/langs/en.js +62 -0
  167. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/langs/en_dlg.js +51 -0
  168. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/link.htm +58 -0
  169. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/content.css +36 -0
  170. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/dialog.css +117 -0
  171. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
  172. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
  173. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
  174. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
  175. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
  176. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
  177. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/ui.css +213 -0
  178. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/source_editor.htm +25 -0
  179. data/public/javascripts/LucyCMS/tiny_mce/tiny_mce.js +1 -0
  180. data/public/javascripts/LucyCMS/tiny_mce/tiny_mce_popup.js +5 -0
  181. data/public/robots.txt +5 -0
  182. data/public/stylesheets/LucyCMS/content.css +196 -0
  183. data/public/stylesheets/LucyCMS/form.css +125 -0
  184. data/public/stylesheets/LucyCMS/reset.css +1 -0
  185. data/public/stylesheets/LucyCMS/site_form.css +82 -0
  186. data/public/stylesheets/LucyCMS/structure.css +125 -0
  187. data/public/stylesheets/LucyCMS/typography.css +25 -0
  188. data/script/rails +6 -0
  189. data/test/cms_seeds/test.host/layouts/broken.yml +1 -0
  190. data/test/cms_seeds/test.host/layouts/default.yml +3 -0
  191. data/test/cms_seeds/test.host/layouts/nested.yml +4 -0
  192. data/test/cms_seeds/test.host/pages/broken.yml +1 -0
  193. data/test/cms_seeds/test.host/pages/child/subchild.yml +10 -0
  194. data/test/cms_seeds/test.host/pages/child.yml +10 -0
  195. data/test/cms_seeds/test.host/pages/index.yml +10 -0
  196. data/test/cms_seeds/test.host/snippets/broken.yml +1 -0
  197. data/test/cms_seeds/test.host/snippets/default.yml +3 -0
  198. data/test/fixtures/cms_blocks.yml +12 -0
  199. data/test/fixtures/cms_layouts.yml +36 -0
  200. data/test/fixtures/cms_pages.yml +39 -0
  201. data/test/fixtures/cms_sites.yml +3 -0
  202. data/test/fixtures/cms_snippets.yml +5 -0
  203. data/test/fixtures/cms_upload_dirs.yml +9 -0
  204. data/test/fixtures/cms_uploads.yml +4 -0
  205. data/test/fixtures/cms_users.yml +11 -0
  206. data/test/fixtures/files/invalid_file.gif +9 -0
  207. data/test/fixtures/files/valid_image.jpg +0 -0
  208. data/test/fixtures/views/_nav_hook.html.erb +1 -0
  209. data/test/fixtures/views/_nav_hook_2.html.erb +1 -0
  210. data/test/functional/cms_admin/layouts_controller_test.rb +103 -0
  211. data/test/functional/cms_admin/pages_controller_test.rb +334 -0
  212. data/test/functional/cms_admin/sites_controller_test.rb +99 -0
  213. data/test/functional/cms_admin/snippets_controller_test.rb +102 -0
  214. data/test/functional/cms_admin/uploads_controller_test.rb +26 -0
  215. data/test/functional/cms_content_controller_test.rb +134 -0
  216. data/test/integration/rake_tasks_test.rb +65 -0
  217. data/test/integration/render_cms_seed_test.rb +34 -0
  218. data/test/integration/render_cms_test.rb +81 -0
  219. data/test/integration/sites_test.rb +63 -0
  220. data/test/integration/view_hooks_test.rb +33 -0
  221. data/test/test_helper.rb +86 -0
  222. data/test/unit/cms_block_test.rb +43 -0
  223. data/test/unit/cms_configuration_test.rb +17 -0
  224. data/test/unit/cms_layout_test.rb +146 -0
  225. data/test/unit/cms_page_test.rb +257 -0
  226. data/test/unit/cms_site_test.rb +41 -0
  227. data/test/unit/cms_snippet_test.rb +77 -0
  228. data/test/unit/cms_tag_test.rb +206 -0
  229. data/test/unit/cms_tags/field_datetime_test.rb +34 -0
  230. data/test/unit/cms_tags/field_integer_test.rb +33 -0
  231. data/test/unit/cms_tags/field_string_test.rb +34 -0
  232. data/test/unit/cms_tags/field_text_test.rb +32 -0
  233. data/test/unit/cms_tags/helper_test.rb +38 -0
  234. data/test/unit/cms_tags/page_datetime_test.rb +34 -0
  235. data/test/unit/cms_tags/page_integer_test.rb +33 -0
  236. data/test/unit/cms_tags/page_rich_text.rb +33 -0
  237. data/test/unit/cms_tags/page_string_test.rb +33 -0
  238. data/test/unit/cms_tags/page_text_test.rb +34 -0
  239. data/test/unit/cms_tags/partial_test.rb +44 -0
  240. data/test/unit/cms_tags/snippet_test.rb +33 -0
  241. data/test/unit/cms_upload_dir_test.rb +8 -0
  242. data/test/unit/cms_upload_test.rb +26 -0
  243. data/test/unit/cms_user_test.rb +8 -0
  244. data/test/unit/view_methods_test.rb +21 -0
  245. metadata +488 -0
@@ -0,0 +1,39 @@
1
+ default:
2
+ cms_site: default
3
+ parent:
4
+ target_page:
5
+ cms_layout: default
6
+ label: Default Page
7
+ slug:
8
+ full_path: '/'
9
+ children_count: 1
10
+ position: 0
11
+ is_published: true
12
+ content: |-
13
+
14
+ layout_content_a
15
+ default_page_text_content_a
16
+ default_snippet_content
17
+ default_page_text_content_b
18
+ layout_content_b
19
+ default_snippet_content
20
+ layout_content_c
21
+
22
+ child:
23
+ cms_site: default
24
+ parent: default
25
+ target_page:
26
+ cms_layout: default
27
+ label: Child Page
28
+ slug: 'child-page'
29
+ full_path: '/child-page'
30
+ children_count: 0
31
+ position: 0
32
+ is_published: true
33
+ content: |-
34
+
35
+ layout_content_a
36
+
37
+ layout_content_b
38
+ default_snippet_content
39
+ layout_content_c
@@ -0,0 +1,3 @@
1
+ default:
2
+ label: Default Site
3
+ hostname: test.host
@@ -0,0 +1,5 @@
1
+ default:
2
+ cms_site: default
3
+ label: Default Snippet
4
+ slug: default
5
+ content: default_snippet_content
@@ -0,0 +1,9 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ one:
4
+ label: MyString
5
+ cms_site_id: 1
6
+
7
+ two:
8
+ label: MyString
9
+ cms_site_id: 1
@@ -0,0 +1,4 @@
1
+ default:
2
+ file_file_name: sample.jpg
3
+ file_content_type: image/jpeg
4
+ file_file_size: 20099
@@ -0,0 +1,11 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ one:
4
+ login: MyString
5
+ hashed_password: MyString
6
+ salt: MyString
7
+
8
+ two:
9
+ login: MyString
10
+ hashed_password: MyString
11
+ salt: MyString
@@ -0,0 +1,9 @@
1
+ STDOUT.sync = true
2
+
3
+ c = 0
4
+ loop do
5
+ # print "\r%s" % %w[ / - \\ | ][(c +=1) % 4]
6
+ # print "\r%s" % ['o.o', 'o.O', 'O.O', 'O.o'][(c +=1) % 4]
7
+
8
+ select(nil, nil, nil, 0.2)
9
+ end
Binary file
@@ -0,0 +1 @@
1
+ hook_content
@@ -0,0 +1 @@
1
+ <hook_content_2>
@@ -0,0 +1,103 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class CmsAdmin::LayoutsControllerTest < ActionController::TestCase
4
+
5
+ def test_get_index
6
+ get :index
7
+ assert_response :success
8
+ assert assigns(:cms_layouts)
9
+ assert_template :index
10
+ end
11
+
12
+ def test_get_index_with_no_layouts
13
+ CmsLayout.delete_all
14
+ get :index
15
+ assert_response :redirect
16
+ assert_redirected_to :action => :new
17
+ end
18
+
19
+ def test_get_new
20
+ get :new
21
+ assert_response :success
22
+ assert assigns(:cms_layout)
23
+ assert_equal '{{ cms:page:content:text }}', assigns(:cms_layout).content
24
+ assert_template :new
25
+ assert_select 'form[action=/cms-admin/layouts]'
26
+ end
27
+
28
+ def test_get_edit
29
+ layout = cms_layouts(:default)
30
+ get :edit, :id => layout
31
+ assert_response :success
32
+ assert assigns(:cms_layout)
33
+ assert_template :edit
34
+ assert_select "form[action=/cms-admin/layouts/#{layout.id}]"
35
+ end
36
+
37
+ def test_get_edit_failure
38
+ get :edit, :id => 'not_found'
39
+ assert_response :redirect
40
+ assert_redirected_to :action => :index
41
+ assert_equal 'Layout not found', flash[:error]
42
+ end
43
+
44
+ def test_creation
45
+ assert_difference 'CmsLayout.count' do
46
+ post :create, :cms_layout => {
47
+ :label => 'Test Layout',
48
+ :slug => 'test',
49
+ :content => 'Test {{cms:page:content}}'
50
+ }
51
+ assert_response :redirect
52
+ layout = CmsLayout.last
53
+ assert_equal cms_sites(:default), layout.cms_site
54
+ assert_redirected_to :action => :edit, :id => layout
55
+ assert_equal 'Layout created', flash[:notice]
56
+ end
57
+ end
58
+
59
+ def test_creation_failure
60
+ assert_no_difference 'CmsLayout.count' do
61
+ post :create, :cms_layout => { }
62
+ assert_response :success
63
+ assert_template :new
64
+ assert_equal 'Failed to create layout', flash[:error]
65
+ end
66
+ end
67
+
68
+ def test_update
69
+ layout = cms_layouts(:default)
70
+ put :update, :id => layout, :cms_layout => {
71
+ :label => 'New Label',
72
+ :content => 'New {{cms:page:content}}'
73
+ }
74
+ assert_response :redirect
75
+ assert_redirected_to :action => :edit, :id => layout
76
+ assert_equal 'Layout updated', flash[:notice]
77
+ layout.reload
78
+ assert_equal 'New Label', layout.label
79
+ assert_equal 'New {{cms:page:content}}', layout.content
80
+ end
81
+
82
+ def test_update_failure
83
+ layout = cms_layouts(:default)
84
+ put :update, :id => layout, :cms_layout => {
85
+ :label => ''
86
+ }
87
+ assert_response :success
88
+ assert_template :edit
89
+ layout.reload
90
+ assert_not_equal '', layout.label
91
+ assert_equal 'Failed to update layout', flash[:error]
92
+ end
93
+
94
+ def test_destroy
95
+ assert_difference 'CmsLayout.count', -1 do
96
+ delete :destroy, :id => cms_layouts(:default)
97
+ assert_response :redirect
98
+ assert_redirected_to :action => :index
99
+ assert_equal 'Layout deleted', flash[:notice]
100
+ end
101
+ end
102
+
103
+ end
@@ -0,0 +1,334 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class CmsAdmin::PagesControllerTest < ActionController::TestCase
4
+
5
+ def test_get_index
6
+ get :index
7
+ assert_response :success
8
+ assert assigns(:cms_pages)
9
+ assert_template :index
10
+ end
11
+
12
+ def test_get_index_with_no_pages
13
+ CmsPage.delete_all
14
+ get :index
15
+ assert_response :redirect
16
+ assert_redirected_to :action => :new
17
+ end
18
+
19
+ def test_get_new
20
+ get :new
21
+ assert_response :success
22
+ assert assigns(:cms_page)
23
+ assert_equal cms_layouts(:default), assigns(:cms_page).cms_layout
24
+
25
+ assert_template :new
26
+ assert_select 'form[action=/cms-admin/pages]'
27
+ end
28
+
29
+ def test_get_new_with_field_datetime
30
+ cms_layouts(:default).update_attribute(:content, '{{cms:field:test_label:datetime}}')
31
+ get :new
32
+ assert_select "input[type='datetime'][name='cms_page[cms_blocks_attributes][][content]']"
33
+ assert_select "input[type='hidden'][name='cms_page[cms_blocks_attributes][][label]'][value='test_label']"
34
+ end
35
+
36
+ def test_get_new_with_field_integer
37
+ cms_layouts(:default).update_attribute(:content, '{{cms:field:test_label:integer}}')
38
+ get :new
39
+ assert_select "input[type='number'][name='cms_page[cms_blocks_attributes][][content]']"
40
+ assert_select "input[type='hidden'][name='cms_page[cms_blocks_attributes][][label]'][value='test_label']"
41
+ end
42
+
43
+ def test_get_new_with_field_string
44
+ cms_layouts(:default).update_attribute(:content, '{{cms:field:test_label}}')
45
+ get :new
46
+ assert_select "input[type='text'][name='cms_page[cms_blocks_attributes][][content]']"
47
+ assert_select "input[type='hidden'][name='cms_page[cms_blocks_attributes][][label]'][value='test_label']"
48
+ end
49
+
50
+ def test_get_new_with_field_text
51
+ cms_layouts(:default).update_attribute(:content, '{{cms:field:test_label:text}}')
52
+ get :new
53
+ assert_select "textarea[name='cms_page[cms_blocks_attributes][][content]']"
54
+ assert_select "input[type='hidden'][name='cms_page[cms_blocks_attributes][][label]'][value='test_label']"
55
+ end
56
+
57
+ def test_get_new_with_page_datetime
58
+ cms_layouts(:default).update_attribute(:content, '{{cms:page:test_label:datetime}}')
59
+ get :new
60
+ assert_select "input[type='datetime'][name='cms_page[cms_blocks_attributes][][content]']"
61
+ assert_select "input[type='hidden'][name='cms_page[cms_blocks_attributes][][label]'][value='test_label']"
62
+ end
63
+
64
+ def test_get_new_with_page_integer
65
+ cms_layouts(:default).update_attribute(:content, '{{cms:page:test_label:integer}}')
66
+ get :new
67
+ assert_select "input[type='number'][name='cms_page[cms_blocks_attributes][][content]']"
68
+ assert_select "input[type='hidden'][name='cms_page[cms_blocks_attributes][][label]'][value='test_label']"
69
+ end
70
+
71
+ def test_get_new_with_page_string
72
+ cms_layouts(:default).update_attribute(:content, '{{cms:page:test_label:string}}')
73
+ get :new
74
+ assert_select "input[type='text'][name='cms_page[cms_blocks_attributes][][content]']"
75
+ assert_select "input[type='hidden'][name='cms_page[cms_blocks_attributes][][label]'][value='test_label']"
76
+ end
77
+
78
+ def test_get_new_with_page_text
79
+ cms_layouts(:default).update_attribute(:content, '{{cms:page:test_label}}')
80
+ get :new
81
+ assert_select "textarea[name='cms_page[cms_blocks_attributes][][content]']"
82
+ assert_select "input[type='hidden'][name='cms_page[cms_blocks_attributes][][label]'][value='test_label']"
83
+ end
84
+
85
+ def test_get_new_with_rich_page_text
86
+ cms_layouts(:default).update_attribute(:content, '{{cms:page:test_label:rich_text}}')
87
+ get :new
88
+ assert_select "textarea[name='cms_page[cms_blocks_attributes][][content]']"
89
+ assert_select "input[type='hidden'][name='cms_page[cms_blocks_attributes][][label]'][value='test_label']"
90
+ end
91
+
92
+ def test_get_new_as_child_page
93
+ get :new, :parent_id => cms_pages(:default)
94
+ assert_response :success
95
+ assert assigns(:cms_page)
96
+ assert_equal cms_pages(:default), assigns(:cms_page).parent
97
+ assert_template :new
98
+ end
99
+
100
+ def test_get_edit
101
+ page = cms_pages(:default)
102
+ get :edit, :id => page
103
+ assert_response :success
104
+ assert assigns(:cms_page)
105
+ assert_template :edit
106
+ assert_select "form[action=/cms-admin/pages/#{page.id}]"
107
+ assert_select "input[name='cms_page[cms_blocks_attributes][][id]'][value='#{cms_blocks(:default_field_text).id}']"
108
+ assert_select "input[name='cms_page[cms_blocks_attributes][][id]'][value='#{cms_blocks(:default_field_text).id}']"
109
+ end
110
+
111
+ def test_get_edit_failure
112
+ get :edit, :id => 'not_found'
113
+ assert_response :redirect
114
+ assert_redirected_to :action => :index
115
+ assert_equal 'Page not found', flash[:error]
116
+ end
117
+
118
+ def test_get_edit_with_blank_layout
119
+ page = cms_pages(:default)
120
+ page.update_attribute(:cms_layout_id, nil)
121
+ get :edit, :id => page
122
+ assert_response :success
123
+ assert assigns(:cms_page)
124
+ assert assigns(:cms_page).cms_layout
125
+ end
126
+
127
+ def test_creation
128
+ assert_difference 'CmsPage.count' do
129
+ assert_difference 'CmsBlock.count', 2 do
130
+ post :create, :cms_page => {
131
+ :label => 'Test Page',
132
+ :slug => 'test-page',
133
+ :parent_id => cms_pages(:default).id,
134
+ :cms_layout_id => cms_layouts(:default).id,
135
+ :cms_blocks_attributes => [
136
+ { :label => 'default_page_text',
137
+ :content => 'content content' },
138
+ { :label => 'default_field_text',
139
+ :content => 'title content' }
140
+ ]
141
+ }
142
+ assert_response :redirect
143
+ page = CmsPage.last
144
+ assert_equal cms_sites(:default), page.cms_site
145
+ assert_redirected_to :action => :edit, :id => page
146
+ assert_equal 'Page saved', flash[:notice]
147
+ end
148
+ end
149
+ end
150
+
151
+ def test_creation_failure
152
+ assert_no_difference ['CmsPage.count', 'CmsBlock.count'] do
153
+ post :create, :cms_page => {
154
+ :cms_layout_id => cms_layouts(:default).id,
155
+ :cms_blocks_attributes => [
156
+ { :label => 'default_page_text',
157
+ :content => 'content content' },
158
+ { :label => 'default_field_text',
159
+ :content => 'title content' }
160
+ ]
161
+ }
162
+ assert_response :success
163
+ page = assigns(:cms_page)
164
+ assert_equal 2, page.cms_blocks.size
165
+ assert_equal ['content content', 'title content'], page.cms_blocks.collect{|b| b.content}
166
+ assert_template :new
167
+ assert_equal 'Failed to create page', flash[:error]
168
+ end
169
+ end
170
+
171
+ def test_update
172
+ page = cms_pages(:default)
173
+ assert_no_difference 'CmsBlock.count' do
174
+ put :update, :id => page, :cms_page => {
175
+ :label => 'Updated Label'
176
+ }
177
+ page.reload
178
+ assert_response :redirect
179
+ assert_redirected_to :action => :edit, :id => page
180
+ assert_equal 'Page updated', flash[:notice]
181
+ assert_equal 'Updated Label', page.label
182
+ end
183
+ end
184
+
185
+ def test_update_with_layout_change
186
+ page = cms_pages(:default)
187
+ assert_difference 'CmsBlock.count', 1 do
188
+ put :update, :id => page, :cms_page => {
189
+ :label => 'Updated Label',
190
+ :cms_layout_id => cms_layouts(:nested).id,
191
+ :cms_blocks_attributes => [
192
+ { :label => 'content',
193
+ :content => 'new_page_text_content',
194
+ :id => cms_blocks(:default_page_text).id },
195
+ { :label => 'header',
196
+ :content => 'new_page_string_content' }
197
+ ]
198
+ }
199
+ page.reload
200
+ assert_response :redirect
201
+ assert_redirected_to :action => :edit, :id => page
202
+ assert_equal 'Page updated', flash[:notice]
203
+ assert_equal 'Updated Label', page.label
204
+ assert_equal ['new_page_text_content', 'default_field_text_content', 'new_page_string_content'], page.cms_blocks.collect{|b| b.content}
205
+ end
206
+ end
207
+
208
+ def test_update_failure
209
+ put :update, :id => cms_pages(:default), :cms_page => {
210
+ :label => ''
211
+ }
212
+ assert_response :success
213
+ assert_template :edit
214
+ assert assigns(:cms_page)
215
+ assert_equal 'Failed to update page', flash[:error]
216
+ end
217
+
218
+ def test_destroy
219
+ assert_difference 'CmsPage.count', -2 do
220
+ assert_difference 'CmsBlock.count', -2 do
221
+ delete :destroy, :id => cms_pages(:default)
222
+ assert_response :redirect
223
+ assert_redirected_to :action => :index
224
+ assert_equal 'Page deleted', flash[:notice]
225
+ end
226
+ end
227
+ end
228
+
229
+ def test_get_form_blocks
230
+ xhr :get, :form_blocks, :id => cms_pages(:default), :layout_id => cms_layouts(:nested).id
231
+ assert_response :success
232
+ assert assigns(:cms_page)
233
+ assert_equal 2, assigns(:cms_page).cms_tags.size
234
+ assert_template :form_blocks
235
+
236
+ xhr :get, :form_blocks, :id => cms_pages(:default), :layout_id => cms_layouts(:default).id
237
+ assert_response :success
238
+ assert assigns(:cms_page)
239
+ assert_equal 4, assigns(:cms_page).cms_tags.size
240
+ assert_template :form_blocks
241
+ end
242
+
243
+ def test_get_form_blocks_for_new_page
244
+ xhr :get, :form_blocks, :id => 0, :layout_id => cms_layouts(:default).id
245
+ assert_response :success
246
+ assert assigns(:cms_page)
247
+ assert_equal 3, assigns(:cms_page).cms_tags.size
248
+ assert_template :form_blocks
249
+ end
250
+
251
+ def test_creation_preview
252
+ assert_no_difference 'CmsPage.count' do
253
+ post :create, :preview => 'Preview', :cms_page => {
254
+ :label => 'Test Page',
255
+ :slug => 'test-page',
256
+ :parent_id => cms_pages(:default).id,
257
+ :cms_layout_id => cms_layouts(:default).id,
258
+ :cms_blocks_attributes => [
259
+ { :label => 'default_page_text',
260
+ :content => 'preview content' }
261
+ ]
262
+ }
263
+ assert_response :success
264
+ assert_match /preview content/, response.body
265
+ end
266
+ end
267
+
268
+ def test_update_preview
269
+ page = cms_pages(:default)
270
+ assert_no_difference 'CmsPage.count' do
271
+ put :update, :preview => 'Preview', :id => page, :cms_page => {
272
+ :label => 'Updated Label',
273
+ :cms_blocks_attributes => [
274
+ { :label => 'default_page_text',
275
+ :content => 'preview content',
276
+ :id => cms_blocks(:default_page_text).id}
277
+ ]
278
+ }
279
+ assert_response :success
280
+ assert_match /preview content/, response.body
281
+ page.reload
282
+ assert_not_equal 'Updated Label', page.label
283
+ end
284
+ end
285
+
286
+ def test_get_new_with_no_layout
287
+ CmsLayout.destroy_all
288
+ get :new
289
+ assert_response :redirect
290
+ assert_redirected_to new_cms_admin_layout_path
291
+ assert_equal 'No Layouts found. Please create one.', flash[:error]
292
+ end
293
+
294
+ def test_get_edit_with_no_layout
295
+ CmsLayout.destroy_all
296
+ page = cms_pages(:default)
297
+ get :edit, :id => page
298
+ assert_response :redirect
299
+ assert_redirected_to new_cms_admin_layout_path
300
+ assert_equal 'No Layouts found. Please create one.', flash[:error]
301
+ end
302
+
303
+ def test_get_toggle_branch
304
+ page = cms_pages(:default)
305
+ get :toggle_branch, :id => page, :format => :js
306
+ assert_response :success
307
+ assert_equal [page.id.to_s], session[:cms_page_tree]
308
+
309
+ get :toggle_branch, :id => page, :format => :js
310
+ assert_response :success
311
+ assert_equal [], session[:cms_page_tree]
312
+ end
313
+
314
+ def test_reorder
315
+ page_one = cms_pages(:child)
316
+ page_two = cms_sites(:default).cms_pages.create!(
317
+ :parent => cms_pages(:default),
318
+ :cms_layout => cms_layouts(:default),
319
+ :label => 'test',
320
+ :slug => 'test'
321
+ )
322
+ assert_equal 0, page_one.position
323
+ assert_equal 1, page_two.position
324
+
325
+ post :reorder, :cms_page => [page_two.id, page_one.id]
326
+ assert_response :success
327
+ page_one.reload
328
+ page_two.reload
329
+
330
+ assert_equal 1, page_one.position
331
+ assert_equal 0, page_two.position
332
+ end
333
+
334
+ end
@@ -0,0 +1,99 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class CmsAdmin::SitesControllerTest < ActionController::TestCase
4
+
5
+ def test_get_index
6
+ get :index
7
+ assert_response :success
8
+ assert assigns(:cms_sites)
9
+ assert_template :index
10
+ end
11
+
12
+ def test_get_index_with_no_sites
13
+ CmsSite.delete_all
14
+ get :index
15
+ assert_response :redirect
16
+ assert_redirected_to :action => :new
17
+ end
18
+
19
+ def test_get_new
20
+ get :new
21
+ assert_response :success
22
+ assert assigns(:cms_site)
23
+ assert_equal 'test.host', assigns(:cms_site).hostname
24
+ assert_template :new
25
+ assert_select 'form[action=/cms-admin/sites]'
26
+ end
27
+
28
+ def test_get_edit
29
+ site = cms_sites(:default)
30
+ get :edit, :id => site
31
+ assert_response :success
32
+ assert assigns(:cms_site)
33
+ assert_template :edit
34
+ assert_select "form[action=/cms-admin/sites/#{site.id}]"
35
+ end
36
+
37
+ def test_get_edit_failure
38
+ get :edit, :id => 'not_found'
39
+ assert_response :redirect
40
+ assert_redirected_to :action => :index
41
+ assert_equal 'Site not found', flash[:error]
42
+ end
43
+
44
+ def test_creation
45
+ assert_difference 'CmsSite.count' do
46
+ post :create, :cms_site => {
47
+ :label => 'Test Site',
48
+ :hostname => 'test.site.local'
49
+ }
50
+ assert_response :redirect
51
+ assert_redirected_to :action => :edit, :id => CmsSite.last
52
+ assert_equal 'Site created', flash[:notice]
53
+ end
54
+ end
55
+
56
+ def test_creation_failure
57
+ assert_no_difference 'CmsSite.count' do
58
+ post :create, :cms_site => { }
59
+ assert_response :success
60
+ assert_template :new
61
+ assert_equal 'Failed to create site', flash[:error]
62
+ end
63
+ end
64
+
65
+ def test_update
66
+ site = cms_sites(:default)
67
+ put :update, :id => site, :cms_site => {
68
+ :label => 'New Site',
69
+ :hostname => 'new.site.local'
70
+ }
71
+ assert_response :redirect
72
+ assert_redirected_to :action => :edit, :id => site
73
+ assert_equal 'Site updated', flash[:notice]
74
+ site.reload
75
+ assert_equal 'New Site', site.label
76
+ assert_equal 'new.site.local', site.hostname
77
+ end
78
+
79
+ def test_update_failure
80
+ site = cms_sites(:default)
81
+ put :update, :id => site, :cms_site => {
82
+ :label => ''
83
+ }
84
+ assert_response :success
85
+ assert_template :edit
86
+ site.reload
87
+ assert_not_equal '', site.label
88
+ assert_equal 'Failed to update site', flash[:error]
89
+ end
90
+
91
+ def test_destroy
92
+ assert_difference 'CmsSite.count', -1 do
93
+ delete :destroy, :id => cms_sites(:default)
94
+ assert_response :redirect
95
+ assert_redirected_to :action => :index
96
+ assert_equal 'Site deleted', flash[:notice]
97
+ end
98
+ end
99
+ end