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,233 @@
1
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
2
+
3
+ class RenderCmsTest < ActionDispatch::IntegrationTest
4
+
5
+ def setup
6
+ super
7
+ Rails.application.routes.draw do
8
+ get '/render-basic' => 'render_test#render_basic'
9
+ get '/render-page' => 'render_test#render_page'
10
+ get '/render-layout' => 'render_test#render_layout'
11
+ end
12
+ cms_layouts(:default).update_column(:content, '{{cms:page:content}}')
13
+ cms_pages(:child).update_attributes(:blocks_attributes => [
14
+ { :identifier => 'content', :content => 'TestBlockContent' }
15
+ ])
16
+ end
17
+
18
+ def teardown
19
+ Rails.application.reload_routes!
20
+ end
21
+
22
+ def create_site_b
23
+ site = Cms::Site.create!(
24
+ :identifier => 'site-b',
25
+ :hostname => 'site-b.test')
26
+ layout = site.layouts.create!(
27
+ :identifier => 'default',
28
+ :content => 'site-b {{cms:page:content}}')
29
+ page = site.pages.create!(
30
+ :label => 'default',
31
+ :layout => layout,
32
+ :blocks_attributes => [{ :identifier => 'content', :content => 'SiteBContent' }])
33
+ end
34
+
35
+ class ::RenderTestController < ApplicationController
36
+ append_view_path(File.expand_path('../fixtures/views', File.dirname(__FILE__)))
37
+
38
+ def render_basic
39
+ case params[:type]
40
+ when 'text'
41
+ render :text => 'TestText'
42
+ when 'update'
43
+ render :update do |page|
44
+ page.alert('rendered text')
45
+ end
46
+ else
47
+ render
48
+ end
49
+ end
50
+
51
+ def render_page
52
+ case params[:type]
53
+ when 'page_implicit'
54
+ render
55
+ when 'page_explicit'
56
+ render :cms_page => '/test-page'
57
+ when 'page_explicit_with_status'
58
+ render :cms_page => '/test-page', :status => 404
59
+ when 'page_explicit_with_site'
60
+ render :cms_page => '/', :cms_site => 'site-b'
61
+ else
62
+ raise 'Invalid or no param[:type] provided'
63
+ end
64
+ end
65
+
66
+ def render_layout
67
+ @test_value = 'TestValue'
68
+ case params[:type]
69
+ when 'layout_defaults'
70
+ render :cms_layout => 'default'
71
+ when 'layout'
72
+ render :cms_layout => 'default', :cms_blocks => {
73
+ :content => 'TestText',
74
+ :content_b => { :partial => 'render_test/test' },
75
+ :content_c => { :template => 'render_test/render_layout' }
76
+ }
77
+ when 'layout_with_status'
78
+ render :cms_layout => 'default', :status => 404
79
+ when 'layout_invalid'
80
+ render :cms_layout => 'invalid'
81
+ when 'layout_defaults_with_site'
82
+ render :cms_layout => 'default', :cms_site => 'site-b'
83
+ when 'layout_with_action'
84
+ render :cms_layout => 'default', :action => :new
85
+ else
86
+ raise 'Invalid or no param[:type] provided'
87
+ end
88
+ end
89
+
90
+ def new
91
+ end
92
+ end
93
+
94
+ # -- Basic Render Tests ---------------------------------------------------
95
+ def test_text
96
+ get '/render-basic?type=text'
97
+ assert_response :success
98
+ assert_equal 'TestText', response.body
99
+ end
100
+
101
+ def test_update
102
+ return 'Not supported in >= 3.1' if Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR >= 1
103
+ get '/render-basic?type=update'
104
+ assert_response :success
105
+ end
106
+
107
+ def test_implicit_cms_page_failure
108
+ assert_exception_raised ActionView::MissingTemplate do
109
+ get '/render-basic'
110
+ end
111
+ end
112
+
113
+ # -- Page Render Test -----------------------------------------------------
114
+ def test_implicit_cms_page
115
+ page = cms_pages(:child)
116
+ page.update_attributes(:slug => 'render-basic')
117
+ get '/render-basic?type=page_implicit'
118
+ assert_response :success
119
+ assert assigns(:cms_site)
120
+ assert assigns(:cms_layout)
121
+ assert assigns(:cms_page)
122
+ assert_equal page, assigns(:cms_page)
123
+ assert_equal 'TestBlockContent', response.body
124
+ end
125
+
126
+ def test_explicit_cms_page
127
+ page = cms_pages(:child)
128
+ page.update_attributes(slug: 'test-page')
129
+ get '/render-page?type=page_explicit'
130
+ assert_response :success
131
+ assert assigns(:cms_site)
132
+ assert assigns(:cms_layout)
133
+ assert assigns(:cms_page)
134
+ assert_equal page, assigns(:cms_page)
135
+ assert_equal 'TestBlockContent', response.body
136
+ end
137
+
138
+ def test_explicit_cms_page_with_status
139
+ page = cms_pages(:child)
140
+ page.update_attributes(:slug => 'test-page')
141
+ get '/render-page?type=page_explicit_with_status'
142
+ assert_response 404
143
+ assert assigns(:cms_site)
144
+ assert assigns(:cms_layout)
145
+ assert assigns(:cms_page)
146
+ assert_equal page, assigns(:cms_page)
147
+ assert_equal 'TestBlockContent', response.body
148
+ end
149
+
150
+ def test_explicit_cms_page_failure
151
+ page = cms_pages(:child)
152
+ page.update_attributes(:slug => 'invalid')
153
+ assert_exception_raised ComfyPress::MissingPage do
154
+ get '/render-page?type=page_explicit'
155
+ end
156
+ end
157
+
158
+ def test_explicit_with_site
159
+ create_site_b
160
+ get '/render-page?type=page_explicit_with_site'
161
+ assert_response :success
162
+ assert assigns(:cms_site)
163
+ assert_equal 'site-b', assigns(:cms_site).identifier
164
+ assert_equal 'site-b SiteBContent', response.body
165
+ end
166
+
167
+ def test_explicit_with_site_failure
168
+ assert_exception_raised ComfyPress::MissingSite do
169
+ get '/render-page?type=page_explicit_with_site'
170
+ end
171
+ end
172
+
173
+ # -- Layout Render Tests --------------------------------------------------
174
+ def test_cms_layout_defaults
175
+ get '/render-layout?type=layout_defaults'
176
+ assert_response :success
177
+ assert_equal 'TestTemplate TestValue', response.body
178
+ assert assigns(:cms_site)
179
+ assert assigns(:cms_layout)
180
+ assert_equal cms_layouts(:default), assigns(:cms_layout)
181
+ end
182
+
183
+ def test_cms_layout
184
+ cms_layouts(:default).update_column(:content, '{{cms:page:content}} {{cms:page:content_b}} {{cms:page:content_c}}')
185
+ get '/render-layout?type=layout'
186
+ assert_response :success
187
+ assert_equal 'TestText TestPartial TestValue TestTemplate TestValue', response.body
188
+ assert assigns(:cms_site)
189
+ assert assigns(:cms_layout)
190
+ assert_equal cms_layouts(:default), assigns(:cms_layout)
191
+ end
192
+
193
+ def test_cms_layout_with_status
194
+ get '/render-layout?type=layout_with_status'
195
+ assert_response 404
196
+ assert_equal 'TestTemplate TestValue', response.body
197
+ assert assigns(:cms_site)
198
+ assert assigns(:cms_layout)
199
+ assert_equal cms_layouts(:default), assigns(:cms_layout)
200
+ end
201
+
202
+ def test_cms_layout_with_action
203
+ cms_layouts(:default).update_column(:content, '{{cms:page:content}} {{cms:page:content_b}} {{cms:page:content_c}}')
204
+ get '/render-layout?type=layout_with_action'
205
+ assert_response :success
206
+ assert_equal "Can render CMS layout and specify action\n ", response.body
207
+ assert assigns(:cms_site)
208
+ assert assigns(:cms_layout)
209
+ assert_equal cms_layouts(:default), assigns(:cms_layout)
210
+ end
211
+
212
+ def test_cms_layout_failure
213
+ assert_exception_raised ComfyPress::MissingLayout do
214
+ get '/render-layout?type=layout_invalid'
215
+ end
216
+ end
217
+
218
+ def test_cms_layout_defaults_with_site
219
+ create_site_b
220
+ get '/render-layout?type=layout_defaults_with_site'
221
+ assert_response :success
222
+ assert assigns(:cms_site)
223
+ assert_equal 'site-b', assigns(:cms_site).identifier
224
+ assert_equal 'site-b TestTemplate TestValue', response.body
225
+ end
226
+
227
+ def test_cms_layout_defaults_with_site_failure
228
+ assert_exception_raised ComfyPress::MissingSite do
229
+ get '/render-layout?type=layout_defaults_with_site'
230
+ end
231
+ end
232
+
233
+ end
@@ -0,0 +1,120 @@
1
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
2
+
3
+ class SitesTest < ActionDispatch::IntegrationTest
4
+
5
+ def test_get_admin_with_single_site
6
+ http_auth :get, cms_admin_path
7
+ assert assigns(:site)
8
+ assert_equal cms_sites(:default), assigns(:site)
9
+ assert_response :redirect
10
+ assert_redirected_to cms_admin_site_pages_path(assigns(:site))
11
+ end
12
+
13
+ def test_get_admin_with_no_site
14
+ Cms::Site.delete_all
15
+ http_auth :get, cms_admin_path
16
+ assert_response :redirect
17
+ assert_redirected_to new_cms_admin_site_path
18
+ assert_equal 'Site not found', flash[:error]
19
+ end
20
+
21
+ def test_get_public_page_with_single_site
22
+ host! 'bogus.host'
23
+ get '/'
24
+ assert_response :success
25
+ assert assigns(:cms_site)
26
+ assert_equal 'test.host', assigns(:cms_site).hostname
27
+ end
28
+
29
+ def test_get_public_page_with_sites_with_different_paths
30
+ Cms::Site.delete_all
31
+ site_a = Cms::Site.create!(:identifier => 'site-a', :hostname => 'test.host', :path => '')
32
+ site_b = Cms::Site.create!(:identifier => 'site-b', :hostname => 'test.host', :path => 'path-b')
33
+ site_c = Cms::Site.create!(:identifier => 'site-c', :hostname => 'test.host', :path => 'path-c/child')
34
+
35
+ [site_a, site_b, site_c].each do |site|
36
+ layout = site.layouts.create!(:identifier => 'test')
37
+ site.pages.create!(:label => 'index', :layout => layout)
38
+ site.pages.create!(:label => '404', :slug => '404', :layout => layout)
39
+ end
40
+
41
+ %w(/ /path-a /path-a/child /path-c).each do |path|
42
+ get path
43
+ assert assigns(:cms_site), path
44
+ assert_equal site_a, assigns(:cms_site)
45
+ assert_equal path.gsub(/^\//, ''), @controller.params[:cms_path].to_s
46
+ end
47
+
48
+ %w(/path-b /path-b/child).each do |path|
49
+ get path
50
+ assert assigns(:cms_site), path
51
+ assert_equal site_b, assigns(:cms_site)
52
+ assert_equal path.gsub(/^\/path-b/, '').gsub(/^\//, ''), @controller.params[:cms_path].to_s
53
+ end
54
+
55
+ %w(/path-c/child /path-c/child/child).each do |path|
56
+ get path
57
+ assert assigns(:cms_site), path
58
+ assert_equal site_c, assigns(:cms_site)
59
+ assert_equal path.gsub(/^\/path-c\/child/, '').gsub(/^\//, ''), @controller.params[:cms_path].to_s
60
+ end
61
+ end
62
+
63
+ def test_get_public_page_with_host_with_port
64
+ Cms::Site.delete_all
65
+ site_a = Cms::Site.create!(:identifier => 'site-a', :hostname => 'test.host:3000')
66
+ site_b = Cms::Site.create!(:identifier => 'site-b', :hostname => 'test.host')
67
+
68
+ [site_a, site_b].each do |site|
69
+ layout = site.layouts.create!(:identifier => 'test')
70
+ site.pages.create!(:label => 'index', :layout => layout)
71
+ site.pages.create!(:label => '404', :slug => '404', :layout => layout)
72
+ end
73
+
74
+ get '/'
75
+ assert assigns(:cms_site)
76
+ assert_equal site_b, assigns(:cms_site)
77
+ end
78
+
79
+ def test_get_public_with_locale
80
+ get '/'
81
+ assert_response :success
82
+ assert assigns(:cms_site)
83
+ assert_equal :en, I18n.locale
84
+
85
+ cms_sites(:default).update_column(:locale, 'fr')
86
+ get '/'
87
+ assert_response :success
88
+ assert assigns(:cms_site)
89
+ assert_equal :fr, I18n.locale
90
+ end
91
+
92
+ def test_get_admin_with_locale
93
+ http_auth :get, cms_admin_site_pages_path(cms_sites(:default))
94
+ assert_response :success
95
+ assert_equal :en, I18n.locale
96
+
97
+ cms_sites(:default).update_column(:locale, 'fr')
98
+ http_auth :get, cms_admin_site_pages_path(cms_sites(:default))
99
+ assert_response :success
100
+ assert_equal :fr, I18n.locale
101
+ end
102
+
103
+ def test_get_admin_with_forced_locale
104
+ ComfyPress.config.admin_locale = :en
105
+
106
+ cms_sites(:default).update_column(:locale, 'fr')
107
+ http_auth :get, cms_admin_site_pages_path(cms_sites(:default))
108
+ assert_response :success
109
+ assert_equal :en, I18n.locale
110
+
111
+ I18n.default_locale = :fr
112
+ I18n.locale = :fr
113
+ http_auth :get, cms_admin_sites_path()
114
+ assert_response :success
115
+ assert_equal :en, I18n.locale
116
+
117
+ I18n.default_locale = :en
118
+ end
119
+
120
+ end
@@ -0,0 +1,43 @@
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
+ ComfyPress::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
+ ComfyPress::ViewHooks.add(:navigation, '/nav_hook')
17
+ ComfyPress::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_proper_order
26
+ CmsAdmin::SitesController.append_view_path(File.expand_path('../fixtures/views', File.dirname(__FILE__)))
27
+ ComfyPress::ViewHooks.add(:navigation, '/nav_hook_2', 0)
28
+ ComfyPress::ViewHooks.add(:navigation, '/nav_hook', 1)
29
+
30
+ http_auth :get, cms_admin_sites_path
31
+ assert_response :success
32
+ assert_match /<hook_content_2>hook_content/, response.body
33
+ end
34
+
35
+ def test_hooks_rendering_with_no_hook
36
+ ComfyPress::ViewHooks.remove(:navigation)
37
+
38
+ http_auth :get, cms_admin_sites_path
39
+ assert_response :success
40
+ assert_no_match /hook_content/, response.body
41
+ end
42
+
43
+ end
@@ -0,0 +1,124 @@
1
+ # encoding: utf-8
2
+
3
+ require 'coveralls'
4
+ Coveralls.wear!('rails')
5
+
6
+ ENV['RAILS_ENV'] = 'test'
7
+ require File.expand_path('../../config/environment', __FILE__)
8
+ require 'rails/test_help'
9
+
10
+ # No need to add cache-busters in test environment
11
+ Paperclip::Attachment.default_options[:use_timestamp] = false
12
+
13
+ class ActiveSupport::TestCase
14
+ fixtures :all
15
+ include ActionDispatch::TestProcess
16
+
17
+ def setup
18
+ reset_config
19
+ end
20
+
21
+ # resetting default configuration
22
+ def reset_config
23
+ ComfyPress.configure do |config|
24
+ config.cms_title = 'ComfyPress CMS Engine'
25
+ config.admin_auth = 'ComfyPress::HttpAuth'
26
+ config.public_auth = 'ComfyPress::DummyAuth'
27
+ config.admin_route_redirect = ''
28
+ config.enable_fixtures = false
29
+ config.fixtures_path = File.expand_path('db/cms_fixtures', Rails.root)
30
+ config.revisions_limit = 25
31
+ config.locales = {
32
+ 'en' => 'English',
33
+ 'es' => 'Español',
34
+ 'pt-BR' => 'Português Brasileiro',
35
+ 'zh-CN' => '简体中文',
36
+ 'ja' => '日本語'
37
+ }
38
+ config.admin_locale = nil
39
+ config.upload_file_options = { }
40
+ config.admin_cache_sweeper = nil
41
+ config.allow_irb = false
42
+ config.allowed_helpers = nil
43
+ config.allowed_partials = nil
44
+ config.hostname_aliases = nil
45
+ end
46
+ ComfyPress::HttpAuth.username = 'username'
47
+ ComfyPress::HttpAuth.password = 'password'
48
+ end
49
+
50
+ # Example usage:
51
+ # assert_has_errors_on @record, :field_1, :field_2
52
+ def assert_has_errors_on(record, *fields)
53
+ unmatched = record.errors.keys - fields.flatten
54
+ assert unmatched.blank?, "#{record.class} has errors on '#{unmatched.join(', ')}'"
55
+ unmatched = fields.flatten - record.errors.keys
56
+ assert unmatched.blank?, "#{record.class} doesn't have errors on '#{unmatched.join(', ')}'"
57
+ end
58
+
59
+ # Example usage:
60
+ # assert_exception_raised do ... end
61
+ # assert_exception_raised ActiveRecord::RecordInvalid do ... end
62
+ # assert_exception_raised Plugin::Error, 'error_message' do ... end
63
+ def assert_exception_raised(exception_class = nil, error_message = nil, &block)
64
+ exception_raised = nil
65
+ yield
66
+ rescue => exception_raised
67
+ ensure
68
+ if exception_raised
69
+ if exception_class
70
+ assert_equal exception_class, exception_raised.class, exception_raised.to_s
71
+ else
72
+ assert true
73
+ end
74
+ assert_equal error_message, exception_raised.to_s if error_message
75
+ else
76
+ flunk 'Exception was not raised'
77
+ end
78
+ end
79
+
80
+ def assert_no_select(selector, value = nil)
81
+ assert_select(selector, :text => value, :count => 0)
82
+ end
83
+
84
+ # Small method that allows for better formatting in tests
85
+ def rendered_content_formatter(string)
86
+ string.gsub(/^[ ]+/, '')
87
+ end
88
+
89
+ end
90
+
91
+ class ActionController::TestCase
92
+ def setup
93
+ @request.env['HTTP_AUTHORIZATION'] = "Basic #{Base64.encode64('username:password')}"
94
+ end
95
+ end
96
+
97
+ class ActionDispatch::IntegrationTest
98
+
99
+ def setup
100
+ host! 'test.host'
101
+ reset_config
102
+ end
103
+
104
+ # Attaching http_auth stuff with request. Example use:
105
+ # http_auth :get, '/cms-admin/pages'
106
+ def http_auth(method, path, options = {}, username = 'username', password = 'password')
107
+ send(method, path, options, {'HTTP_AUTHORIZATION' => "Basic #{Base64.encode64(username + ':' + password)}"})
108
+ end
109
+ end
110
+
111
+
112
+ # Injecting `update_column` for installs on Rails < 3.1
113
+ module ComfyPress
114
+ module Deprication
115
+ module ActiveRecord
116
+ def update_column(name, value)
117
+ update_attribute(name, value)
118
+ end
119
+ end
120
+ end
121
+ end
122
+ unless Cms::Page.new.respond_to?(:update_column)
123
+ ActiveRecord::Base.send :include, ComfyPress::Deprication::ActiveRecord
124
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class Cms::MenuItemTest < ActiveSupport::TestCase
4
+ # test "the truth" do
5
+ # assert true
6
+ # end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class Cms::MenuTest < ActiveSupport::TestCase
4
+ # test "the truth" do
5
+ # assert true
6
+ # end
7
+ end
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
4
+
5
+ class ConfigurationTest < ActiveSupport::TestCase
6
+
7
+ def test_configuration_presence
8
+ assert config = ComfyPress.configuration
9
+ assert_equal 'ComfyPress CMS Engine', config.cms_title
10
+ assert_equal 'ComfyPress::HttpAuth', config.admin_auth
11
+ assert_equal 'ComfyPress::DummyAuth', config.public_auth
12
+ assert_equal '', config.admin_route_redirect
13
+ assert_equal false, config.enable_fixtures
14
+ assert_equal File.expand_path('db/cms_fixtures', Rails.root), config.fixtures_path
15
+ assert_equal 25, config.revisions_limit
16
+ assert_equal ({
17
+ 'en' => 'English',
18
+ 'es' => 'Español',
19
+ 'pt-BR' => 'Português Brasileiro',
20
+ 'zh-CN' => '简体中文',
21
+ 'ja' => '日本語'
22
+ }), config.locales
23
+ assert_equal nil, config.admin_locale
24
+ assert_equal nil, config.database_config
25
+ assert_equal ({}), config.upload_file_options
26
+ assert_equal nil, config.admin_cache_sweeper
27
+ assert_equal false, config.allow_irb
28
+ assert_equal nil, config.allowed_helpers
29
+ assert_equal nil, config.allowed_partials
30
+ assert_equal nil, config.hostname_aliases
31
+ end
32
+
33
+ def test_initialization_overrides
34
+ ComfyPress.configuration.cms_title = 'New Title'
35
+ assert_equal 'New Title', ComfyPress.configuration.cms_title
36
+ end
37
+
38
+ def test_version
39
+ assert ComfyPress::VERSION
40
+ end
41
+
42
+ end