comfypress 0.1.3

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 (289) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.travis.yml +22 -0
  4. data/Gemfile +22 -0
  5. data/Gemfile.lock +175 -0
  6. data/LICENSE +20 -0
  7. data/README.md +79 -0
  8. data/Rakefile +5 -0
  9. data/app/assets/images/comfypress/arrow_bottom.gif +0 -0
  10. data/app/assets/images/comfypress/arrow_right.gif +0 -0
  11. data/app/assets/images/comfypress/bootstrap/glyphicons-halflings-white.png +0 -0
  12. data/app/assets/images/comfypress/bootstrap/glyphicons-halflings.png +0 -0
  13. data/app/assets/images/comfypress/checkerboard.gif +0 -0
  14. data/app/assets/images/comfypress/icon_draft.gif +0 -0
  15. data/app/assets/images/comfypress/icon_file.gif +0 -0
  16. data/app/assets/images/comfypress/icon_layout.gif +0 -0
  17. data/app/assets/images/comfypress/icon_move.gif +0 -0
  18. data/app/assets/images/comfypress/icon_page.gif +0 -0
  19. data/app/assets/images/comfypress/icon_site.gif +0 -0
  20. data/app/assets/images/comfypress/icon_snippet.gif +0 -0
  21. data/app/assets/images/comfypress/nav_arrow.png +0 -0
  22. data/app/assets/javascripts/comfypress/admin/application.js +1 -0
  23. data/app/assets/javascripts/comfypress/application.js.coffee +175 -0
  24. data/app/assets/javascripts/comfypress/lib/bootstrap-datetimepicker.js +21 -0
  25. data/app/assets/javascripts/comfypress/lib/bootstrap-wysihtml5.js +492 -0
  26. data/app/assets/javascripts/comfypress/lib/bootstrap.js +6 -0
  27. data/app/assets/javascripts/comfypress/lib/codemirror.js +10 -0
  28. data/app/assets/javascripts/comfypress/lib/wysihtml5.js +261 -0
  29. data/app/assets/stylesheets/comfypress/admin/application.css +1 -0
  30. data/app/assets/stylesheets/comfypress/application.css.sass +8 -0
  31. data/app/assets/stylesheets/comfypress/base.css.sass +333 -0
  32. data/app/assets/stylesheets/comfypress/bootstrap_overrides.css.sass +45 -0
  33. data/app/assets/stylesheets/comfypress/codemirror_overrides.css.sass +27 -0
  34. data/app/assets/stylesheets/comfypress/lib/bootstrap-datetimepicker.css +9 -0
  35. data/app/assets/stylesheets/comfypress/lib/bootstrap-wysihtml5.css +102 -0
  36. data/app/assets/stylesheets/comfypress/lib/bootstrap.css +9 -0
  37. data/app/assets/stylesheets/comfypress/lib/codemirror.css +240 -0
  38. data/app/assets/stylesheets/comfypress/wysihtml5_overrides.css.sass +5 -0
  39. data/app/controllers/application_controller.rb +5 -0
  40. data/app/controllers/cms_admin/base_controller.rb +51 -0
  41. data/app/controllers/cms_admin/categories_controller.rb +35 -0
  42. data/app/controllers/cms_admin/files_controller.rb +108 -0
  43. data/app/controllers/cms_admin/layouts_controller.rb +67 -0
  44. data/app/controllers/cms_admin/menu_items_controller.rb +65 -0
  45. data/app/controllers/cms_admin/menus_controller.rb +60 -0
  46. data/app/controllers/cms_admin/pages_controller.rb +112 -0
  47. data/app/controllers/cms_admin/revisions_controller.rb +57 -0
  48. data/app/controllers/cms_admin/sites_controller.rb +64 -0
  49. data/app/controllers/cms_admin/snippets_controller.rb +64 -0
  50. data/app/controllers/cms_content_controller.rb +79 -0
  51. data/app/helpers/application_helper.rb +16 -0
  52. data/app/models/cms/block.rb +48 -0
  53. data/app/models/cms/categorization.rb +21 -0
  54. data/app/models/cms/category.rb +30 -0
  55. data/app/models/cms/file.rb +75 -0
  56. data/app/models/cms/layout.rb +99 -0
  57. data/app/models/cms/menu.rb +26 -0
  58. data/app/models/cms/menu_item.rb +14 -0
  59. data/app/models/cms/page.rb +202 -0
  60. data/app/models/cms/revision.rb +17 -0
  61. data/app/models/cms/site.rb +113 -0
  62. data/app/models/cms/snippet.rb +58 -0
  63. data/app/models/cms.rb +5 -0
  64. data/app/views/cms_admin/categories/_categories.html.haml +3 -0
  65. data/app/views/cms_admin/categories/_edit.html.haml +6 -0
  66. data/app/views/cms_admin/categories/_form.html.haml +8 -0
  67. data/app/views/cms_admin/categories/_index.html.haml +24 -0
  68. data/app/views/cms_admin/categories/_show.html.haml +13 -0
  69. data/app/views/cms_admin/categories/create.js.erb +7 -0
  70. data/app/views/cms_admin/categories/destroy.js.erb +3 -0
  71. data/app/views/cms_admin/categories/edit.js.erb +3 -0
  72. data/app/views/cms_admin/categories/update.js.erb +6 -0
  73. data/app/views/cms_admin/files/_file.html.haml +13 -0
  74. data/app/views/cms_admin/files/_form.html.haml +14 -0
  75. data/app/views/cms_admin/files/_index.html.haml +14 -0
  76. data/app/views/cms_admin/files/_page_form.html.haml +9 -0
  77. data/app/views/cms_admin/files/destroy.js.coffee +2 -0
  78. data/app/views/cms_admin/files/edit.html.haml +5 -0
  79. data/app/views/cms_admin/files/index.html.haml +28 -0
  80. data/app/views/cms_admin/files/new.html.haml +5 -0
  81. data/app/views/cms_admin/layouts/_form.html.haml +17 -0
  82. data/app/views/cms_admin/layouts/_index_branch.html.haml +23 -0
  83. data/app/views/cms_admin/layouts/edit.html.haml +9 -0
  84. data/app/views/cms_admin/layouts/index.html.haml +9 -0
  85. data/app/views/cms_admin/layouts/new.html.haml +5 -0
  86. data/app/views/cms_admin/menu_items/_form.html.haml +22 -0
  87. data/app/views/cms_admin/menu_items/edit.html.haml +8 -0
  88. data/app/views/cms_admin/menu_items/index.html.haml +24 -0
  89. data/app/views/cms_admin/menu_items/new.html.haml +5 -0
  90. data/app/views/cms_admin/menus/_form.html.haml +8 -0
  91. data/app/views/cms_admin/menus/edit.html.haml +8 -0
  92. data/app/views/cms_admin/menus/index.html.haml +24 -0
  93. data/app/views/cms_admin/menus/new.html.haml +5 -0
  94. data/app/views/cms_admin/pages/_form.html.haml +38 -0
  95. data/app/views/cms_admin/pages/_form_blocks.html.haml +28 -0
  96. data/app/views/cms_admin/pages/_index_branch.html.haml +35 -0
  97. data/app/views/cms_admin/pages/edit.html.haml +9 -0
  98. data/app/views/cms_admin/pages/form_blocks.js.erb +2 -0
  99. data/app/views/cms_admin/pages/index.html.haml +11 -0
  100. data/app/views/cms_admin/pages/new.html.haml +5 -0
  101. data/app/views/cms_admin/pages/toggle_branch.js.erb +11 -0
  102. data/app/views/cms_admin/revisions/show.html.haml +28 -0
  103. data/app/views/cms_admin/sites/_form.html.haml +14 -0
  104. data/app/views/cms_admin/sites/_mirrors.html.haml +17 -0
  105. data/app/views/cms_admin/sites/edit.html.haml +5 -0
  106. data/app/views/cms_admin/sites/index.html.haml +24 -0
  107. data/app/views/cms_admin/sites/new.html.haml +5 -0
  108. data/app/views/cms_admin/snippets/_form.html.haml +11 -0
  109. data/app/views/cms_admin/snippets/edit.html.haml +9 -0
  110. data/app/views/cms_admin/snippets/index.html.haml +28 -0
  111. data/app/views/cms_admin/snippets/new.html.haml +5 -0
  112. data/app/views/cms_content/_menu.html.haml +5 -0
  113. data/app/views/cms_content/render_sitemap.xml.builder +15 -0
  114. data/app/views/layouts/cms_admin/_body.html.haml +16 -0
  115. data/app/views/layouts/cms_admin/_center.html.haml +7 -0
  116. data/app/views/layouts/cms_admin/_footer.html.haml +3 -0
  117. data/app/views/layouts/cms_admin/_footer_js.html.haml +7 -0
  118. data/app/views/layouts/cms_admin/_head.html.haml +12 -0
  119. data/app/views/layouts/cms_admin/_left.html.haml +11 -0
  120. data/app/views/layouts/cms_admin/_right.html.haml +1 -0
  121. data/app/views/layouts/cms_admin.html.haml +4 -0
  122. data/comfypress.gemspec +28 -0
  123. data/config/application.rb +69 -0
  124. data/config/boot.rb +6 -0
  125. data/config/database.sqlite.yml +47 -0
  126. data/config/database.yml +47 -0
  127. data/config/environment.rb +5 -0
  128. data/config/environments/development.rb +39 -0
  129. data/config/environments/production.rb +67 -0
  130. data/config/environments/test.rb +39 -0
  131. data/config/initializers/comfypress.rb +100 -0
  132. data/config/initializers/paperclip.rb +3 -0
  133. data/config/locales/de.yml +236 -0
  134. data/config/locales/en.yml +285 -0
  135. data/config/locales/es.yml +236 -0
  136. data/config/locales/fr.yml +236 -0
  137. data/config/locales/ja.yml +237 -0
  138. data/config/locales/pl.yml +236 -0
  139. data/config/locales/pt-BR.yml +236 -0
  140. data/config/locales/ru.yml +236 -0
  141. data/config/locales/sv.yml +236 -0
  142. data/config/locales/zh-CN.yml +236 -0
  143. data/config/routes.rb +10 -0
  144. data/config.ru +4 -0
  145. data/db/cms_fixtures/sample-site/layouts/default/_default.yml +1 -0
  146. data/db/cms_fixtures/sample-site/layouts/default/content.html +5 -0
  147. data/db/cms_fixtures/sample-site/layouts/default/css.css +1 -0
  148. data/db/cms_fixtures/sample-site/layouts/default/js.js +1 -0
  149. data/db/cms_fixtures/sample-site/layouts/default/nested/_nested.yml +2 -0
  150. data/db/cms_fixtures/sample-site/layouts/default/nested/content.html +2 -0
  151. data/db/cms_fixtures/sample-site/layouts/default/nested/css.css +1 -0
  152. data/db/cms_fixtures/sample-site/layouts/default/nested/js.js +1 -0
  153. data/db/cms_fixtures/sample-site/pages/index/_index.yml +2 -0
  154. data/db/cms_fixtures/sample-site/pages/index/child/_child.yml +3 -0
  155. data/db/cms_fixtures/sample-site/pages/index/child/left.html +1 -0
  156. data/db/cms_fixtures/sample-site/pages/index/child/right.html +1 -0
  157. data/db/cms_fixtures/sample-site/pages/index/content.html +2 -0
  158. data/db/cms_fixtures/sample-site/snippets/default/_default.yml +1 -0
  159. data/db/cms_fixtures/sample-site/snippets/default/content.html +1 -0
  160. data/db/migrate/01_create_cms.rb +163 -0
  161. data/db/seeds.rb +9 -0
  162. data/db/upgrade_migrations/02_upgrade_to_1_1_0.rb +19 -0
  163. data/db/upgrade_migrations/03_upgrade_to_1_2_0.rb +15 -0
  164. data/db/upgrade_migrations/04_upgrade_to_1_3_0.rb +23 -0
  165. data/db/upgrade_migrations/05_upgrade_to_1_4_0.rb +33 -0
  166. data/db/upgrade_migrations/06_upgrade_to_1_5_0.rb +21 -0
  167. data/db/upgrade_migrations/07_upgrade_to_1_6_0.rb +25 -0
  168. data/doc/preview.png +0 -0
  169. data/doc/sofa.png +0 -0
  170. data/lib/comfypress/authentication/dummy_auth.rb +8 -0
  171. data/lib/comfypress/authentication/http_auth.rb +18 -0
  172. data/lib/comfypress/configuration.rb +99 -0
  173. data/lib/comfypress/engine.rb +18 -0
  174. data/lib/comfypress/error.rb +24 -0
  175. data/lib/comfypress/extensions/acts_as_tree.rb +102 -0
  176. data/lib/comfypress/extensions/has_revisions.rb +64 -0
  177. data/lib/comfypress/extensions/is_categorized.rb +49 -0
  178. data/lib/comfypress/extensions/is_mirrored.rb +85 -0
  179. data/lib/comfypress/extensions/rails.rb +24 -0
  180. data/lib/comfypress/fixtures.rb +289 -0
  181. data/lib/comfypress/form_builder.rb +97 -0
  182. data/lib/comfypress/render_methods.rb +85 -0
  183. data/lib/comfypress/routing.rb +62 -0
  184. data/lib/comfypress/sitemap.rb +27 -0
  185. data/lib/comfypress/tag.rb +154 -0
  186. data/lib/comfypress/tags/asset.rb +25 -0
  187. data/lib/comfypress/tags/collection.rb +64 -0
  188. data/lib/comfypress/tags/field_datetime.rb +17 -0
  189. data/lib/comfypress/tags/field_integer.rb +17 -0
  190. data/lib/comfypress/tags/field_rich_text.rb +17 -0
  191. data/lib/comfypress/tags/field_string.rb +17 -0
  192. data/lib/comfypress/tags/field_text.rb +17 -0
  193. data/lib/comfypress/tags/file.rb +29 -0
  194. data/lib/comfypress/tags/helper.rb +24 -0
  195. data/lib/comfypress/tags/menu.rb +27 -0
  196. data/lib/comfypress/tags/page_datetime.rb +13 -0
  197. data/lib/comfypress/tags/page_file.rb +51 -0
  198. data/lib/comfypress/tags/page_files.rb +52 -0
  199. data/lib/comfypress/tags/page_integer.rb +13 -0
  200. data/lib/comfypress/tags/page_markdown.rb +22 -0
  201. data/lib/comfypress/tags/page_rich_text.rb +13 -0
  202. data/lib/comfypress/tags/page_string.rb +13 -0
  203. data/lib/comfypress/tags/page_text.rb +13 -0
  204. data/lib/comfypress/tags/partial.rb +23 -0
  205. data/lib/comfypress/tags/snippet.rb +19 -0
  206. data/lib/comfypress/version.rb +3 -0
  207. data/lib/comfypress/view_hooks.rb +32 -0
  208. data/lib/comfypress/view_methods.rb +52 -0
  209. data/lib/comfypress.rb +66 -0
  210. data/lib/generators/comfy/cms/README +10 -0
  211. data/lib/generators/comfy/cms/cms_generator.rb +57 -0
  212. data/lib/tasks/comfypress.rake +45 -0
  213. data/script/rails +6 -0
  214. data/test/fixtures/cms/blocks.yml +12 -0
  215. data/test/fixtures/cms/categories.yml +4 -0
  216. data/test/fixtures/cms/categorizations.yml +3 -0
  217. data/test/fixtures/cms/files.yml +9 -0
  218. data/test/fixtures/cms/layouts.yml +40 -0
  219. data/test/fixtures/cms/menu_items.yml +15 -0
  220. data/test/fixtures/cms/menus.yml +9 -0
  221. data/test/fixtures/cms/pages.yml +39 -0
  222. data/test/fixtures/cms/revisions.yml +21 -0
  223. data/test/fixtures/cms/sites.yml +6 -0
  224. data/test/fixtures/cms/snippets.yml +6 -0
  225. data/test/fixtures/files/data.zip +0 -0
  226. data/test/fixtures/files/document.pdf +0 -0
  227. data/test/fixtures/files/image.gif +0 -0
  228. data/test/fixtures/files/image.jpg +0 -0
  229. data/test/fixtures/views/_nav_hook.html.erb +1 -0
  230. data/test/fixtures/views/_nav_hook_2.html.erb +1 -0
  231. data/test/fixtures/views/render_test/_test.html.erb +1 -0
  232. data/test/fixtures/views/render_test/new.html.erb +1 -0
  233. data/test/fixtures/views/render_test/render_layout.html.erb +1 -0
  234. data/test/functional/cms_admin/base_controller_test.rb +18 -0
  235. data/test/functional/cms_admin/categories_controller_test.rb +70 -0
  236. data/test/functional/cms_admin/files_controller_test.rb +216 -0
  237. data/test/functional/cms_admin/layouts_controller_test.rb +123 -0
  238. data/test/functional/cms_admin/pages_controller_test.rb +450 -0
  239. data/test/functional/cms_admin/revisions_controller_test.rb +138 -0
  240. data/test/functional/cms_admin/sites_controller_test.rb +105 -0
  241. data/test/functional/cms_admin/snippets_controller_test.rb +140 -0
  242. data/test/functional/cms_content_controller_test.rb +205 -0
  243. data/test/gemfiles/Gemfile.rails.3.1 +16 -0
  244. data/test/gemfiles/Gemfile.rails.3.2 +16 -0
  245. data/test/gemfiles/Gemfile.rails.4.0 +16 -0
  246. data/test/integration/authentication_test.rb +48 -0
  247. data/test/integration/fixtures_test.rb +61 -0
  248. data/test/integration/mirrors_test.rb +72 -0
  249. data/test/integration/render_cms_test.rb +233 -0
  250. data/test/integration/sites_test.rb +120 -0
  251. data/test/integration/view_hooks_test.rb +43 -0
  252. data/test/test_helper.rb +124 -0
  253. data/test/unit/cms/menu_item_test.rb +7 -0
  254. data/test/unit/cms/menu_test.rb +7 -0
  255. data/test/unit/configuration_test.rb +42 -0
  256. data/test/unit/fixtures_test.rb +357 -0
  257. data/test/unit/mirrors_test.rb +242 -0
  258. data/test/unit/models/block_test.rb +199 -0
  259. data/test/unit/models/categorization_test.rb +76 -0
  260. data/test/unit/models/category_test.rb +39 -0
  261. data/test/unit/models/file_test.rb +89 -0
  262. data/test/unit/models/layout_test.rb +125 -0
  263. data/test/unit/models/page_test.rb +255 -0
  264. data/test/unit/models/site_test.rb +152 -0
  265. data/test/unit/models/snippet_test.rb +49 -0
  266. data/test/unit/revisions_test.rb +185 -0
  267. data/test/unit/sitemap_test.rb +20 -0
  268. data/test/unit/tag_test.rb +308 -0
  269. data/test/unit/tags/asset_test.rb +56 -0
  270. data/test/unit/tags/collection_test.rb +116 -0
  271. data/test/unit/tags/field_datetime_test.rb +50 -0
  272. data/test/unit/tags/field_integer_test.rb +49 -0
  273. data/test/unit/tags/field_rich_text_test.rb +49 -0
  274. data/test/unit/tags/field_string_test.rb +52 -0
  275. data/test/unit/tags/field_text_test.rb +48 -0
  276. data/test/unit/tags/file_test.rb +67 -0
  277. data/test/unit/tags/helper_test.rb +86 -0
  278. data/test/unit/tags/page_datetime_test.rb +50 -0
  279. data/test/unit/tags/page_file_test.rb +119 -0
  280. data/test/unit/tags/page_files_test.rb +113 -0
  281. data/test/unit/tags/page_integer_test.rb +49 -0
  282. data/test/unit/tags/page_markdown_test.rb +48 -0
  283. data/test/unit/tags/page_rich_text_test.rb +49 -0
  284. data/test/unit/tags/page_string_test.rb +49 -0
  285. data/test/unit/tags/page_text_test.rb +52 -0
  286. data/test/unit/tags/partial_test.rb +76 -0
  287. data/test/unit/tags/snippet_test.rb +45 -0
  288. data/test/unit/view_methods_test.rb +80 -0
  289. metadata +457 -0
