lucy_cms 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (245) hide show
  1. data/Gemfile +19 -0
  2. data/Gemfile.lock +88 -0
  3. data/LICENSE +24 -0
  4. data/README.md +161 -0
  5. data/Rakefile +26 -0
  6. data/VERSION +1 -0
  7. data/app/controllers/application_controller.rb +5 -0
  8. data/app/controllers/cms_admin/base_controller.rb +43 -0
  9. data/app/controllers/cms_admin/layouts_controller.rb +66 -0
  10. data/app/controllers/cms_admin/pages_controller.rb +111 -0
  11. data/app/controllers/cms_admin/sessions_controller.rb +25 -0
  12. data/app/controllers/cms_admin/sites_controller.rb +69 -0
  13. data/app/controllers/cms_admin/snippets_controller.rb +62 -0
  14. data/app/controllers/cms_admin/upload_dirs_controller.rb +79 -0
  15. data/app/controllers/cms_admin/users_controller.rb +129 -0
  16. data/app/controllers/cms_content_controller.rb +51 -0
  17. data/app/models/cms_block.rb +28 -0
  18. data/app/models/cms_layout.rb +118 -0
  19. data/app/models/cms_page.rb +163 -0
  20. data/app/models/cms_site.rb +38 -0
  21. data/app/models/cms_snippet.rb +70 -0
  22. data/app/models/cms_upload.rb +19 -0
  23. data/app/models/cms_upload_dir.rb +11 -0
  24. data/app/models/cms_user.rb +93 -0
  25. data/app/views/cms_admin/layouts/_form.html.erb +10 -0
  26. data/app/views/cms_admin/layouts/_index_branch.html.erb +24 -0
  27. data/app/views/cms_admin/layouts/edit.html.erb +6 -0
  28. data/app/views/cms_admin/layouts/index.html.erb +6 -0
  29. data/app/views/cms_admin/layouts/new.html.erb +6 -0
  30. data/app/views/cms_admin/pages/_form.html.erb +37 -0
  31. data/app/views/cms_admin/pages/_form_blocks.html.erb +7 -0
  32. data/app/views/cms_admin/pages/_index_branch.html.erb +40 -0
  33. data/app/views/cms_admin/pages/edit.html.erb +5 -0
  34. data/app/views/cms_admin/pages/form_blocks.js.erb +2 -0
  35. data/app/views/cms_admin/pages/index.html.erb +6 -0
  36. data/app/views/cms_admin/pages/new.html.erb +5 -0
  37. data/app/views/cms_admin/pages/toggle_branch.js.erb +11 -0
  38. data/app/views/cms_admin/sessions/new.html.erb +12 -0
  39. data/app/views/cms_admin/sites/_form.html.erb +16 -0
  40. data/app/views/cms_admin/sites/edit.html.erb +6 -0
  41. data/app/views/cms_admin/sites/new.html.erb +6 -0
  42. data/app/views/cms_admin/sites/setup.html.erb +16 -0
  43. data/app/views/cms_admin/snippets/_form.html.erb +4 -0
  44. data/app/views/cms_admin/snippets/edit.html.erb +6 -0
  45. data/app/views/cms_admin/snippets/index.html.erb +23 -0
  46. data/app/views/cms_admin/snippets/new.html.erb +6 -0
  47. data/app/views/cms_admin/upload_dirs/_file.html.erb +15 -0
  48. data/app/views/cms_admin/upload_dirs/_form.html.erb +2 -0
  49. data/app/views/cms_admin/upload_dirs/conflict.html.erb +12 -0
  50. data/app/views/cms_admin/upload_dirs/index.html.erb +23 -0
  51. data/app/views/cms_admin/upload_dirs/new.html.erb +6 -0
  52. data/app/views/cms_admin/upload_dirs/show.html.erb +26 -0
  53. data/app/views/cms_admin/upload_dirs/uploads_destroy.js.erb +3 -0
  54. data/app/views/cms_admin/users/_form.html.erb +9 -0
  55. data/app/views/cms_admin/users/_index_branch.html.erb +16 -0
  56. data/app/views/cms_admin/users/change_password.html.erb +14 -0
  57. data/app/views/cms_admin/users/edit.html.erb +17 -0
  58. data/app/views/cms_admin/users/index.html.erb +6 -0
  59. data/app/views/cms_admin/users/new.html.erb +14 -0
  60. data/app/views/layouts/cms_admin.html.erb +52 -0
  61. data/config/application.rb +48 -0
  62. data/config/boot.rb +13 -0
  63. data/config/database.yml +22 -0
  64. data/config/environment.rb +5 -0
  65. data/config/environments/development.rb +22 -0
  66. data/config/environments/production.rb +49 -0
  67. data/config/environments/test.rb +35 -0
  68. data/config/initializers/LucyCMS.rb +37 -0
  69. data/config/initializers/mime_types.rb +5 -0
  70. data/config/locales/en.yml +5 -0
  71. data/config/routes.rb +45 -0
  72. data/config.ru +4 -0
  73. data/db/cms_seeds/example.local/layouts/default.yml +8 -0
  74. data/db/cms_seeds/example.local/layouts/nested.yml +6 -0
  75. data/db/cms_seeds/example.local/pages/child/subchild.yml +14 -0
  76. data/db/cms_seeds/example.local/pages/child.yml +10 -0
  77. data/db/cms_seeds/example.local/pages/index.yml +11 -0
  78. data/db/cms_seeds/example.local/snippets/example.yml +4 -0
  79. data/db/migrate/01_create_cms.rb +114 -0
  80. data/db/seeds.rb +7 -0
  81. data/lib/LucyCMS/acts_as_tree.rb +102 -0
  82. data/lib/LucyCMS/cms_tag/field_datetime.rb +26 -0
  83. data/lib/LucyCMS/cms_tag/field_integer.rb +26 -0
  84. data/lib/LucyCMS/cms_tag/field_string.rb +26 -0
  85. data/lib/LucyCMS/cms_tag/field_text.rb +26 -0
  86. data/lib/LucyCMS/cms_tag/helper.rb +20 -0
  87. data/lib/LucyCMS/cms_tag/page_datetime.rb +22 -0
  88. data/lib/LucyCMS/cms_tag/page_integer.rb +22 -0
  89. data/lib/LucyCMS/cms_tag/page_rich_text.rb +22 -0
  90. data/lib/LucyCMS/cms_tag/page_string.rb +22 -0
  91. data/lib/LucyCMS/cms_tag/page_text.rb +22 -0
  92. data/lib/LucyCMS/cms_tag/partial.rb +21 -0
  93. data/lib/LucyCMS/cms_tag/snippet.rb +22 -0
  94. data/lib/LucyCMS/cms_tag.rb +119 -0
  95. data/lib/LucyCMS/configuration.rb +36 -0
  96. data/lib/LucyCMS/controller_methods.rb +42 -0
  97. data/lib/LucyCMS/engine.rb +12 -0
  98. data/lib/LucyCMS/form_builder.rb +129 -0
  99. data/lib/LucyCMS/rails_extensions.rb +22 -0
  100. data/lib/LucyCMS/site_form_builder.rb +129 -0
  101. data/lib/LucyCMS/view_hooks.rb +30 -0
  102. data/lib/LucyCMS/view_methods.rb +68 -0
  103. data/lib/LucyCMS.rb +40 -0
  104. data/lib/generators/README +17 -0
  105. data/lib/generators/cms_generator.rb +44 -0
  106. data/lib/tasks/LucyCMS.rake +283 -0
  107. data/lucy_cms.gemspec +100 -0
  108. data/public/404.html +26 -0
  109. data/public/422.html +26 -0
  110. data/public/500.html +26 -0
  111. data/public/favicon.ico +0 -0
  112. data/public/images/LucyCMS/arrow_bottom.gif +0 -0
  113. data/public/images/LucyCMS/arrow_right.gif +0 -0
  114. data/public/images/LucyCMS/icon_folder.png +0 -0
  115. data/public/images/LucyCMS/icon_layout.gif +0 -0
  116. data/public/images/LucyCMS/icon_move.gif +0 -0
  117. data/public/images/LucyCMS/icon_regular.gif +0 -0
  118. data/public/images/LucyCMS/icon_snippet.gif +0 -0
  119. data/public/images/LucyCMS/icon_upload.png +0 -0
  120. data/public/images/LucyCMS/icon_user.jpg +0 -0
  121. data/public/javascripts/LucyCMS/cms.js +204 -0
  122. data/public/javascripts/LucyCMS/codemirror/codemirror.css +102 -0
  123. data/public/javascripts/LucyCMS/codemirror/codemirror.js +23 -0
  124. data/public/javascripts/LucyCMS/codemirror/codemirror_base.js +88 -0
  125. data/public/javascripts/LucyCMS/codemirror/parse_css.js +4 -0
  126. data/public/javascripts/LucyCMS/codemirror/parse_html_mixed.js +3 -0
  127. data/public/javascripts/LucyCMS/codemirror/parse_js.js +12 -0
  128. data/public/javascripts/LucyCMS/codemirror/parse_xml.js +7 -0
  129. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  130. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  131. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  132. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  133. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  134. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  135. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  136. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  137. data/public/javascripts/LucyCMS/jquery-ui/images/ui-icons_222222_256x240.png +0 -0
  138. data/public/javascripts/LucyCMS/jquery-ui/images/ui-icons_2e83ff_256x240.png +0 -0
  139. data/public/javascripts/LucyCMS/jquery-ui/images/ui-icons_454545_256x240.png +0 -0
  140. data/public/javascripts/LucyCMS/jquery-ui/images/ui-icons_888888_256x240.png +0 -0
  141. data/public/javascripts/LucyCMS/jquery-ui/images/ui-icons_cd0a0a_256x240.png +0 -0
  142. data/public/javascripts/LucyCMS/jquery-ui/jquery-ui.css +362 -0
  143. data/public/javascripts/LucyCMS/jquery-ui/jquery-ui.js +190 -0
  144. data/public/javascripts/LucyCMS/jquery.js +154 -0
  145. data/public/javascripts/LucyCMS/plupload/plupload.full.min.js +1 -0
  146. data/public/javascripts/LucyCMS/plupload/plupload.html5.min.js +1 -0
  147. data/public/javascripts/LucyCMS/plupload/plupload.min.js +1 -0
  148. data/public/javascripts/LucyCMS/rails.js +132 -0
  149. data/public/javascripts/LucyCMS/tiny_mce/jquery.tinymce.js +1 -0
  150. data/public/javascripts/LucyCMS/tiny_mce/langs/en.js +170 -0
  151. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/about.htm +54 -0
  152. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/anchor.htm +26 -0
  153. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/charmap.htm +52 -0
  154. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/color_picker.htm +73 -0
  155. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/editor_template.js +1 -0
  156. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/image.htm +80 -0
  157. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
  158. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/img/icons.gif +0 -0
  159. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/about.js +72 -0
  160. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/anchor.js +37 -0
  161. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/charmap.js +335 -0
  162. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/color_picker.js +253 -0
  163. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/image.js +245 -0
  164. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/link.js +156 -0
  165. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/source_editor.js +56 -0
  166. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/langs/en.js +62 -0
  167. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/langs/en_dlg.js +51 -0
  168. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/link.htm +58 -0
  169. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/content.css +36 -0
  170. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/dialog.css +117 -0
  171. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
  172. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
  173. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
  174. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
  175. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
  176. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
  177. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/ui.css +213 -0
  178. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/source_editor.htm +25 -0
  179. data/public/javascripts/LucyCMS/tiny_mce/tiny_mce.js +1 -0
  180. data/public/javascripts/LucyCMS/tiny_mce/tiny_mce_popup.js +5 -0
  181. data/public/robots.txt +5 -0
  182. data/public/stylesheets/LucyCMS/content.css +196 -0
  183. data/public/stylesheets/LucyCMS/form.css +125 -0
  184. data/public/stylesheets/LucyCMS/reset.css +1 -0
  185. data/public/stylesheets/LucyCMS/site_form.css +82 -0
  186. data/public/stylesheets/LucyCMS/structure.css +125 -0
  187. data/public/stylesheets/LucyCMS/typography.css +25 -0
  188. data/script/rails +6 -0
  189. data/test/cms_seeds/test.host/layouts/broken.yml +1 -0
  190. data/test/cms_seeds/test.host/layouts/default.yml +3 -0
  191. data/test/cms_seeds/test.host/layouts/nested.yml +4 -0
  192. data/test/cms_seeds/test.host/pages/broken.yml +1 -0
  193. data/test/cms_seeds/test.host/pages/child/subchild.yml +10 -0
  194. data/test/cms_seeds/test.host/pages/child.yml +10 -0
  195. data/test/cms_seeds/test.host/pages/index.yml +10 -0
  196. data/test/cms_seeds/test.host/snippets/broken.yml +1 -0
  197. data/test/cms_seeds/test.host/snippets/default.yml +3 -0
  198. data/test/fixtures/cms_blocks.yml +12 -0
  199. data/test/fixtures/cms_layouts.yml +36 -0
  200. data/test/fixtures/cms_pages.yml +39 -0
  201. data/test/fixtures/cms_sites.yml +3 -0
  202. data/test/fixtures/cms_snippets.yml +5 -0
  203. data/test/fixtures/cms_upload_dirs.yml +9 -0
  204. data/test/fixtures/cms_uploads.yml +4 -0
  205. data/test/fixtures/cms_users.yml +11 -0
  206. data/test/fixtures/files/invalid_file.gif +9 -0
  207. data/test/fixtures/files/valid_image.jpg +0 -0
  208. data/test/fixtures/views/_nav_hook.html.erb +1 -0
  209. data/test/fixtures/views/_nav_hook_2.html.erb +1 -0
  210. data/test/functional/cms_admin/layouts_controller_test.rb +103 -0
  211. data/test/functional/cms_admin/pages_controller_test.rb +334 -0
  212. data/test/functional/cms_admin/sites_controller_test.rb +99 -0
  213. data/test/functional/cms_admin/snippets_controller_test.rb +102 -0
  214. data/test/functional/cms_admin/uploads_controller_test.rb +26 -0
  215. data/test/functional/cms_content_controller_test.rb +134 -0
  216. data/test/integration/rake_tasks_test.rb +65 -0
  217. data/test/integration/render_cms_seed_test.rb +34 -0
  218. data/test/integration/render_cms_test.rb +81 -0
  219. data/test/integration/sites_test.rb +63 -0
  220. data/test/integration/view_hooks_test.rb +33 -0
  221. data/test/test_helper.rb +86 -0
  222. data/test/unit/cms_block_test.rb +43 -0
  223. data/test/unit/cms_configuration_test.rb +17 -0
  224. data/test/unit/cms_layout_test.rb +146 -0
  225. data/test/unit/cms_page_test.rb +257 -0
  226. data/test/unit/cms_site_test.rb +41 -0
  227. data/test/unit/cms_snippet_test.rb +77 -0
  228. data/test/unit/cms_tag_test.rb +206 -0
  229. data/test/unit/cms_tags/field_datetime_test.rb +34 -0
  230. data/test/unit/cms_tags/field_integer_test.rb +33 -0
  231. data/test/unit/cms_tags/field_string_test.rb +34 -0
  232. data/test/unit/cms_tags/field_text_test.rb +32 -0
  233. data/test/unit/cms_tags/helper_test.rb +38 -0
  234. data/test/unit/cms_tags/page_datetime_test.rb +34 -0
  235. data/test/unit/cms_tags/page_integer_test.rb +33 -0
  236. data/test/unit/cms_tags/page_rich_text.rb +33 -0
  237. data/test/unit/cms_tags/page_string_test.rb +33 -0
  238. data/test/unit/cms_tags/page_text_test.rb +34 -0
  239. data/test/unit/cms_tags/partial_test.rb +44 -0
  240. data/test/unit/cms_tags/snippet_test.rb +33 -0
  241. data/test/unit/cms_upload_dir_test.rb +8 -0
  242. data/test/unit/cms_upload_test.rb +26 -0
  243. data/test/unit/cms_user_test.rb +8 -0
  244. data/test/unit/view_methods_test.rb +21 -0
  245. metadata +488 -0
