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,199 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class CmsBlockTest < ActiveSupport::TestCase
4
+
5
+ def test_fixtures_validity
6
+ Cms::Block.all.each do |block|
7
+ assert block.valid?, block.errors.full_messages.to_s
8
+ end
9
+ end
10
+
11
+ def test_tag
12
+ block = cms_blocks(:default_page_text)
13
+ assert block.page.tags(true).collect(&:id).member?('page_text_default_page_text')
14
+ assert_equal 'page_text_default_page_text', block.tag.id
15
+ end
16
+
17
+ def test_creation_via_page_nested_attributes
18
+ assert_difference ['Cms::Page.count', 'Cms::Block.count'] do
19
+ page = cms_sites(:default).pages.create!(
20
+ :layout => cms_layouts(:default),
21
+ :label => 'test page',
22
+ :slug => 'test_page',
23
+ :parent_id => cms_pages(:default).id,
24
+ :blocks_attributes => [
25
+ {
26
+ :identifier => 'default_page_text',
27
+ :content => 'test_content'
28
+ }
29
+ ]
30
+ )
31
+ assert_equal 1, page.blocks.count
32
+ block = page.blocks.first
33
+ assert_equal 'default_page_text', block.identifier
34
+ assert_equal 'test_content', block.content
35
+ end
36
+ end
37
+
38
+ def test_creation_via_page_nested_attributes_as_hash
39
+ assert_difference ['Cms::Page.count', 'Cms::Block.count'] do
40
+ page = cms_sites(:default).pages.create!(
41
+ :layout => cms_layouts(:default),
42
+ :label => 'test page',
43
+ :slug => 'test_page',
44
+ :parent_id => cms_pages(:default).id,
45
+ :blocks_attributes => {
46
+ '0' => {
47
+ :identifier => 'default_page_text',
48
+ :content => 'test_content'
49
+ }
50
+ }
51
+ )
52
+ assert_equal 1, page.blocks.count
53
+ block = page.blocks.first
54
+ assert_equal 'default_page_text', block.identifier
55
+ assert_equal 'test_content', block.content
56
+ end
57
+ end
58
+
59
+ def test_creation_via_page_nested_attributes_as_hash_with_duplicates
60
+ assert_difference ['Cms::Page.count', 'Cms::Block.count'] do
61
+ page = cms_sites(:default).pages.create!(
62
+ :layout => cms_layouts(:default),
63
+ :label => 'test page',
64
+ :slug => 'test_page',
65
+ :parent_id => cms_pages(:default).id,
66
+ :blocks_attributes => {
67
+ '0' => {
68
+ :identifier => 'default_page_text',
69
+ :content => 'test_content'
70
+ },
71
+ '1' => {
72
+ :identifier => 'default_page_text',
73
+ :content => 'test_content'
74
+ }
75
+ }
76
+ )
77
+ assert_equal 1, page.blocks.count
78
+ block = page.blocks.first
79
+ assert_equal 'default_page_text', block.identifier
80
+ assert_equal 'test_content', block.content
81
+ end
82
+ end
83
+
84
+ def test_creation_and_update_via_nested_attributes_with_file
85
+ layout = cms_layouts(:default)
86
+ layout.update_column(:content, '{{cms:page_file:file}}')
87
+
88
+ page = nil
89
+ assert_difference ['Cms::Page.count', 'Cms::Block.count', 'Cms::File.count'] do
90
+ page = cms_sites(:default).pages.create!(
91
+ :layout => layout,
92
+ :label => 'test page',
93
+ :slug => 'test_page',
94
+ :parent_id => cms_pages(:default).id,
95
+ :blocks_attributes => [
96
+ { :identifier => 'file',
97
+ :content => [fixture_file_upload('files/image.jpg', "image/jpeg"), fixture_file_upload('files/document.pdf', "application/pdf")] }
98
+ ]
99
+ )
100
+ assert_equal 1, page.blocks.count
101
+ block = page.blocks.first
102
+ assert_equal 'file', block.identifier
103
+ assert_equal nil, block.content
104
+ assert_equal 1, block.files.count
105
+ assert_equal 'image.jpg', block.files.first.file_file_name
106
+
107
+ page.reload
108
+ assert_equal block.files.first.file.url, page.content
109
+ end
110
+
111
+ assert_no_difference ['Cms::Block.count', 'Cms::File.count'] do
112
+ page.update_attributes!(
113
+ :blocks_attributes => [
114
+ { :identifier => 'file',
115
+ :content => fixture_file_upload('files/document.pdf', "application/pdf") }
116
+ ]
117
+ )
118
+ page.reload
119
+ block = page.blocks.first
120
+ assert_equal 1, block.files.count
121
+ assert_equal 'document.pdf', block.files.first.file_file_name
122
+ assert_equal block.files.first.file.url, page.content
123
+ end
124
+ end
125
+
126
+ def test_creation_and_update_via_nested_attributes_with_files
127
+ layout = cms_layouts(:default)
128
+ layout.update_column(:content, '{{cms:page_files:files}}')
129
+
130
+ page = nil
131
+ assert_difference ['Cms::Page.count', 'Cms::Block.count'] do
132
+ assert_difference 'Cms::File.count', 2 do
133
+ page = cms_sites(:default).pages.create!(
134
+ :layout => layout,
135
+ :label => 'test page',
136
+ :slug => 'test_page',
137
+ :parent_id => cms_pages(:default).id,
138
+ :blocks_attributes => [
139
+ { :identifier => 'files',
140
+ :content => [fixture_file_upload('files/image.jpg', "image/jpeg"), fixture_file_upload('files/image.gif', "image/gif")] }
141
+ ]
142
+ )
143
+ assert_equal 1, page.blocks.count
144
+ block = page.blocks.first
145
+ assert_equal 'files', block.identifier
146
+ assert_equal nil, block.content
147
+ assert_equal 2, block.files.count
148
+ assert_equal ['image.jpg', 'image.gif'], block.files.collect(&:file_file_name)
149
+ end
150
+ end
151
+
152
+ assert_no_difference 'Cms::Block.count' do
153
+ assert_difference 'Cms::File.count', 2 do
154
+ page.update_attributes!(
155
+ :blocks_attributes => [
156
+ { :identifier => 'files',
157
+ :content => [fixture_file_upload('files/document.pdf', "application/pdf"), fixture_file_upload('files/image.gif', "image/gif")] }
158
+ ]
159
+ )
160
+ page.reload
161
+ block = page.blocks.first
162
+ assert_equal 4, block.files.count
163
+ assert_equal ['image.jpg', 'image.gif', 'document.pdf', 'image.gif'],
164
+ block.files.collect(&:file_file_name)
165
+ end
166
+ end
167
+ end
168
+
169
+ def test_creation_via_nested_attributes_with_file
170
+ layout = cms_layouts(:default)
171
+ layout.update_column(:content, '{{cms:page:header}}{{cms:page_file:file}}{{cms:page:footer}}')
172
+
173
+ assert_difference 'Cms::Page.count' do
174
+ assert_difference 'Cms::Block.count', 3 do
175
+ page = cms_sites(:default).pages.create!(
176
+ :layout => layout,
177
+ :label => 'test page',
178
+ :slug => 'test_page',
179
+ :parent_id => cms_pages(:default).id,
180
+ :blocks_attributes => {
181
+ '0' => {
182
+ :identifier => 'header',
183
+ :content => 'header content'
184
+ },
185
+ '1' => {
186
+ :identifier => 'file',
187
+ :content => fixture_file_upload('files/document.pdf', "application/pdf")
188
+ },
189
+ '2' => {
190
+ :identifier => 'footer',
191
+ :content => 'footer content'
192
+ }
193
+ }
194
+ )
195
+ end
196
+ end
197
+ end
198
+
199
+ end
@@ -0,0 +1,76 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class CmsCategorizationTest < ActiveSupport::TestCase
4
+
5
+ def test_fixtures_validity
6
+ Cms::Categorization.all.each do |categorization|
7
+ assert categorization.valid?, categorization.errors.full_messages.to_s
8
+ end
9
+ end
10
+
11
+ def test_validation
12
+ category = Cms::Categorization.new
13
+ assert category.invalid?
14
+ assert_has_errors_on category, :category_id, :categorized_type, :categorized_id
15
+ end
16
+
17
+ def test_creation
18
+ assert_difference 'Cms::Categorization.count' do
19
+ categorization = cms_categories(:default).categorizations.create!(
20
+ :categorized => cms_snippets(:default)
21
+ )
22
+ end
23
+ end
24
+
25
+ def test_categorized_relationship
26
+ file = cms_files(:default)
27
+ assert file.respond_to?(:category_ids)
28
+ assert_equal 1, file.categories.count
29
+ assert_equal cms_categories(:default), file.categories.first
30
+
31
+ assert cms_snippets(:default).respond_to?(:category_ids)
32
+ assert_equal 0, cms_snippets(:default).categories.count
33
+ assert cms_pages(:default).respond_to?(:category_ids)
34
+ assert_equal 0, cms_pages(:default).categories.count
35
+ end
36
+
37
+ def test_categorized_destruction
38
+ file = cms_files(:default)
39
+ assert_difference ['Cms::File.count', 'Cms::Categorization.count'], -1 do
40
+ file.destroy
41
+ end
42
+ end
43
+
44
+ def test_categorized_syncing
45
+ snippet = cms_snippets(:default)
46
+ assert_equal 0, snippet.categories.count
47
+
48
+ snippet.update_attributes(:category_ids => {
49
+ cms_categories(:default).id => 1,
50
+ 'invalid' => 1
51
+ })
52
+ snippet.reload
53
+ assert_equal 1, snippet.categories.count
54
+
55
+ snippet.update_attributes(:category_ids => {
56
+ cms_categories(:default).id => 0,
57
+ 'invalid' => 0
58
+ })
59
+ snippet.reload
60
+ assert_equal 0, snippet.categories.count
61
+ end
62
+
63
+ def test_scope_for_category
64
+ category = cms_categories(:default)
65
+ assert_equal 1, Cms::File.for_category(category.label).count
66
+ assert_equal 0, Cms::File.for_category('invalid').count
67
+ assert_equal 1, Cms::File.for_category(category.label, 'invalid').count
68
+ assert_equal 1, Cms::File.for_category(nil).count
69
+
70
+ new_category = cms_sites(:default).categories.create!(:label => 'Test Category', :categorized_type => 'Cms::File')
71
+ new_category.categorizations.create!(:categorized => cms_files(:default))
72
+ assert_equal 1, Cms::File.for_category(category.label, new_category.label).all.size
73
+ assert_equal 1, Cms::File.for_category(category.label, new_category.label).count('cms_files.id', :distinct => true)
74
+ end
75
+
76
+ end
@@ -0,0 +1,39 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class CmsCategoryTest < ActiveSupport::TestCase
4
+
5
+ def test_fixtures_validity
6
+ Cms::Category.all.each do |category|
7
+ assert category.valid?, category.errors.full_messages.to_s
8
+ end
9
+ end
10
+
11
+ def test_validation
12
+ category = Cms::Category.new
13
+ assert category.invalid?
14
+ assert_has_errors_on category, [:site_id, :label, :categorized_type]
15
+ end
16
+
17
+ def test_creation
18
+ assert_difference 'Cms::Category.count' do
19
+ cms_sites(:default).categories.create(
20
+ :label => 'Test Category',
21
+ :categorized_type => 'Cms::Snippet'
22
+ )
23
+ end
24
+ end
25
+
26
+ def test_destruction
27
+ category = cms_categories(:default)
28
+ assert_equal 1, category.categorizations.count
29
+ assert_difference ['Cms::Category.count', 'Cms::Categorization.count'], -1 do
30
+ category.destroy
31
+ end
32
+ end
33
+
34
+ def test_scope_of_type
35
+ assert_equal 1, Cms::Category.of_type('Cms::File').count
36
+ assert_equal 0, Cms::Category.of_type('Invalid').count
37
+ end
38
+
39
+ end
@@ -0,0 +1,89 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class CmsFileTest < ActiveSupport::TestCase
4
+
5
+ def test_fixtures_validity
6
+ Cms::File.all.each do |file|
7
+ assert file.valid?, file.errors.full_messages.to_s
8
+ end
9
+ end
10
+
11
+ def test_validations
12
+ assert_no_difference 'Cms::File.count' do
13
+ file = Cms::File.create
14
+ assert file.errors.present?
15
+ assert_has_errors_on file, :site_id, :file
16
+ end
17
+ end
18
+
19
+ def test_create
20
+ assert_difference 'Cms::File.count' do
21
+ upload = fixture_file_upload('files/image.jpg', 'image/jpeg')
22
+
23
+ file = cms_sites(:default).files.create(
24
+ :file => upload
25
+ )
26
+ assert_equal 'Image', file.label
27
+ assert_equal 'image.jpg', file.file_file_name
28
+ assert_equal 'image/jpeg', file.file_content_type
29
+ assert_equal upload.size, file.file_file_size
30
+ assert_equal 1, file.position
31
+ end
32
+ end
33
+
34
+ def test_create_with_dimensions
35
+ assert_difference 'Cms::File.count' do
36
+ upload = fixture_file_upload('files/image.jpg', 'image/jpeg')
37
+
38
+ file = cms_sites(:default).files.create!(
39
+ :dimensions => '10x10#',
40
+ :file => upload
41
+ )
42
+ assert_equal 'Image', file.label
43
+ assert_equal 'image.jpg', file.file_file_name
44
+ assert_equal 'image/jpeg', file.file_content_type
45
+ # assert file.file_file_size < upload.size
46
+ assert_equal 1, file.position
47
+ end
48
+ end
49
+
50
+ def test_create_with_non_image
51
+ assert_difference 'Cms::File.count' do
52
+ file = cms_sites(:default).files.create!(
53
+ :file => fixture_file_upload('files/data.zip', 'application/zip')
54
+ )
55
+ assert_equal 'Data', file.label
56
+ assert_equal 'data.zip', file.file_file_name
57
+ assert_equal 'application/zip', file.file_content_type
58
+ end
59
+ end
60
+
61
+ def test_create_failure
62
+ assert_no_difference 'Cms::File.count' do
63
+ cms_sites(:default).files.create
64
+ end
65
+ end
66
+
67
+ def test_image_mimetypes
68
+ assert_equal %w(image/gif image/jpeg image/pjpeg image/png image/svg+xml image/tiff),
69
+ Cms::File::IMAGE_MIMETYPES
70
+ end
71
+
72
+ def test_images_scope
73
+ file = cms_files(:default)
74
+ assert_equal 'image/jpeg', file.file_content_type
75
+ assert_equal 1, Cms::File.images.count
76
+ assert_equal 0, Cms::File.not_images.count
77
+
78
+ file.update_column(:file_content_type, 'application/pdf')
79
+ assert_equal 0, Cms::File.images.count
80
+ assert_equal 1, Cms::File.not_images.count
81
+ end
82
+
83
+ def test_image?
84
+ file = cms_files(:default)
85
+ assert_equal 'image/jpeg', file.file_content_type
86
+ assert file.is_image?
87
+ end
88
+
89
+ end
@@ -0,0 +1,125 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class CmsLayoutTest < ActiveSupport::TestCase
4
+
5
+ def test_fixtures_validity
6
+ Cms::Layout.all.each do |layout|
7
+ assert layout.valid?, layout.errors.full_messages.to_s
8
+ end
9
+ end
10
+
11
+ def test_validations
12
+ layout = cms_sites(:default).layouts.create
13
+ assert layout.errors.present?
14
+ assert_has_errors_on layout, [:label, :identifier]
15
+ end
16
+
17
+ def test_label_assignment
18
+ layout = cms_sites(:default).layouts.new(
19
+ :identifier => 'test',
20
+ :content => '{{cms:page:content}}'
21
+ )
22
+ assert layout.valid?
23
+ assert_equal 'Test', layout.label
24
+ end
25
+
26
+ def test_creation
27
+ assert_difference 'Cms::Layout.count' do
28
+ layout = cms_sites(:default).layouts.create(
29
+ :label => 'New Layout',
30
+ :identifier => 'new-layout',
31
+ :content => '{{cms:page:content}}',
32
+ :css => 'css',
33
+ :js => 'js'
34
+ )
35
+ assert_equal 'New Layout', layout.label
36
+ assert_equal 'new-layout', layout.identifier
37
+ assert_equal '{{cms:page:content}}', layout.content
38
+ assert_equal 'css', layout.css
39
+ assert_equal 'js', layout.js
40
+ assert_equal 1, layout.position
41
+ end
42
+ end
43
+
44
+ def test_options_for_select
45
+ assert_equal ['Default Layout', 'Nested Layout', '. . Child Layout'],
46
+ Cms::Layout.options_for_select(cms_sites(:default)).collect{|t| t.first}
47
+ assert_equal ['Default Layout', 'Nested Layout'],
48
+ Cms::Layout.options_for_select(cms_sites(:default), cms_layouts(:child)).collect{|t| t.first}
49
+ assert_equal ['Default Layout'],
50
+ Cms::Layout.options_for_select(cms_sites(:default), cms_layouts(:nested)).collect{|t| t.first}
51
+ end
52
+
53
+ def test_app_layouts_for_select
54
+ FileUtils.touch(File.expand_path('app/views/layouts/cms_admin/nested.html.erb', Rails.root))
55
+ FileUtils.touch(File.expand_path('app/views/layouts/_partial.html.erb', Rails.root))
56
+ FileUtils.touch(File.expand_path('app/views/layouts/not_a_layout.erb', Rails.root))
57
+
58
+ assert_equal ['cms_admin', 'cms_admin/nested'], Cms::Layout.app_layouts_for_select
59
+
60
+ FileUtils.rm(File.expand_path('app/views/layouts/cms_admin/nested.html.erb', Rails.root))
61
+ FileUtils.rm(File.expand_path('app/views/layouts/_partial.html.erb', Rails.root))
62
+ FileUtils.rm(File.expand_path('app/views/layouts/not_a_layout.erb', Rails.root))
63
+ end
64
+
65
+ def test_merged_content_with_same_child_content
66
+ parent_layout = cms_layouts(:nested)
67
+ assert_equal "{{cms:page:header}}\n{{cms:page:content}}", parent_layout.content
68
+ assert_equal "{{cms:page:header}}\n{{cms:page:content}}", parent_layout.merged_content
69
+
70
+ child_layout = cms_layouts(:child)
71
+ assert_equal parent_layout, child_layout.parent
72
+ assert_equal "{{cms:page:left_column}}\n{{cms:page:right_column}}", child_layout.content
73
+ assert_equal "{{cms:page:header}}\n{{cms:page:left_column}}\n{{cms:page:right_column}}", child_layout.merged_content
74
+
75
+ child_layout.update_column(:content, '{{cms:page:content}}')
76
+ assert_equal "{{cms:page:header}}\n{{cms:page:content}}", child_layout.merged_content
77
+
78
+ parent_layout.update_column(:content, '{{cms:page:whatever}}')
79
+ child_layout.reload
80
+ assert_equal '{{cms:page:content}}', child_layout.merged_content
81
+ end
82
+
83
+ def test_update_forces_page_content_reload
84
+ layout_1 = cms_layouts(:nested)
85
+ layout_2 = cms_layouts(:child)
86
+ page_1 = cms_sites(:default).pages.create!(
87
+ :label => 'page_1',
88
+ :slug => 'page-1',
89
+ :parent_id => cms_pages(:default).id,
90
+ :layout_id => layout_1.id,
91
+ :is_published => '1',
92
+ :blocks_attributes => [
93
+ { :identifier => 'header',
94
+ :content => 'header_content' },
95
+ { :identifier => 'content',
96
+ :content => 'content_content' }
97
+ ]
98
+ )
99
+ page_2 = cms_sites(:default).pages.create!(
100
+ :label => 'page_2',
101
+ :slug => 'page-2',
102
+ :parent_id => cms_pages(:default).id,
103
+ :layout_id => layout_2.id,
104
+ :is_published => '1',
105
+ :blocks_attributes => [
106
+ { :identifier => 'header',
107
+ :content => 'header_content' },
108
+ { :identifier => 'left_column',
109
+ :content => 'left_column_content' },
110
+ { :identifier => 'right_column',
111
+ :content => 'left_column_content' }
112
+ ]
113
+ )
114
+ assert_equal "header_content\ncontent_content", page_1.content
115
+ assert_equal "header_content\nleft_column_content\nleft_column_content", page_2.content
116
+
117
+ layout_1.update_attributes(:content => "Updated {{cms:page:content}}")
118
+ page_1.reload
119
+ page_2.reload
120
+
121
+ assert_equal "Updated content_content", page_1.content
122
+ assert_equal "Updated left_column_content\nleft_column_content", page_2.content
123
+ end
124
+
125
+ end