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,102 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class CmsAdmin::SnippetsControllerTest < ActionController::TestCase
4
+
5
+ def test_get_index
6
+ get :index
7
+ assert_response :success
8
+ assert assigns(:cms_snippets)
9
+ assert_template :index
10
+ end
11
+
12
+ def test_get_index_with_no_snippets
13
+ CmsSnippet.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_snippet)
23
+ assert_template :new
24
+ assert_select 'form[action=/cms-admin/snippets]'
25
+ end
26
+
27
+ def test_get_edit
28
+ snippet = cms_snippets(:default)
29
+ get :edit, :id => snippet
30
+ assert_response :success
31
+ assert assigns(:cms_snippet)
32
+ assert_template :edit
33
+ assert_select "form[action=/cms-admin/snippets/#{snippet.id}]"
34
+ end
35
+
36
+ def test_get_edit_failure
37
+ get :edit, :id => 'not_found'
38
+ assert_response :redirect
39
+ assert_redirected_to :action => :index
40
+ assert_equal 'Snippet not found', flash[:error]
41
+ end
42
+
43
+ def test_creation
44
+ assert_difference 'CmsSnippet.count' do
45
+ post :create, :cms_snippet => {
46
+ :label => 'Test Snippet',
47
+ :slug => 'test-snippet',
48
+ :content => 'Test Content'
49
+ }
50
+ assert_response :redirect
51
+ snippet = CmsSnippet.last
52
+ assert_equal cms_sites(:default), snippet.cms_site
53
+ assert_redirected_to :action => :edit, :id => snippet
54
+ assert_equal 'Snippet created', flash[:notice]
55
+ end
56
+ end
57
+
58
+ def test_creation_failure
59
+ assert_no_difference 'CmsSnippet.count' do
60
+ post :create, :cms_snippet => { }
61
+ assert_response :success
62
+ assert_template :new
63
+ assert_equal 'Failed to create snippet', flash[:error]
64
+ end
65
+ end
66
+
67
+ def test_update
68
+ snippet = cms_snippets(:default)
69
+ put :update, :id => snippet, :cms_snippet => {
70
+ :label => 'New-Snippet',
71
+ :content => 'New Content'
72
+ }
73
+ assert_response :redirect
74
+ assert_redirected_to :action => :edit, :id => snippet
75
+ assert_equal 'Snippet updated', flash[:notice]
76
+ snippet.reload
77
+ assert_equal 'New-Snippet', snippet.label
78
+ assert_equal 'New Content', snippet.content
79
+ end
80
+
81
+ def test_update_failure
82
+ snippet = cms_snippets(:default)
83
+ put :update, :id => snippet, :cms_snippet => {
84
+ :label => ''
85
+ }
86
+ assert_response :success
87
+ assert_template :edit
88
+ snippet.reload
89
+ assert_not_equal '', snippet.label
90
+ assert_equal 'Failed to update snippet', flash[:error]
91
+ end
92
+
93
+ def test_destroy
94
+ assert_difference 'CmsSnippet.count', -1 do
95
+ delete :destroy, :id => cms_snippets(:default)
96
+ assert_response :redirect
97
+ assert_redirected_to :action => :index
98
+ assert_equal 'Snippet deleted', flash[:notice]
99
+ end
100
+ end
101
+
102
+ end
@@ -0,0 +1,26 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class CmsAdmin::UploadsControllerTest < ActionController::TestCase
4
+
5
+ def test_create
6
+ assert_difference 'CmsUpload.count', 1 do
7
+ xhr :post, :create, :file => fixture_file_upload('files/valid_image.jpg')
8
+ assert_response :success
9
+ end
10
+ end
11
+
12
+ def test_create_fails
13
+ assert_no_difference 'CmsUpload.count' do
14
+ xhr :post, :create, :file => nil
15
+ assert_response :bad_request
16
+ end
17
+ end
18
+
19
+ def test_destroy
20
+ assert_difference 'CmsUpload.count', -1 do
21
+ xhr :delete, :destroy, :id => cms_uploads(:default)
22
+ assert_response :success
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,134 @@
1
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
2
+
3
+ class CmsContentControllerTest < ActionController::TestCase
4
+
5
+ def test_render_page
6
+ get :render_html, :cms_path => ''
7
+ assert_equal assigns(:cms_page), cms_pages(:default)
8
+ assert_response :success
9
+ assert_equal rendered_content_formatter(
10
+ '
11
+ layout_content_a
12
+ default_page_text_content_a
13
+ default_snippet_content
14
+ default_page_text_content_b
15
+ layout_content_b
16
+ default_snippet_content
17
+ layout_content_c'
18
+ ), response.body
19
+ end
20
+
21
+ def test_render_page_with_app_layout
22
+ cms_layouts(:default).update_attribute(:app_layout, 'cms_admin.html.erb')
23
+ get :render_html, :cms_path => ''
24
+ assert_response :success
25
+ assert_select "body[class='c_cms_content a_render_html']"
26
+ end
27
+
28
+ def test_render_page_not_found
29
+ get :render_html, :cms_path => 'doesnotexist'
30
+ assert_response 404
31
+ assert_equal 'Page Not Found', response.body
32
+ end
33
+
34
+ def test_render_page_not_found_with_custom_404
35
+ page = cms_sites(:default).cms_pages.create!(
36
+ :label => '404',
37
+ :slug => '404',
38
+ :parent_id => cms_pages(:default).id,
39
+ :cms_layout_id => cms_layouts(:default).id,
40
+ :is_published => '1',
41
+ :cms_blocks_attributes => [
42
+ { :label => 'default_page_text',
43
+ :type => 'CmsTag::PageText',
44
+ :content => 'custom 404 page content' }
45
+ ]
46
+ )
47
+ assert_equal '/404', page.full_path
48
+ assert page.is_published?
49
+ get :render_html, :cms_path => 'doesnotexist'
50
+ assert_response 404
51
+ assert assigns(:cms_page)
52
+ assert_match /custom 404 page content/, response.body
53
+ end
54
+
55
+ def test_render_page_with_redirect
56
+ cms_pages(:child).update_attribute(:target_page, cms_pages(:default))
57
+ assert_equal cms_pages(:default), cms_pages(:child).target_page
58
+ get :render_html, :cms_path => 'child-page'
59
+ assert_response :redirect
60
+ assert_redirected_to '/'
61
+ end
62
+
63
+ def test_render_page_unpublished
64
+ page = cms_pages(:default)
65
+ page.update_attribute(:is_published, false)
66
+ get :render_html, :cms_path => ''
67
+ assert_response 404
68
+ end
69
+
70
+ def test_render_page_with_irb_disabled
71
+ assert LucyCMS.config.disable_irb
72
+
73
+ irb_page = cms_sites(:default).cms_pages.create!(
74
+ :label => 'irb',
75
+ :slug => 'irb',
76
+ :parent_id => cms_pages(:default).id,
77
+ :cms_layout_id => cms_layouts(:default).id,
78
+ :is_published => '1',
79
+ :cms_blocks_attributes => [
80
+ { :label => 'default_page_text',
81
+ :type => 'CmsTag::PageText',
82
+ :content => 'text <%= 2 + 2 %> text' }
83
+ ]
84
+ )
85
+ get :render_html, :cms_path => 'irb'
86
+ assert_response :success
87
+ assert_match "text &lt;%= 2 + 2 %&gt; text", response.body
88
+ end
89
+
90
+ def test_render_page_with_irb_enabled
91
+ LucyCMS.config.disable_irb = false
92
+
93
+ irb_page = cms_sites(:default).cms_pages.create!(
94
+ :label => 'irb',
95
+ :slug => 'irb',
96
+ :parent_id => cms_pages(:default).id,
97
+ :cms_layout_id => cms_layouts(:default).id,
98
+ :is_published => '1',
99
+ :cms_blocks_attributes => [
100
+ { :label => 'default_page_text',
101
+ :type => 'CmsTag::PageText',
102
+ :content => 'text <%= 2 + 2 %> text' }
103
+ ]
104
+ )
105
+ get :render_html, :cms_path => 'irb'
106
+ assert_response :success
107
+ assert_match "text 4 text", response.body
108
+ end
109
+
110
+ def test_render_css
111
+ get :render_css, :id => cms_layouts(:default).slug
112
+ assert_response :success
113
+ assert_match %r{text\/css}, response.headers["Content-Type"]
114
+ assert_equal cms_layouts(:default).css, response.body
115
+ end
116
+
117
+ def test_render_css_not_found
118
+ get :render_css, :id => 'bogus'
119
+ assert_response 404
120
+ end
121
+
122
+ def test_render_js
123
+ get :render_js, :id => cms_layouts(:default).slug
124
+ assert_response :success
125
+ assert_match %r{text\/javascript}, response.headers["Content-Type"]
126
+ assert_equal cms_layouts(:default).js, response.body
127
+ end
128
+
129
+ def test_render_js_not_found
130
+ get :render_js, :id => 'bogus'
131
+ assert_response 404
132
+ end
133
+
134
+ end
@@ -0,0 +1,65 @@
1
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
2
+
3
+ require 'rake'
4
+ require 'rake/rdoctask'
5
+ require 'rake/testtask'
6
+
7
+ Rake.application.rake_require '../lib/tasks/LucyCMS'
8
+
9
+ class RakeTasksTest < ActionDispatch::IntegrationTest
10
+
11
+ def test_layouts_import
12
+ CmsLayout.destroy_all
13
+ LucyCMS.configuration.seed_data_path = File.expand_path('../cms_seeds', File.dirname(__FILE__))
14
+
15
+ assert_difference 'CmsLayout.count', 2 do
16
+ capture_rake_output{
17
+ Rake.application['LucyCMS:import:check_for_requirements'].execute(
18
+ :from => 'test.host', :to => 'test.host' )
19
+ Rake.application['LucyCMS:import:layouts'].execute(
20
+ :from => 'test.host', :to => 'test.host' )
21
+ }
22
+ end
23
+ end
24
+
25
+ def test_pages_import
26
+ CmsPage.destroy_all
27
+ LucyCMS.configuration.seed_data_path = File.expand_path('../cms_seeds', File.dirname(__FILE__))
28
+
29
+ assert_difference ['CmsPage.count', 'CmsBlock.count'], 3 do
30
+ capture_rake_output{
31
+ Rake.application['LucyCMS:import:check_for_requirements'].execute(
32
+ :from => 'test.host', :to => 'test.host' )
33
+ Rake.application['LucyCMS:import:pages'].execute(
34
+ :from => 'test.host', :to => 'test.host' )
35
+ }
36
+ end
37
+ end
38
+
39
+ def test_snippets_import
40
+ CmsSnippet.destroy_all
41
+ LucyCMS.configuration.seed_data_path = File.expand_path('../cms_seeds', File.dirname(__FILE__))
42
+
43
+ assert_difference 'CmsSnippet.count', 1 do
44
+ capture_rake_output{
45
+ Rake.application['LucyCMS:import:check_for_requirements'].execute(
46
+ :from => 'test.host', :to => 'test.host' )
47
+ Rake.application['LucyCMS:import:snippets'].execute(
48
+ :from => 'test.host', :to => 'test.host' )
49
+ }
50
+ end
51
+ end
52
+
53
+ protected
54
+
55
+ def capture_rake_output
56
+ s = StringIO.new
57
+ oldstdout = $stdout
58
+ $stdout = s
59
+ yield
60
+ s.string
61
+ ensure
62
+ $stdout = oldstdout
63
+ end
64
+
65
+ end
@@ -0,0 +1,34 @@
1
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
2
+
3
+ class RenderCmsSeedTest < ActionDispatch::IntegrationTest
4
+
5
+ def test_render_with_seed_data_enabled
6
+ get '/child/subchild'
7
+ assert_response 404
8
+
9
+ LucyCMS.configuration.seed_data_path = File.expand_path('../cms_seeds', File.dirname(__FILE__))
10
+
11
+ get '/child/subchild'
12
+ assert_response :success
13
+ assert_equal '<html><div>Sub Child Page Content Content for Default Snippet</div></html>', response.body
14
+ end
15
+
16
+ def test_get_seed_data_page
17
+ LucyCMS.configuration.seed_data_path = File.expand_path('../cms_seeds', File.dirname(__FILE__))
18
+
19
+ get '/'
20
+ assert_response :success
21
+ assert assigns(:cms_page)
22
+ assert assigns(:cms_page).new_record?
23
+ end
24
+
25
+ def test_get_seed_data_css
26
+ LucyCMS.configuration.seed_data_path = File.expand_path('../cms_seeds', File.dirname(__FILE__))
27
+
28
+ get '/cms-css/default'
29
+ assert_response :success
30
+ assert assigns(:cms_layout)
31
+ assert assigns(:cms_layout).new_record?
32
+ end
33
+
34
+ end
@@ -0,0 +1,81 @@
1
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
2
+
3
+ class RenderCmsTest < ActionDispatch::IntegrationTest
4
+
5
+ def setup
6
+ Rails.application.routes.draw do
7
+ get '/render-implicit' => 'render_test#implicit'
8
+ get '/render-explicit' => 'render_test#explicit'
9
+ get '/seed-data-page' => 'render_test#seed_data_page'
10
+ get '/render-text' => 'render_test#render_text'
11
+ get '/render-update' => 'render_test#render_update'
12
+ end
13
+ super
14
+ end
15
+
16
+ def teardown
17
+ load(File.expand_path('config/routes.rb', Rails.root))
18
+ end
19
+
20
+ class ::RenderTestController < ApplicationController
21
+ def implicit
22
+ render
23
+ end
24
+ def explicit
25
+ render :cms_page => '/render-explicit-page'
26
+ end
27
+ def seed_data_page
28
+ render :cms_page => '/'
29
+ end
30
+ def render_text
31
+ render :text => 'rendered text'
32
+ end
33
+ def render_update
34
+ render :update do |page|
35
+ page.alert('rendered text')
36
+ end
37
+ end
38
+ end
39
+
40
+ def test_get_with_no_template
41
+ assert_exception_raised ActionView::MissingTemplate do
42
+ get '/render-implicit'
43
+ end
44
+ end
45
+
46
+ def test_get_with_implicit_cms_template
47
+ page = cms_pages(:child)
48
+ page.slug = 'render-implicit'
49
+ page.save!
50
+ get '/render-implicit'
51
+ assert_response :success
52
+ end
53
+
54
+ def test_get_with_explicit_cms_template
55
+ page = cms_pages(:child)
56
+ page.slug = 'render-explicit-page'
57
+ page.save!
58
+ get '/render-explicit'
59
+ assert_response :success
60
+ end
61
+
62
+ def test_get_with_explicit_cms_template_failure
63
+ page = cms_pages(:child)
64
+ page.slug = 'render-explicit-404'
65
+ page.save!
66
+ assert_exception_raised ActionView::MissingTemplate do
67
+ get '/render-explicit'
68
+ end
69
+ end
70
+
71
+ def test_get_render_text
72
+ get '/render-text'
73
+ assert_response :success
74
+ end
75
+
76
+ def test_get_render_update
77
+ get '/render-update'
78
+ assert_response :success
79
+ end
80
+
81
+ end
@@ -0,0 +1,63 @@
1
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
2
+
3
+ class SitesTest < ActionDispatch::IntegrationTest
4
+
5
+ def test_get_admin
6
+ http_auth :get, cms_admin_pages_path
7
+ assert_response :success
8
+ end
9
+
10
+ def test_get_admin_with_no_site
11
+ CmsSite.delete_all
12
+ assert_difference 'CmsSite.count' do
13
+ http_auth :get, cms_admin_pages_path
14
+ assert_response :redirect
15
+ assert_redirected_to new_cms_admin_page_path
16
+ site = CmsSite.first
17
+ assert_equal 'test.host', site.hostname
18
+ assert_equal 'Default Site', site.label
19
+ end
20
+ end
21
+
22
+ def test_get_admin_with_wrong_site
23
+ site = cms_sites(:default)
24
+ site.update_attribute(:hostname, 'remote.host')
25
+ assert_no_difference 'CmsSite.count' do
26
+ http_auth :get, cms_admin_pages_path
27
+ assert_response :success
28
+ site.reload
29
+ assert_equal 'test.host', site.hostname
30
+ end
31
+ end
32
+
33
+ def test_get_admin_with_two_wrong_sites
34
+ CmsSite.delete_all
35
+ CmsSite.create!(:label => 'Site1', :hostname => 'site1.host')
36
+ CmsSite.create!(:label => 'Site2', :hostname => 'site2.host')
37
+ assert_no_difference 'CmsSite.count' do
38
+ http_auth :get, cms_admin_pages_path
39
+ assert_response :redirect
40
+ assert_redirected_to cms_admin_sites_path
41
+ assert_equal 'No Site defined for this hostname. Create it now.', flash[:error]
42
+ end
43
+ end
44
+
45
+ def test_get_admin_with_no_site_and_no_auto_manage
46
+ LucyCMS.config.auto_manage_sites = false
47
+ CmsSite.delete_all
48
+ assert_no_difference 'CmsSite.count' do
49
+ http_auth :get, cms_admin_pages_path
50
+ assert_response :redirect
51
+ assert_redirected_to cms_admin_sites_path
52
+ assert_equal 'No Site defined for this hostname. Create it now.', flash[:error]
53
+ end
54
+ end
55
+
56
+ def test_get_public_page_for_non_existent_site
57
+ host! 'bogus.host'
58
+ get '/'
59
+ assert_response 404
60
+ assert_equal 'Site Not Found', response.body
61
+ end
62
+
63
+ end
@@ -0,0 +1,33 @@
1
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
2
+
3
+ class ViewHooksTest < ActionDispatch::IntegrationTest
4
+
5
+ def test_hooks_rendering
6
+ CmsAdmin::SitesController.append_view_path(File.expand_path('../fixtures/views', File.dirname(__FILE__)))
7
+ LucyCMS::ViewHooks.add(:navigation, '/nav_hook')
8
+
9
+ http_auth :get, cms_admin_sites_path
10
+ assert_response :success
11
+ assert_match /hook_content/, response.body
12
+ end
13
+
14
+ def test_hooks_rendering_with_multiples
15
+ CmsAdmin::SitesController.append_view_path(File.expand_path('../fixtures/views', File.dirname(__FILE__)))
16
+ LucyCMS::ViewHooks.add(:navigation, '/nav_hook')
17
+ LucyCMS::ViewHooks.add(:navigation, '/nav_hook_2')
18
+
19
+ http_auth :get, cms_admin_sites_path
20
+ assert_response :success
21
+ assert_match /hook_content/, response.body
22
+ assert_match /<hook_content_2>/, response.body
23
+ end
24
+
25
+ def test_hooks_rendering_with_no_hook
26
+ LucyCMS::ViewHooks.remove(:navigation)
27
+
28
+ http_auth :get, cms_admin_sites_path
29
+ assert_response :success
30
+ assert_no_match /hook_content/, response.body
31
+ end
32
+
33
+ end
@@ -0,0 +1,86 @@
1
+ ENV['RAILS_ENV'] = 'test'
2
+ require File.expand_path('../../config/environment', __FILE__)
3
+ require 'rails/test_help'
4
+
5
+ class ActiveSupport::TestCase
6
+
7
+ fixtures :all
8
+ include ActionDispatch::TestProcess
9
+
10
+ def setup
11
+ reset_config
12
+ @cms_site = CmsSite.new
13
+ end
14
+
15
+ # resetting default configuration
16
+ def reset_config
17
+ LucyCMS.configure do |config|
18
+ config.seed_data_path = nil
19
+ config.admin_route_prefix = 'cms-admin'
20
+ config.admin_route_redirect = "/cms-admin/pages"
21
+ config.disable_irb = true
22
+ config.enable_caching = true
23
+ end
24
+ end
25
+
26
+ # Example usage:
27
+ # assert_has_errors_on( @record, [:field_1, :field_2] )
28
+ # assert_has_errors_on( @record, {:field_1 => 'Message1', :field_2 => 'Message 2'} )
29
+ def assert_has_errors_on(record, fields)
30
+ fields = [fields].flatten unless fields.is_a?(Hash)
31
+ fields.each do |field, message|
32
+ assert record.errors.has_key?(field.to_sym), "#{record.class.name} should error on invalid #{field}"
33
+ if message && record.errors[field].is_a?(Array) && !message.is_a?(Array)
34
+ assert_not_nil record.errors[field].index(message)
35
+ elsif message
36
+ assert_equal message, record.errors[field]
37
+ end
38
+ end
39
+ end
40
+
41
+ # Example usage:
42
+ # assert_exception_raised do ... end
43
+ # assert_exception_raised ActiveRecord::RecordInvalid do ... end
44
+ # assert_exception_raised Plugin::Error, 'error_message' do ... end
45
+ def assert_exception_raised(exception_class = nil, error_message = nil, &block)
46
+ exception_raised = nil
47
+ yield
48
+ rescue => exception_raised
49
+ ensure
50
+ if exception_raised
51
+ if exception_class
52
+ assert_equal exception_class, exception_raised.class, exception_raised.to_s
53
+ else
54
+ assert true
55
+ end
56
+ assert_equal error_message, exception_raised.to_s if error_message
57
+ else
58
+ flunk 'Exception was not raised'
59
+ end
60
+ end
61
+
62
+ # Small method that allows for better formatting in tests
63
+ def rendered_content_formatter(string)
64
+ string.gsub(/^[ ]+/, '')
65
+ end
66
+ end
67
+
68
+ class ActionController::TestCase
69
+ def setup
70
+ @request.env['HTTP_AUTHORIZATION'] = "Basic #{Base64.encode64('username:password')}"
71
+ end
72
+ end
73
+
74
+ class ActionDispatch::IntegrationTest
75
+
76
+ def setup
77
+ host! 'test.host'
78
+ reset_config
79
+ end
80
+
81
+ # Attaching http_auth stuff with request. Example use:
82
+ # http_auth :get, '/cms-admin/pages'
83
+ def http_auth(method, path, options = {}, username = 'username', password = 'password')
84
+ send(method, path, options, {'HTTP_AUTHORIZATION' => "Basic #{Base64.encode64(username + ':' + password)}"})
85
+ end
86
+ end
@@ -0,0 +1,43 @@
1
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
2
+
3
+ class CmsBlockTest < ActiveSupport::TestCase
4
+
5
+ def test_fixtures_validity
6
+ CmsBlock.all.each do |block|
7
+ assert block.valid?, block.errors.full_messages.to_s
8
+ end
9
+ end
10
+
11
+ def test_new_via_page_nested_attributes
12
+ assert_difference ['CmsPage.count', 'CmsBlock.count'] do
13
+ page = CmsPage.create!(
14
+ :cms_site => cms_sites(:default),
15
+ :cms_layout => cms_layouts(:default),
16
+ :label => 'test page',
17
+ :slug => 'test_page',
18
+ :parent_id => cms_pages(:default).id,
19
+ :cms_blocks_attributes => [
20
+ {
21
+ :label => 'test_block',
22
+ :content => 'test_content'
23
+ }
24
+ ]
25
+ )
26
+ assert_equal 1, page.cms_blocks.count
27
+ block = page.cms_blocks.first
28
+ assert_equal 'test_block', block.label
29
+ assert_equal 'test_content', block.content
30
+ end
31
+ end
32
+
33
+ def test_initialize_or_find
34
+ tag = CmsTag::PageText.initialize_or_find(cms_pages(:default), :default_field_text)
35
+ assert_equal 'default_field_text', tag.label
36
+ assert_equal 'default_field_text_content', tag.content
37
+
38
+ tag = CmsTag::PageText.initialize_or_find(cms_pages(:default), :new_block)
39
+ assert_equal 'new_block', tag.label
40
+ assert tag.content.blank?
41
+ end
42
+
43
+ end
@@ -0,0 +1,17 @@
1
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
2
+
3
+ class CmsConfigurationTest < ActiveSupport::TestCase
4
+
5
+ def test_configuration_presense
6
+ assert config = LucyCMS.configuration
7
+ assert_equal nil, config.seed_data_path
8
+ assert_equal 'cms-admin', config.admin_route_prefix
9
+ assert_equal '/cms-admin/pages', config.admin_route_redirect
10
+ assert_equal true, config.disable_irb
11
+ assert_equal true, config.enable_caching
12
+ end
13
+
14
+ def test_initialization_overrides
15
+ end
16
+
17
+ end