@@ -0,0 +1,206 @@
1
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
2
+
3
+ class CmsTagTest < ActiveSupport::TestCase
4
+
5
+ def test_tokenizer_regex
6
+ regex = CmsTag::TOKENIZER_REGEX
7
+
8
+ tokens = 'text { text } text'.scan(regex)
9
+ assert_equal nil, tokens[0][0]
10
+ assert_equal 'text { text } text', tokens[0][1]
11
+
12
+ tokens = 'content<{{cms:some_tag content'.scan(regex)
13
+ assert_equal nil, tokens[0][0]
14
+ assert_equal 'content<', tokens[0][1]
15
+ assert_equal nil, tokens[1][0]
16
+ assert_equal '{{', tokens[1][1]
17
+ assert_equal nil, tokens[2][0]
18
+ assert_equal 'cms:some_tag content', tokens[2][1]
19
+
20
+ tokens = 'content<{{cms some_tag}}>content'.scan(regex)
21
+ assert_equal nil, tokens[0][0]
22
+ assert_equal 'content<', tokens[0][1]
23
+ assert_equal nil, tokens[1][0]
24
+ assert_equal '{{', tokens[1][1]
25
+ assert_equal nil, tokens[2][0]
26
+ assert_equal 'cms some_tag}}>content',tokens[2][1]
27
+
28
+ tokens = 'content<{{cms:some_tag}}>content'.scan(regex)
29
+ assert_equal nil, tokens[0][0]
30
+ assert_equal 'content<', tokens[0][1]
31
+ assert_equal '{{cms:some_tag}}', tokens[1][0]
32
+ assert_equal nil, tokens[1][1]
33
+ assert_equal nil, tokens[2][0]
34
+ assert_equal '>content', tokens[2][1]
35
+
36
+ tokens = 'content<{{cms:type:label}}>content'.scan(regex)
37
+ assert_equal nil, tokens[0][0]
38
+ assert_equal 'content<', tokens[0][1]
39
+ assert_equal '{{cms:type:label}}', tokens[1][0]
40
+ assert_equal nil, tokens[1][1]
41
+ assert_equal nil, tokens[2][0]
42
+ assert_equal '>content', tokens[2][1]
43
+
44
+ tokens = 'content<{{cms:type:label }}>content'.scan(regex)
45
+ assert_equal nil, tokens[0][0]
46
+ assert_equal 'content<', tokens[0][1]
47
+ assert_equal '{{cms:type:label }}', tokens[1][0]
48
+ assert_equal nil, tokens[1][1]
49
+ assert_equal nil, tokens[2][0]
50
+ assert_equal '>content', tokens[2][1]
51
+
52
+ tokens = 'content<{{ cms:type:la/b el }}>content'.scan(regex)
53
+ assert_equal nil, tokens[0][0]
54
+ assert_equal 'content<', tokens[0][1]
55
+ assert_equal '{{ cms:type:la/b el }}',tokens[1][0]
56
+ assert_equal nil, tokens[1][1]
57
+ assert_equal nil, tokens[2][0]
58
+ assert_equal '>content', tokens[2][1]
59
+ end
60
+
61
+ def test_tokenizer_regex_limit
62
+ string = '<p>text</p>' * 400
63
+ tokens = string.scan(CmsTag::TOKENIZER_REGEX)
64
+ assert_equal 1, tokens.count
65
+ assert_equal nil, tokens[0][0]
66
+ assert_equal string, tokens[0][1]
67
+ end
68
+
69
+ def test_content_for_existing_page
70
+ page = cms_pages(:default)
71
+ assert page.cms_tags.blank?
72
+ assert_equal rendered_content_formatter(
73
+ '
74
+ layout_content_a
75
+ default_page_text_content_a
76
+ default_snippet_content
77
+ default_page_text_content_b
78
+ layout_content_b
79
+ default_snippet_content
80
+ layout_content_c'
81
+ ), page.content(true)
82
+
83
+ assert_equal 4, page.cms_tags.size
84
+ assert_equal 'cms_tag/field_text_default_field_text', page.cms_tags[0].identifier
85
+ assert_equal 'cms_tag/page_text_default_page_text', page.cms_tags[1].identifier
86
+ assert_equal 'cms_tag/snippet_default', page.cms_tags[2].identifier
87
+ assert_equal page.cms_tags[1], page.cms_tags[2].parent
88
+ assert_equal 'cms_tag/snippet_default', page.cms_tags[3].identifier
89
+ end
90
+
91
+ def test_content_for_new_page
92
+ page = CmsPage.new
93
+ assert page.cms_blocks.blank?
94
+ assert page.cms_tags.blank?
95
+ assert_equal '', page.content
96
+ assert page.cms_tags.blank?
97
+ end
98
+
99
+ def test_content_for_new_page_with_layout
100
+ page = CmsPage.new(:cms_layout => cms_layouts(:default))
101
+ assert page.cms_blocks.blank?
102
+ assert page.cms_tags.blank?
103
+ assert_equal rendered_content_formatter(
104
+ '
105
+ layout_content_a
106
+
107
+ layout_content_b
108
+ default_snippet_content
109
+ layout_content_c'
110
+ ), page.content
111
+
112
+ assert_equal 3, page.cms_tags.size
113
+ assert_equal 'cms_tag/field_text_default_field_text', page.cms_tags[0].identifier
114
+ assert_equal 'cms_tag/page_text_default_page_text', page.cms_tags[1].identifier
115
+ assert_equal 'cms_tag/snippet_default', page.cms_tags[2].identifier
116
+ end
117
+
118
+ def test_content_for_new_page_with_initilized_cms_blocks
119
+ page = CmsPage.new(:cms_layout => cms_layouts(:default))
120
+ assert page.cms_blocks.blank?
121
+ assert page.cms_tags.blank?
122
+ page.cms_blocks_attributes = [
123
+ {
124
+ :label => 'default_field_text',
125
+ :content => 'new_default_field_content',
126
+ :type => 'CmsTag::FieldText'
127
+ },
128
+ {
129
+ :label => 'default_page_text',
130
+ :content => "new_default_page_text_content\n{{cms:snippet:default}}",
131
+ :type => 'CmsTag::PageText'
132
+ },
133
+ {
134
+ :label => 'bogus_field_that_never_will_get_rendered',
135
+ :content => 'some_content_that_doesnot_matter',
136
+ :type => 'CmsTag::PageText'
137
+ }
138
+ ]
139
+ assert_equal 3, page.cms_blocks.size
140
+
141
+ assert_equal rendered_content_formatter(
142
+ '
143
+ layout_content_a
144
+ new_default_page_text_content
145
+ default_snippet_content
146
+ layout_content_b
147
+ default_snippet_content
148
+ layout_content_c'
149
+ ), page.content
150
+
151
+ assert_equal 4, page.cms_tags.size
152
+ assert_equal 'cms_tag/field_text_default_field_text', page.cms_tags[0].identifier
153
+ assert_equal 'cms_tag/page_text_default_page_text', page.cms_tags[1].identifier
154
+ assert_equal 'cms_tag/snippet_default', page.cms_tags[2].identifier
155
+ assert_equal page.cms_tags[1], page.cms_tags[2].parent
156
+ assert_equal 'cms_tag/snippet_default', page.cms_tags[3].identifier
157
+ end
158
+
159
+ def test_content_with_repeated_tags
160
+ page = cms_pages(:default)
161
+ page.cms_layout.content << "\n{{cms:page:default_page_text:text}}"
162
+ page.cms_layout.save!
163
+
164
+ assert_equal rendered_content_formatter(
165
+ '
166
+ layout_content_a
167
+ default_page_text_content_a
168
+ default_snippet_content
169
+ default_page_text_content_b
170
+ layout_content_b
171
+ default_snippet_content
172
+ layout_content_c
173
+ default_page_text_content_a
174
+ default_snippet_content
175
+ default_page_text_content_b'
176
+ ), page.content(true)
177
+
178
+ assert_equal 6, page.cms_tags.size
179
+ assert_equal 'cms_tag/field_text_default_field_text', page.cms_tags[0].identifier
180
+ assert_equal 'cms_tag/page_text_default_page_text', page.cms_tags[1].identifier
181
+ assert_equal 'cms_tag/snippet_default', page.cms_tags[2].identifier
182
+ assert_equal page.cms_tags[1], page.cms_tags[2].parent
183
+ assert_equal 'cms_tag/snippet_default', page.cms_tags[3].identifier
184
+ assert_equal 'cms_tag/page_text_default_page_text', page.cms_tags[4].identifier
185
+ assert_equal 'cms_tag/snippet_default', page.cms_tags[5].identifier
186
+ assert_equal page.cms_tags[4], page.cms_tags[5].parent
187
+ end
188
+
189
+ def test_content_with_cyclical_tags
190
+ page = cms_pages(:default)
191
+ snippet = cms_snippets(:default)
192
+ snippet.update_attribute(:content, "infinite {{cms:page:default}} loop")
193
+ assert_equal rendered_content_formatter(
194
+ '
195
+ layout_content_a
196
+ default_page_text_content_a
197
+ infinite loop
198
+ default_page_text_content_b
199
+ layout_content_b
200
+ infinite loop
201
+ layout_content_c'
202
+ ), page.content(true)
203
+ assert_equal 6, page.cms_tags.size
204
+ end
205
+
206
+ end
@@ -0,0 +1,34 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class FieldDateTimeTest < ActiveSupport::TestCase
4
+
5
+ def test_initialize_tag
6
+ assert tag = CmsTag::FieldDateTime.initialize_tag(cms_pages(:default), '{{ cms:field:content:datetime }}')
7
+ assert_equal 'content', tag.label
8
+ assert tag = CmsTag::FieldDateTime.initialize_tag(cms_pages(:default), '{{cms:field:content:datetime}}')
9
+ assert_equal 'content', tag.label
10
+ assert tag = CmsTag::FieldDateTime.initialize_tag(cms_pages(:default), '{{cms:field:dash-content:datetime}}')
11
+ assert_equal 'dash-content', tag.label
12
+ end
13
+
14
+ def test_initialize_tag_failure
15
+ [
16
+ '{{cms:field:content:not_datetime}}',
17
+ '{{cms:field:content}}',
18
+ '{{cms:not_field:content}}',
19
+ '{not_a_tag}'
20
+ ].each do |tag_signature|
21
+ assert_nil CmsTag::FieldDateTime.initialize_tag(cms_pages(:default), tag_signature)
22
+ end
23
+ end
24
+
25
+ def test_content_and_render
26
+ tag = CmsTag::FieldDateTime.initialize_tag(cms_pages(:default), '{{cms:field:content:datetime}}')
27
+ assert tag.content.blank?
28
+ time = 2.days.ago
29
+ tag.content = time
30
+ assert_equal time, tag.content
31
+ assert_equal '', tag.render
32
+ end
33
+
34
+ end
@@ -0,0 +1,33 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class FieldIntegerTest < ActiveSupport::TestCase
4
+
5
+ def test_initialize_tag
6
+ assert tag = CmsTag::FieldInteger.initialize_tag(cms_pages(:default), '{{ cms:field:content:integer }}')
7
+ assert_equal 'content', tag.label
8
+ assert tag = CmsTag::FieldInteger.initialize_tag(cms_pages(:default), '{{cms:field:content:integer}}')
9
+ assert_equal 'content', tag.label
10
+ assert tag = CmsTag::FieldInteger.initialize_tag(cms_pages(:default), '{{cms:field:dash-content:integer}}')
11
+ assert_equal 'dash-content', tag.label
12
+ end
13
+
14
+ def test_initialize_tag_failure
15
+ [
16
+ '{{cms:field:content:not_integer}}',
17
+ '{{cms:field:content}}',
18
+ '{{cms:not_field:content}}',
19
+ '{not_a_tag}'
20
+ ].each do |tag_signature|
21
+ assert_nil CmsTag::FieldInteger.initialize_tag(cms_pages(:default), tag_signature)
22
+ end
23
+ end
24
+
25
+ def test_content_and_render
26
+ tag = CmsTag::FieldInteger.initialize_tag(cms_pages(:default), '{{cms:field:content:integer}}')
27
+ assert tag.content.blank?
28
+ tag.content = '5'
29
+ assert_equal '5', tag.content
30
+ assert_equal '', tag.render
31
+ end
32
+
33
+ end
@@ -0,0 +1,34 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class FieldStringTest < ActiveSupport::TestCase
4
+
5
+ def test_initialize_tag
6
+ assert tag = CmsTag::FieldString.initialize_tag(cms_pages(:default), '{{ cms:field:content:string }}')
7
+ assert_equal 'content', tag.label
8
+ assert tag = CmsTag::FieldString.initialize_tag(cms_pages(:default), '{{cms:field:content:string}}')
9
+ assert_equal 'content', tag.label
10
+ assert tag = CmsTag::FieldString.initialize_tag(cms_pages(:default), '{{cms:field:content}}')
11
+ assert_equal 'content', tag.label
12
+ assert tag = CmsTag::FieldString.initialize_tag(cms_pages(:default), '{{cms:field:dash-content}}')
13
+ assert_equal 'dash-content', tag.label
14
+ end
15
+
16
+ def test_initialize_tag_failure
17
+ [
18
+ '{{cms:field:content:not_string}}',
19
+ '{{cms:not_field:content}}',
20
+ '{not_a_tag}'
21
+ ].each do |tag_signature|
22
+ assert_nil CmsTag::FieldString.initialize_tag(cms_pages(:default), tag_signature)
23
+ end
24
+ end
25
+
26
+ def test_content_and_render
27
+ tag = CmsTag::FieldString.initialize_tag(cms_pages(:default), '{{cms:field:content}}')
28
+ assert tag.content.blank?
29
+ tag.content = 'test_content'
30
+ assert_equal 'test_content', tag.content
31
+ assert_equal '', tag.render
32
+ end
33
+
34
+ end
@@ -0,0 +1,32 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class FieldTextTest < ActiveSupport::TestCase
4
+
5
+ def test_initialize_tag
6
+ assert tag = CmsTag::FieldText.initialize_tag(cms_pages(:default), '{{ cms:field:content:text }}')
7
+ assert_equal 'content', tag.label
8
+ assert tag = CmsTag::FieldText.initialize_tag(cms_pages(:default), '{{cms:field:content:text}}')
9
+ assert_equal 'content', tag.label
10
+ assert tag = CmsTag::FieldText.initialize_tag(cms_pages(:default), '{{cms:field:dash-content:text}}')
11
+ assert_equal 'dash-content', tag.label
12
+ end
13
+
14
+ def test_initialize_tag_failure
15
+ [
16
+ '{{cms:field:content:not_text}}',
17
+ '{{cms:not_field:content:text}}',
18
+ '{not_a_tag}'
19
+ ].each do |tag_signature|
20
+ assert_nil CmsTag::FieldText.initialize_tag(cms_pages(:default), tag_signature)
21
+ end
22
+ end
23
+
24
+ def test_content_and_render
25
+ tag = CmsTag::FieldText.initialize_tag(cms_pages(:default), '{{cms:field:content:text}}')
26
+ assert tag.content.blank?
27
+ tag.content = 'test_content'
28
+ assert_equal 'test_content', tag.content
29
+ assert_equal '', tag.render
30
+ end
31
+
32
+ end
@@ -0,0 +1,38 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class HelperTest < ActiveSupport::TestCase
4
+
5
+ def test_initialize_tag
6
+ assert tag = CmsTag::Helper.initialize_tag(cms_pages(:default), '{{ cms:helper:method_name }}')
7
+ assert_equal 'method_name', tag.label
8
+ assert tag = CmsTag::Helper.initialize_tag(cms_pages(:default), '{{ cms:helper:method-name }}')
9
+ assert_equal 'method-name', tag.label
10
+ end
11
+
12
+ def test_initialize_tag_with_parameters
13
+ assert tag = CmsTag::Helper.initialize_tag(cms_pages(:default), '{{ cms:helper:method_name:param1:param2 }}')
14
+ assert tag.label = 'method_name'
15
+ assert tag.params = 'param1:param2'
16
+ end
17
+
18
+ def test_initialize_tag_failure
19
+ [
20
+ '{{cms:helper}}',
21
+ '{{cms:not_helper:method_name}}',
22
+ '{not_a_tag}'
23
+ ].each do |tag_signature|
24
+ assert_nil CmsTag::Helper.initialize_tag(cms_pages(:default), tag_signature)
25
+ end
26
+ end
27
+
28
+ def test_content_and_render
29
+ tag = CmsTag::Helper.initialize_tag(cms_pages(:default), '{{cms:helper:method_name}}')
30
+ assert_equal "<%= method_name() %>", tag.content
31
+ assert_equal "<%= method_name() %>", tag.render
32
+
33
+ tag = CmsTag::Helper.initialize_tag(cms_pages(:default), '{{cms:helper:method_name:param1:param2}}')
34
+ assert_equal "<%= method_name('param1', 'param2') %>", tag.content
35
+ assert_equal "<%= method_name('param1', 'param2') %>", tag.render
36
+ end
37
+
38
+ end
@@ -0,0 +1,34 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class PageDateTimeTest < ActiveSupport::TestCase
4
+
5
+ def test_initialize_tag
6
+ assert tag = CmsTag::PageDateTime.initialize_tag(cms_pages(:default), '{{ cms:page:content:datetime }}')
7
+ assert_equal 'content', tag.label
8
+ assert tag = CmsTag::PageDateTime.initialize_tag(cms_pages(:default), '{{cms:page:content:datetime}}')
9
+ assert_equal 'content', tag.label
10
+ assert tag = CmsTag::PageDateTime.initialize_tag(cms_pages(:default), '{{cms:page:dash-content:datetime}}')
11
+ assert_equal 'dash-content', tag.label
12
+ end
13
+
14
+ def test_initialize_tag_failure
15
+ [
16
+ '{{cms:page:content:not_datetime}}',
17
+ '{{cms:page:content}}',
18
+ '{{cms:not_page:content}}',
19
+ '{not_a_tag}'
20
+ ].each do |tag_signature|
21
+ assert_nil CmsTag::PageDateTime.initialize_tag(cms_pages(:default), tag_signature)
22
+ end
23
+ end
24
+
25
+ def test_content_and_render
26
+ tag = CmsTag::PageDateTime.initialize_tag(cms_pages(:default), '{{cms:page:content:datetime}}')
27
+ assert tag.content.blank?
28
+ time = 2.days.ago
29
+ tag.content = time
30
+ assert_equal time, tag.content
31
+ assert_equal time.to_s, tag.render
32
+ end
33
+
34
+ end
@@ -0,0 +1,33 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class PageIntegerTest < ActiveSupport::TestCase
4
+
5
+ def test_initialize_tag
6
+ assert tag = CmsTag::PageInteger.initialize_tag(cms_pages(:default), '{{ cms:page:content:integer }}')
7
+ assert_equal 'content', tag.label
8
+ assert tag = CmsTag::PageInteger.initialize_tag(cms_pages(:default), '{{cms:page:content:integer}}')
9
+ assert_equal 'content', tag.label
10
+ assert tag = CmsTag::PageInteger.initialize_tag(cms_pages(:default), '{{cms:page:dash-content:integer}}')
11
+ assert_equal 'dash-content', tag.label
12
+ end
13
+
14
+ def test_initialize_tag_failure
15
+ [
16
+ '{{cms:page:content:not_integer}}',
17
+ '{{cms:page:content}}',
18
+ '{{cms:not_page:content}}',
19
+ '{not_a_tag}'
20
+ ].each do |tag_signature|
21
+ assert_nil CmsTag::PageInteger.initialize_tag(cms_pages(:default), tag_signature)
22
+ end
23
+ end
24
+
25
+ def test_content_and_render
26
+ tag = CmsTag::PageInteger.initialize_tag(cms_pages(:default), '{{cms:page:content:integer}}')
27
+ assert tag.content.blank?
28
+ tag.content = '5'
29
+ assert_equal '5', tag.content
30
+ assert_equal '5', tag.render
31
+ end
32
+
33
+ end
@@ -0,0 +1,33 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class PageRichTextTest < ActiveSupport::TestCase
4
+
5
+ def test_initialize_tag
6
+ assert tag = CmsTag::PageRichText.initialize_tag(cms_pages(:default), '{{ cms:page:content:rich_text }}')
7
+ assert_equal 'content', tag.label
8
+ assert tag = CmsTag::PageRichText.initialize_tag(cms_pages(:default), '{{cms:page:content:rich_text}}')
9
+ assert_equal 'content', tag.label
10
+ assert tag = CmsTag::PageRichText.initialize_tag(cms_pages(:default), '{{cms:page:dash-content:rich_text}}')
11
+ assert_equal 'dash-content', tag.label
12
+ end
13
+
14
+ def test_initialize_tag_failure
15
+ [
16
+ '{{cms:page:content:not_rich_text}}',
17
+ '{{cms:page:content}}',
18
+ '{{cms:not_page:content}}',
19
+ '{not_a_tag}'
20
+ ].each do |tag_signature|
21
+ assert_nil CmsTag::PageRichText.initialize_tag(cms_pages(:default), tag_signature)
22
+ end
23
+ end
24
+
25
+ def test_content_and_render
26
+ tag = CmsTag::PageRichText.initialize_tag(cms_pages(:default), '{{cms:page:content:rich_text}}')
27
+ assert tag.content.blank?
28
+ tag.content = 'test_content'
29
+ assert_equal 'test_content', tag.content
30
+ assert_equal 'test_content', tag.render
31
+ end
32
+
33
+ end
@@ -0,0 +1,33 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class PageStringTest < ActiveSupport::TestCase
4
+
5
+ def test_initialize_tag
6
+ assert tag = CmsTag::PageString.initialize_tag(cms_pages(:default), '{{ cms:page:content:string }}')
7
+ assert_equal 'content', tag.label
8
+ assert tag = CmsTag::PageString.initialize_tag(cms_pages(:default), '{{cms:page:content:string}}')
9
+ assert_equal 'content', tag.label
10
+ assert tag = CmsTag::PageString.initialize_tag(cms_pages(:default), '{{cms:page:dash-content:string}}')
11
+ assert_equal 'dash-content', tag.label
12
+ end
13
+
14
+ def test_initialize_tag_failure
15
+ [
16
+ '{{cms:page:content:not_string}}',
17
+ '{{cms:page:content}}',
18
+ '{{cms:not_page:content}}',
19
+ '{not_a_tag}'
20
+ ].each do |tag_signature|
21
+ assert_nil CmsTag::PageString.initialize_tag(cms_pages(:default), tag_signature)
22
+ end
23
+ end
24
+
25
+ def test_content_and_render
26
+ tag = CmsTag::PageString.initialize_tag(cms_pages(:default), '{{cms:page:content:string}}')
27
+ assert tag.content.blank?
28
+ tag.content = 'test_content'
29
+ assert_equal 'test_content', tag.content
30
+ assert_equal 'test_content', tag.render
31
+ end
32
+
33
+ end
@@ -0,0 +1,34 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class PageTextTest < ActiveSupport::TestCase
4
+
5
+ def test_initialize_tag
6
+ assert tag = CmsTag::PageText.initialize_tag(cms_pages(:default), '{{ cms:page:content:text }}')
7
+ assert_equal 'content', tag.label
8
+ assert tag = CmsTag::PageText.initialize_tag(cms_pages(:default), '{{cms:page:content}}')
9
+ assert_equal 'content', tag.label
10
+ assert tag = CmsTag::PageText.initialize_tag(cms_pages(:default), '{{cms:page:content:text}}')
11
+ assert_equal 'content', tag.label
12
+ assert tag = CmsTag::PageText.initialize_tag(cms_pages(:default), '{{cms:page:dash-content}}')
13
+ assert_equal 'dash-content', tag.label
14
+ end
15
+
16
+ def test_initialize_tag_failure
17
+ [
18
+ '{{cms:page:content:not_text}}',
19
+ '{{cms:not_page:content}}',
20
+ '{not_a_tag}'
21
+ ].each do |tag_signature|
22
+ assert_nil CmsTag::PageText.initialize_tag(cms_pages(:default), tag_signature)
23
+ end
24
+ end
25
+
26
+ def test_content_and_render
27
+ tag = CmsTag::PageText.initialize_tag(cms_pages(:default), '{{cms:page:content}}')
28
+ assert tag.content.blank?
29
+ tag.content = 'test_content'
30
+ assert_equal 'test_content', tag.content
31
+ assert_equal 'test_content', tag.render
32
+ end
33
+
34
+ end
@@ -0,0 +1,44 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class PartialTest < ActiveSupport::TestCase
4
+
5
+ def test_initialize_tag
6
+ assert tag = CmsTag::Partial.initialize_tag(cms_pages(:default), '{{ cms:partial:partial_name }}')
7
+ assert_equal 'partial_name', tag.label
8
+ assert tag = CmsTag::Partial.initialize_tag(cms_pages(:default), '{{cms:partial:path/to/partial}}')
9
+ assert_equal 'path/to/partial', tag.label
10
+ assert tag = CmsTag::Partial.initialize_tag(cms_pages(:default), '{{cms:partial:path/to/dashed-partial}}')
11
+ assert_equal 'path/to/dashed-partial', tag.label
12
+ end
13
+
14
+ def test_initialize_tag_with_parameters
15
+ assert tag = CmsTag::Partial.initialize_tag(cms_pages(:default), '{{cms:partial:path/to/partial:param1:param2}}')
16
+ assert tag.label = 'path/to/partial'
17
+ assert tag.params = 'param1:param2'
18
+ end
19
+
20
+ def test_initialize_tag_failure
21
+ [
22
+ '{{cms:partial}}',
23
+ '{{cms:not_partial:label}}',
24
+ '{not_a_tag}'
25
+ ].each do |tag_signature|
26
+ assert_nil CmsTag::Partial.initialize_tag(cms_pages(:default), tag_signature)
27
+ end
28
+ end
29
+
30
+ def test_content_and_render
31
+ tag = CmsTag::Partial.initialize_tag(cms_pages(:default), '{{cms:partial:path/to/partial}}')
32
+ assert_equal "<%= render :partial => 'path/to/partial' %>", tag.content
33
+ assert_equal "<%= render :partial => 'path/to/partial' %>", tag.render
34
+
35
+ tag = CmsTag::Partial.initialize_tag(cms_pages(:default), '{{cms:partial:path/to/partial:param1}}')
36
+ assert_equal "<%= render :partial => 'path/to/partial', :locals => {:param_1 => 'param1'} %>", tag.content
37
+ assert_equal "<%= render :partial => 'path/to/partial', :locals => {:param_1 => 'param1'} %>", tag.render
38
+
39
+ tag = CmsTag::Partial.initialize_tag(cms_pages(:default), '{{cms:partial:path/to/partial:param1:param2}}')
40
+ assert_equal "<%= render :partial => 'path/to/partial', :locals => {:param_1 => 'param1', :param_2 => 'param2'} %>", tag.content
41
+ assert_equal "<%= render :partial => 'path/to/partial', :locals => {:param_1 => 'param1', :param_2 => 'param2'} %>", tag.render
42
+ end
43
+
44
+ end
@@ -0,0 +1,33 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class SnippetTest < ActiveSupport::TestCase
4
+
5
+ def test_initialize_tag
6
+ assert tag = CmsTag::Snippet.initialize_tag(cms_pages(:default), '{{ cms:snippet:label }}')
7
+ assert_equal 'label', tag.slug
8
+ assert tag = CmsTag::Snippet.initialize_tag(cms_pages(:default), '{{cms:snippet:label}}')
9
+ assert_equal 'label', tag.slug
10
+ assert tag = CmsTag::Snippet.initialize_tag(cms_pages(:default), '{{cms:snippet:dash-label}}')
11
+ assert_equal 'dash-label', tag.slug
12
+ end
13
+
14
+ def test_initialize_tag_failure
15
+ [
16
+ '{{cms:snippet}}',
17
+ '{{cms:not_snippet:label}}',
18
+ '{not_a_tag}'
19
+ ].each do |tag_signature|
20
+ assert_nil CmsTag::Snippet.initialize_tag(cms_pages(:default), tag_signature)
21
+ end
22
+ end
23
+
24
+ def test_content_and_render
25
+ tag = CmsTag::Snippet.initialize_tag(cms_pages(:default), '{{cms:snippet:default}}')
26
+ assert_equal 'default_snippet_content', tag.content
27
+ assert_equal 'default_snippet_content', tag.render
28
+
29
+ tag = CmsTag::Snippet.initialize_tag(cms_pages(:default), "{{cms:snippet:doesnot_exist}}")
30
+ assert_equal nil, tag.content
31
+ assert_equal '', tag.render
32
+ end
33
+ end
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ class CmsUploadDirTest < ActiveSupport::TestCase
4
+ # Replace this with your real tests.
5
+ test "the truth" do
6
+ assert true
7
+ end
8
+ end
@@ -0,0 +1,26 @@
1
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
2
+
3
+ class CmsUploadTest < ActiveSupport::TestCase
4
+
5
+ def test_validations
6
+ assert_no_difference 'CmsUpload.count' do
7
+ upload = CmsUpload.create
8
+ assert upload.errors.present?
9
+ assert_has_errors_on upload, [:file_file_name]
10
+ end
11
+ end
12
+
13
+ def test_create
14
+ assert_difference 'CmsUpload.count' do
15
+ cms_sites(:default).cms_uploads.create(
16
+ :file => fixture_file_upload('files/valid_image.jpg')
17
+ )
18
+ end
19
+ end
20
+
21
+ def test_create_failure
22
+ assert_no_difference 'CmsUpload.count' do
23
+ cms_sites(:default).cms_uploads.create(:file => '')
24
+ end
25
+ end
26
+ end