@@ -0,0 +1,140 @@
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, :site_id => cms_sites(:default)
7
+ assert_response :success
8
+ assert assigns(:snippets)
9
+ assert_template :index
10
+ end
11
+
12
+ def test_get_index_with_no_snippets
13
+ Cms::Snippet.delete_all
14
+ get :index, :site_id => cms_sites(:default)
15
+ assert_response :redirect
16
+ assert_redirected_to :action => :new
17
+ end
18
+
19
+ def test_get_index_with_category
20
+ category = cms_sites(:default).categories.create!(:label => 'Test Category', :categorized_type => 'Cms::Snippet')
21
+ category.categorizations.create!(:categorized => cms_snippets(:default))
22
+
23
+ get :index, :site_id => cms_sites(:default), :category => category.label
24
+ assert_response :success
25
+ assert assigns(:snippets)
26
+ assert_equal 1, assigns(:snippets).count
27
+ assert assigns(:snippets).first.categories.member? category
28
+ end
29
+
30
+ def test_get_index_with_category_invalid
31
+ get :index, :site_id => cms_sites(:default), :category => 'invalid'
32
+ assert_response :success
33
+ assert assigns(:snippets)
34
+ assert_equal 0, assigns(:snippets).count
35
+ end
36
+
37
+ def test_get_new
38
+ site = cms_sites(:default)
39
+ get :new, :site_id => site
40
+ assert_response :success
41
+ assert assigns(:snippet)
42
+ assert_template :new
43
+ assert_select "form[action=/cms-admin/sites/#{site.id}/snippets]"
44
+ assert_select "form[action='/cms-admin/sites/#{site.id}/files?ajax=true']"
45
+ end
46
+
47
+ def test_get_edit
48
+ snippet = cms_snippets(:default)
49
+ get :edit, :site_id => snippet.site, :id => snippet
50
+ assert_response :success
51
+ assert assigns(:snippet)
52
+ assert_template :edit
53
+ assert_select "form[action=/cms-admin/sites/#{snippet.site.id}/snippets/#{snippet.id}]"
54
+ end
55
+
56
+ def test_get_edit_failure
57
+ get :edit, :site_id => cms_sites(:default), :id => 'not_found'
58
+ assert_response :redirect
59
+ assert_redirected_to :action => :index
60
+ assert_equal 'Snippet not found', flash[:error]
61
+ end
62
+
63
+ def test_create
64
+ assert_difference 'Cms::Snippet.count' do
65
+ post :create, :site_id => cms_sites(:default), :snippet => {
66
+ :label => 'Test Snippet',
67
+ :identifier => 'test-snippet',
68
+ :content => 'Test Content'
69
+ }
70
+ assert_response :redirect
71
+ snippet = Cms::Snippet.last
72
+ assert_equal cms_sites(:default), snippet.site
73
+ assert_redirected_to :action => :edit, :id => snippet
74
+ assert_equal 'Snippet created', flash[:success]
75
+ end
76
+ end
77
+
78
+ def test_creation_failure
79
+ assert_no_difference 'Cms::Snippet.count' do
80
+ post :create, :site_id => cms_sites(:default), :snippet => { }
81
+ assert_response :success
82
+ assert_template :new
83
+ assert_equal 'Failed to create snippet', flash[:error]
84
+ end
85
+ end
86
+
87
+ def test_update
88
+ snippet = cms_snippets(:default)
89
+ put :update, :site_id => snippet.site, :id => snippet, :snippet => {
90
+ :label => 'New-Snippet',
91
+ :content => 'New Content'
92
+ }
93
+ assert_response :redirect
94
+ assert_redirected_to :action => :edit, :site_id => snippet.site, :id => snippet
95
+ assert_equal 'Snippet updated', flash[:success]
96
+ snippet.reload
97
+ assert_equal 'New-Snippet', snippet.label
98
+ assert_equal 'New Content', snippet.content
99
+ end
100
+
101
+ def test_update_failure
102
+ snippet = cms_snippets(:default)
103
+ put :update, :site_id => snippet.site, :id => snippet, :snippet => {
104
+ :identifier => ''
105
+ }
106
+ assert_response :success
107
+ assert_template :edit
108
+ snippet.reload
109
+ assert_not_equal '', snippet.identifier
110
+ assert_equal 'Failed to update snippet', flash[:error]
111
+ end
112
+
113
+ def test_destroy
114
+ assert_difference 'Cms::Snippet.count', -1 do
115
+ delete :destroy, :site_id => cms_sites(:default), :id => cms_snippets(:default)
116
+ assert_response :redirect
117
+ assert_redirected_to :action => :index
118
+ assert_equal 'Snippet deleted', flash[:success]
119
+ end
120
+ end
121
+
122
+ def test_reorder
123
+ snippet_one = cms_snippets(:default)
124
+ snippet_two = cms_sites(:default).snippets.create!(
125
+ :label => 'test',
126
+ :identifier => 'test'
127
+ )
128
+ assert_equal 0, snippet_one.position
129
+ assert_equal 1, snippet_two.position
130
+
131
+ post :reorder, :site_id => cms_sites(:default), :cms_snippet => [snippet_two.id, snippet_one.id]
132
+ assert_response :success
133
+ snippet_one.reload
134
+ snippet_two.reload
135
+
136
+ assert_equal 1, snippet_one.position
137
+ assert_equal 0, snippet_two.position
138
+ end
139
+
140
+ end
@@ -0,0 +1,205 @@
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 cms_sites(:default), assigns(:cms_site)
8
+ assert_equal cms_layouts(:default), assigns(:cms_layout)
9
+ assert_equal cms_pages(:default), assigns(:cms_page)
10
+
11
+ assert_response :success
12
+ assert_equal rendered_content_formatter(
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
+ ), response.body
22
+ assert_equal 'text/html', response.content_type
23
+ end
24
+
25
+ def test_render_page_with_app_layout
26
+ cms_layouts(:default).update_column(:app_layout, 'cms_admin')
27
+ get :render_html, :cms_path => ''
28
+ assert_response :success
29
+ assert assigns(:cms_page)
30
+ assert_select "body[class='c-cms-content a-render-html']"
31
+ end
32
+
33
+ def test_render_page_with_xhr
34
+ cms_layouts(:default).update_column(:app_layout, 'cms_admin')
35
+ xhr :get, :render_html, :cms_path => ''
36
+ assert_response :success
37
+ assert assigns(:cms_page)
38
+ assert_no_select "body[class='c_cms_content a_render_html']"
39
+ end
40
+
41
+ def test_render_page_not_found
42
+ assert_exception_raised ActionController::RoutingError, 'Page Not Found' do
43
+ get :render_html, :cms_path => 'doesnotexist'
44
+ end
45
+ end
46
+
47
+ def test_render_page_not_found_with_custom_404
48
+ page = cms_sites(:default).pages.create!(
49
+ :label => '404',
50
+ :slug => '404',
51
+ :parent_id => cms_pages(:default).id,
52
+ :layout_id => cms_layouts(:default).id,
53
+ :is_published => '1',
54
+ :blocks_attributes => [
55
+ { :identifier => 'default_page_text',
56
+ :content => 'custom 404 page content' }
57
+ ]
58
+ )
59
+ assert_equal '/404', page.full_path
60
+ assert page.is_published?
61
+ get :render_html, :cms_path => 'doesnotexist'
62
+ assert_response 404
63
+ assert assigns(:cms_page)
64
+ assert_match /custom 404 page content/, response.body
65
+ end
66
+
67
+ def test_render_page_with_no_site
68
+ Cms::Site.destroy_all
69
+
70
+ assert_exception_raised ActionController::RoutingError, 'Site Not Found' do
71
+ get :render_html, :cms_path => ''
72
+ end
73
+ end
74
+
75
+ def test_render_page_with_no_layout
76
+ Cms::Layout.destroy_all
77
+
78
+ get :render_html, :cms_path => ''
79
+ assert_response 404
80
+ assert_equal 'Layout Not Found', response.body
81
+ end
82
+
83
+ def test_render_page_with_redirect
84
+ cms_pages(:child).update_column(:target_page_id, cms_pages(:default).id)
85
+ assert_equal cms_pages(:default), cms_pages(:child).target_page
86
+ get :render_html, :cms_path => 'child-page'
87
+ assert_response :redirect
88
+ assert_redirected_to '/'
89
+ end
90
+
91
+ def test_render_page_unpublished
92
+ page = cms_pages(:default)
93
+ page.update_column(:is_published, false)
94
+
95
+ assert_exception_raised ActionController::RoutingError, 'Page Not Found' do
96
+ get :render_html, :cms_path => ''
97
+ end
98
+ end
99
+
100
+ def test_render_page_with_irb_disabled
101
+ assert_equal false, ComfyPress.config.allow_irb
102
+
103
+ irb_page = cms_sites(:default).pages.create!(
104
+ :label => 'irb',
105
+ :slug => 'irb',
106
+ :parent_id => cms_pages(:default).id,
107
+ :layout_id => cms_layouts(:default).id,
108
+ :is_published => '1',
109
+ :blocks_attributes => [
110
+ { :identifier => 'default_page_text',
111
+ :content => 'text <%= 2 + 2 %> text' }
112
+ ]
113
+ )
114
+ get :render_html, :cms_path => 'irb'
115
+ assert_response :success
116
+ assert_match "text &lt;%= 2 + 2 %&gt; text", response.body
117
+ end
118
+
119
+ def test_render_page_with_irb_enabled
120
+ ComfyPress.config.allow_irb = true
121
+
122
+ irb_page = cms_sites(:default).pages.create!(
123
+ :label => 'irb',
124
+ :slug => 'irb',
125
+ :parent_id => cms_pages(:default).id,
126
+ :layout_id => cms_layouts(:default).id,
127
+ :is_published => '1',
128
+ :blocks_attributes => [
129
+ { :identifier => 'default_page_text',
130
+ :content => 'text <%= 2 + 2 %> text' }
131
+ ]
132
+ )
133
+ get :render_html, :cms_path => 'irb'
134
+ assert_response :success
135
+ assert_match "text 4 text", response.body
136
+ end
137
+
138
+ def test_render_css
139
+ get :render_css, :site_id => cms_sites(:default).id, :identifier => cms_layouts(:default).identifier
140
+ assert_response :success
141
+ assert_match 'text/css', response.content_type
142
+ assert_equal cms_layouts(:default).css, response.body
143
+ end
144
+
145
+ def test_render_css_not_found
146
+ get :render_css, :site_id => cms_sites(:default).id, :identifier => 'bogus'
147
+ assert_response 404
148
+ end
149
+
150
+ def test_render_js
151
+ get :render_js, :site_id => cms_sites(:default).id, :identifier => cms_layouts(:default).identifier
152
+ assert_response :success
153
+ assert_equal 'text/javascript', response.content_type
154
+ assert_equal cms_layouts(:default).js, response.body
155
+ end
156
+
157
+ def test_render_js_not_found
158
+ get :render_js, :site_id => cms_sites(:default).id, :identifier => 'bogus'
159
+ assert_response 404
160
+ end
161
+
162
+ def test_render_sitemap
163
+ get :render_sitemap, :format => :xml
164
+ assert_response :success
165
+ assert_match '<loc>http://test.host/child-page</loc>', response.body
166
+ end
167
+
168
+ def test_render_sitemap_with_path
169
+ site = cms_sites(:default)
170
+ site.update_column(:path, 'en')
171
+
172
+ get :render_sitemap, :cms_path => site.path, :format => :xml
173
+ assert_response :success
174
+ assert_equal cms_sites(:default), assigns(:cms_site)
175
+ assert_match '<loc>http://test.host/en/child-page</loc>', response.body
176
+ end
177
+
178
+ def test_render_sitemap_with_path_invalid_with_single_site
179
+ site = cms_sites(:default)
180
+ site.update_column(:path, 'en')
181
+
182
+ get :render_sitemap, :cms_path => 'fr', :format => :xml
183
+ assert_response :success
184
+ assert_equal cms_sites(:default), assigns(:cms_site)
185
+ assert_match '<loc>http://test.host/en/child-page</loc>', response.body
186
+ end
187
+
188
+ class TestRenderException
189
+ def self.callback(cms_site, view, xml)
190
+ xml.url do
191
+ # make sure we have the view
192
+ xml.loc view.url_for("http://test.host/test_render")
193
+ xml.lastmod 2.days.ago.strftime('%Y-%m-%d')
194
+ end
195
+ end
196
+ end
197
+
198
+ def test_rendering_sitemap_with_extensions
199
+ ComfyPress::Sitemap.register_extension(TestRenderException.method(:callback))
200
+ get :render_sitemap, :format => :xml
201
+ assert_response :success
202
+ assert_match '<loc>http://test.host/test_render</loc>', response.body
203
+ end
204
+
205
+ end
@@ -0,0 +1,16 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'rails', '~> 3.1.0'
4
+ gem 'formatted_form', '>= 2.1.0'
5
+ gem 'active_link_to', '>= 1.0.0'
6
+ gem 'paperclip', '>= 3.4.0'
7
+ gem 'redcarpet', '>= 2.2.0'
8
+ gem 'jquery-rails', '>= 2.2.0'
9
+ gem 'haml-rails', '>= 0.3.0'
10
+ gem 'sass-rails', '>= 3.1.0'
11
+ gem 'coffee-rails', '>= 3.1.0'
12
+
13
+ group :test do
14
+ gem 'sqlite3'
15
+ gem 'coveralls', :require => false
16
+ end
@@ -0,0 +1,16 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'rails', '~> 3.2.0'
4
+ gem 'formatted_form', '>= 2.1.0'
5
+ gem 'active_link_to', '>= 1.0.0'
6
+ gem 'paperclip', '>= 3.4.0'
7
+ gem 'redcarpet', '>= 2.2.0'
8
+ gem 'jquery-rails', '>= 2.2.0'
9
+ gem 'haml-rails', '>= 0.3.0'
10
+ gem 'sass-rails', '>= 3.1.0'
11
+ gem 'coffee-rails', '>= 3.1.0'
12
+
13
+ group :test do
14
+ gem 'sqlite3'
15
+ gem 'coveralls', :require => false
16
+ end
@@ -0,0 +1,16 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'rails', '~> 4.0.0.beta1'
4
+ gem 'formatted_form', '>= 2.1.0'
5
+ gem 'active_link_to', '>= 1.0.0'
6
+ gem 'paperclip', '>= 3.4.0'
7
+ gem 'redcarpet', '>= 2.2.0'
8
+ gem 'jquery-rails', '>= 2.2.0'
9
+ gem 'haml-rails', '>= 0.3.0'
10
+ gem 'sass-rails', '~> 4.0.0.beta1'
11
+ gem 'coffee-rails', '~> 4.0.0.beta1'
12
+
13
+ group :test do
14
+ gem 'sqlite3'
15
+ gem 'coveralls', :require => false
16
+ end
@@ -0,0 +1,48 @@
1
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
2
+
3
+ class AuthenticationTest < ActionDispatch::IntegrationTest
4
+
5
+ module TestLockPublicAuth
6
+ def authenticate
7
+ return redirect_to('/lockout')
8
+ end
9
+ end
10
+
11
+ module TestUnlockPublicAuth
12
+ def authenticate
13
+ true
14
+ end
15
+ end
16
+
17
+ def test_get_with_unauthorized_access
18
+ assert_equal 'ComfyPress::HttpAuth', ComfyPress.config.admin_auth
19
+ get '/cms-admin/sites'
20
+ assert_response :unauthorized
21
+ get '/'
22
+ assert_response :success
23
+ end
24
+
25
+ def test_get_with_authorized_access
26
+ http_auth :get, '/cms-admin/sites'
27
+ assert_response :success
28
+ end
29
+
30
+ def test_get_with_changed_default_config
31
+ assert_equal 'ComfyPress::HttpAuth', ComfyPress.config.admin_auth
32
+ ComfyPress::HttpAuth.username = 'newuser'
33
+ ComfyPress::HttpAuth.password = 'newpass'
34
+ http_auth :get, '/cms-admin/sites'
35
+ assert_response :unauthorized
36
+ http_auth :get, '/cms-admin/sites', {}, 'newuser', 'newpass'
37
+ assert_response :success
38
+ end
39
+
40
+ def test_get_public_with_custom_auth
41
+ CmsContentController.send :include, TestLockPublicAuth
42
+ get '/'
43
+ assert_response :redirect
44
+ assert_redirected_to '/lockout'
45
+ # reset auth module
46
+ CmsContentController.send :include, TestUnlockPublicAuth
47
+ end
48
+ end
@@ -0,0 +1,61 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
4
+
5
+ class FixturesTest < ActionDispatch::IntegrationTest
6
+
7
+ def setup
8
+ cms_sites(:default).update_column(:identifier, 'sample-site')
9
+ end
10
+
11
+ def test_fixtures_disabled
12
+ assert_no_difference ['Cms::Layout.count', 'Cms::Page.count', 'Cms::Snippet.count'] do
13
+ get '/'
14
+ assert_response :success
15
+
16
+ assert_equal 'Default Page', Cms::Page.root.label
17
+ assert_equal 'Default Layout', Cms::Layout.find_by_identifier('default').label
18
+ assert_equal 'Default Snippet', Cms::Snippet.find_by_identifier('default').label
19
+ end
20
+ end
21
+
22
+ def test_fixtures_enabled
23
+ ComfyPress.config.enable_fixtures = true
24
+ Cms::Layout.destroy_all
25
+ Cms::Page.destroy_all
26
+ Cms::Snippet.destroy_all
27
+
28
+ assert_difference 'Cms::Page.count', 2 do
29
+ assert_difference 'Cms::Layout.count', 2 do
30
+ assert_difference 'Cms::Snippet.count', 1 do
31
+ get '/'
32
+ assert_response :success
33
+
34
+ assert_equal 'Home Fixture Page', Cms::Page.root.label
35
+ assert_equal 'Default Fixture Layout', Cms::Layout.find_by_identifier('default').label
36
+ assert_equal 'Default Fixture Snippet', Cms::Snippet.find_by_identifier('default').label
37
+
38
+ assert_equal "<html>\n <body>\n Home Page Fixture Contént\nFixture Content for Default Snippet\n </body>\n</html>", response.body
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ def test_fixtures_enabled_in_admin
45
+ ComfyPress.config.enable_fixtures = true
46
+ Cms::Layout.destroy_all
47
+ Cms::Page.destroy_all
48
+ Cms::Snippet.destroy_all
49
+
50
+ assert_difference 'Cms::Page.count', 2 do
51
+ assert_difference 'Cms::Layout.count', 2 do
52
+ assert_difference 'Cms::Snippet.count', 1 do
53
+ http_auth :get, "/cms-admin/sites/#{cms_sites(:default).id}/pages"
54
+ assert_response :success
55
+ assert_equal 'CMS Fixtures are enabled. All changes done here will be discarded.', flash[:error]
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ end
@@ -0,0 +1,72 @@
1
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
2
+
3
+ class MirrorsTest < ActionDispatch::IntegrationTest
4
+
5
+ def setup
6
+ @site_a = cms_sites(:default)
7
+ @site_a.update_column(:is_mirrored, true)
8
+ @site_b = Cms::Site.create!(:identifier => 'test_b', :hostname => 'test-b.host', :is_mirrored => true)
9
+ # making mirrors
10
+ Cms::Layout.all.each{ |l| l.save! }
11
+ Cms::Page.all.each{ |p| p.save! }
12
+ Cms::Snippet.all.each { |s| s.save! }
13
+ end
14
+
15
+ def test_get_layouts
16
+ http_auth :get, cms_admin_site_layouts_path(@site_a)
17
+ assert_response :success
18
+ assert_select 'select#mirror' do
19
+ assert_select "option[value='/cms-admin/sites/#{@site_b.id}/layouts']"
20
+ end
21
+ end
22
+
23
+ def test_get_layouts_edit
24
+ layout = cms_layouts(:default)
25
+ assert mirror = layout.mirrors.first
26
+
27
+ http_auth :get, edit_cms_admin_site_layout_path(@site_a, layout)
28
+ assert_response :success
29
+ assert_select 'select#mirror' do
30
+ assert_select "option[value='/cms-admin/sites/#{@site_b.id}/layouts/#{mirror.id}/edit']"
31
+ end
32
+ end
33
+
34
+ def test_get_pages
35
+ http_auth :get, cms_admin_site_pages_path(@site_a)
36
+ assert_response :success
37
+ assert_select 'select#mirror' do
38
+ assert_select "option[value='/cms-admin/sites/#{@site_b.id}/pages']"
39
+ end
40
+ end
41
+
42
+ def test_get_pages_edit
43
+ page = cms_pages(:default)
44
+ assert mirror = page.mirrors.first
45
+
46
+ http_auth :get, edit_cms_admin_site_page_path(@site_a, page)
47
+ assert_response :success
48
+ assert_select 'select#mirror' do
49
+ assert_select "option[value='/cms-admin/sites/#{@site_b.id}/pages/#{mirror.id}/edit']"
50
+ end
51
+ end
52
+
53
+ def test_get_snippets
54
+ http_auth :get, cms_admin_site_snippets_path(@site_a)
55
+ assert_response :success
56
+ assert_select 'select#mirror' do
57
+ assert_select "option[value='/cms-admin/sites/#{@site_b.id}/snippets']"
58
+ end
59
+ end
60
+
61
+ def test_get_snippets_edit
62
+ snippet = cms_snippets(:default)
63
+ assert mirror = snippet.mirrors.first
64
+
65
+ http_auth :get, edit_cms_admin_site_snippet_path(@site_a, snippet)
66
+ assert_response :success
67
+ assert_select 'select#mirror' do
68
+ assert_select "option[value='/cms-admin/sites/#{@site_b.id}/snippets/#{mirror.id}/edit']"
69
+ end
70
+ end
71
+
72
+ end