comfypress 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
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