lucy_cms 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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