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,308 @@
1
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
2
+
3
+ class TagTest < ActiveSupport::TestCase
4
+
5
+ def test_tokenizer_regex
6
+ regex = ComfyPress::Tag::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(ComfyPress::Tag::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.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.tags.size
84
+ assert_equal 'field_text_default_field_text', page.tags[0].id
85
+ assert_equal 'page_text_default_page_text', page.tags[1].id
86
+ assert_equal 'snippet_default', page.tags[2].id
87
+ assert_equal page.tags[1], page.tags[2].parent
88
+ assert_equal 'snippet_default', page.tags[3].id
89
+ end
90
+
91
+ def test_content_for_new_page
92
+ page = Cms::Page.new
93
+ assert page.blocks.blank?
94
+ assert page.tags.blank?
95
+ assert_equal '', page.content
96
+ assert page.tags.blank?
97
+ end
98
+
99
+ def test_content_for_new_page_with_layout
100
+ page = cms_sites(:default).pages.new(:layout => cms_layouts(:default))
101
+ assert page.blocks.blank?
102
+ assert page.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.tags.size
113
+ assert_equal 'field_text_default_field_text', page.tags[0].id
114
+ assert_equal 'page_text_default_page_text', page.tags[1].id
115
+ assert_equal 'snippet_default', page.tags[2].id
116
+ end
117
+
118
+ def test_content_for_new_page_with_initilized_cms_blocks
119
+ page = cms_sites(:default).pages.new(:layout => cms_layouts(:default))
120
+ assert page.blocks.blank?
121
+ assert page.tags.blank?
122
+ page.blocks_attributes = [
123
+ { :identifier => 'default_field_text',
124
+ :content => 'new_default_field_content'
125
+ },
126
+ { :identifier => 'default_page_text',
127
+ :content => "new_default_page_text_content\n{{cms:snippet:default}}"
128
+ },
129
+ { :identifier => 'bogus_field_that_never_will_get_rendered',
130
+ :content => 'some_content_that_doesnot_matter'
131
+ }
132
+ ]
133
+ assert_equal 3, page.blocks.size
134
+
135
+ assert_equal rendered_content_formatter(
136
+ '
137
+ layout_content_a
138
+ new_default_page_text_content
139
+ default_snippet_content
140
+ layout_content_b
141
+ default_snippet_content
142
+ layout_content_c'
143
+ ), page.content
144
+
145
+ assert_equal 4, page.tags.size
146
+ assert_equal 'field_text_default_field_text', page.tags[0].id
147
+ assert_equal 'page_text_default_page_text', page.tags[1].id
148
+ assert_equal 'snippet_default', page.tags[2].id
149
+ assert_equal page.tags[1], page.tags[2].parent
150
+ assert_equal 'snippet_default', page.tags[3].id
151
+ end
152
+
153
+ def test_content_with_repeated_tags
154
+ page = cms_pages(:default)
155
+ page.layout.content << "\n{{cms:page:default_page_text:text}}"
156
+ page.layout.save!
157
+
158
+ assert_equal rendered_content_formatter(
159
+ '
160
+ layout_content_a
161
+ default_page_text_content_a
162
+ default_snippet_content
163
+ default_page_text_content_b
164
+ layout_content_b
165
+ default_snippet_content
166
+ layout_content_c
167
+ default_page_text_content_a
168
+ default_snippet_content
169
+ default_page_text_content_b'
170
+ ), page.content(true)
171
+
172
+ assert_equal 6, page.tags.size
173
+ assert_equal 'field_text_default_field_text', page.tags[0].id
174
+ assert_equal 'page_text_default_page_text', page.tags[1].id
175
+ assert_equal 'snippet_default', page.tags[2].id
176
+ assert_equal page.tags[1], page.tags[2].parent
177
+ assert_equal 'snippet_default', page.tags[3].id
178
+ assert_equal 'page_text_default_page_text', page.tags[4].id
179
+ assert_equal 'snippet_default', page.tags[5].id
180
+ assert_equal page.tags[4], page.tags[5].parent
181
+ end
182
+
183
+ def test_content_with_cyclical_tags
184
+ page = cms_pages(:default)
185
+ snippet = cms_snippets(:default)
186
+ snippet.update_attributes(:content => "infinite {{cms:page:default}} loop")
187
+ assert_equal rendered_content_formatter(
188
+ '
189
+ layout_content_a
190
+ default_page_text_content_a
191
+ infinite loop
192
+ default_page_text_content_b
193
+ layout_content_b
194
+ infinite loop
195
+ layout_content_c'
196
+ ), page.content(true)
197
+ assert_equal 6, page.tags.size
198
+ end
199
+
200
+ def test_is_cms_block?
201
+ tag = ComfyPress::Tag::PageText.initialize_tag(
202
+ cms_pages(:default), '{{ cms:page:content:text }}'
203
+ )
204
+ assert tag.is_cms_block?
205
+
206
+ tag = ComfyPress::Tag::FieldText.initialize_tag(
207
+ cms_pages(:default), '{{ cms:field:content:text }}'
208
+ )
209
+ assert tag.is_cms_block?
210
+
211
+ tag = ComfyPress::Tag::Snippet.initialize_tag(
212
+ cms_pages(:default), '{{ cms:snippet:label }}'
213
+ )
214
+ assert !tag.is_cms_block?
215
+
216
+ tag = ComfyPress::Tag::File.initialize_tag(
217
+ cms_pages(:default), '{{ cms:file:sample.jpg }}'
218
+ )
219
+ assert !tag.is_cms_block?
220
+ end
221
+
222
+ def test_content_with_irb_disabled
223
+ assert_equal false, ComfyPress.config.allow_irb
224
+
225
+ site = cms_sites(:default)
226
+ layout = site.layouts.create!(
227
+ :identifier => 'no-irb-layout',
228
+ :content => '<% 1 + 1 %> {{cms:page:content}} {{cms:collection:snippet:cms/snippet}} <%= 1 + 1 %>'
229
+ )
230
+ snippet = site.snippets.create!(
231
+ :identifier => 'no-irb-snippet',
232
+ :content => '<% 2 + 2 %> snippet <%= 2 + 2 %>'
233
+ )
234
+ page = site.pages.create!(
235
+ :slug => 'no-irb-page',
236
+ :parent_id => cms_pages(:default).id,
237
+ :layout_id => layout.id,
238
+ :blocks_attributes => [
239
+ { :identifier => 'content',
240
+ :content => 'text {{ cms:snippet:no-irb-snippet }} {{ cms:partial:path/to }} {{ cms:helper:method }} text' },
241
+ { :identifier => 'snippet',
242
+ :content => snippet.id }
243
+ ]
244
+ )
245
+ assert_equal "&lt;% 1 + 1 %&gt; text &lt;% 2 + 2 %&gt; snippet &lt;%= 2 + 2 %&gt; <%= render :partial => 'path/to' %> <%= method() %> text <%= render :partial => 'partials/cms/snippets', :locals => {:model => 'Cms::Snippet', :identifier => '#{snippet.id}'} %> &lt;%= 1 + 1 %&gt;", page.content
246
+ end
247
+
248
+ def test_content_with_irb_enabled
249
+ ComfyPress.config.allow_irb = true
250
+
251
+ site = cms_sites(:default)
252
+ layout = site.layouts.create!(
253
+ :identifier => 'irb-layout',
254
+ :content => '<% 1 + 1 %> {{cms:page:content}} {{cms:collection:snippet:cms/snippet}} <%= 1 + 1 %>'
255
+ )
256
+ snippet = site.snippets.create!(
257
+ :identifier => 'irb-snippet',
258
+ :content => '<% 2 + 2 %> snippet <%= 2 + 2 %>'
259
+ )
260
+ page = site.pages.create!(
261
+ :slug => 'irb-page',
262
+ :parent_id => cms_pages(:default).id,
263
+ :layout_id => layout.id,
264
+ :blocks_attributes => [
265
+ { :identifier => 'content',
266
+ :content => 'text {{ cms:snippet:irb-snippet }} {{ cms:partial:path/to }} {{ cms:helper:method }} text' },
267
+ { :identifier => 'snippet',
268
+ :content => snippet.id }
269
+ ]
270
+ )
271
+ assert_equal "<% 1 + 1 %> text <% 2 + 2 %> snippet <%= 2 + 2 %> <%= render :partial => 'path/to' %> <%= method() %> text <%= render :partial => 'partials/cms/snippets', :locals => {:model => 'Cms::Snippet', :identifier => '#{snippet.id}'} %> <%= 1 + 1 %>", page.content
272
+ end
273
+
274
+ def test_escaping_of_parameters
275
+ tag = ComfyPress::Tag::Helper.initialize_tag(
276
+ cms_pages(:default), '{{cms:helper:h:"\'+User.first.inspect+\'"}}'
277
+ )
278
+ assert_equal %{<%= h('\\'+User.first.inspect+\\'') %>}, tag.content
279
+ assert_equal %{<%= h('\\'+User.first.inspect+\\'') %>}, tag.render
280
+ end
281
+
282
+ def test_tag_initialization_with_namespace
283
+ assert tag = ComfyPress::Tag::PageString.initialize_tag(
284
+ cms_pages(:default), '{{ cms:page:content:string }}'
285
+ )
286
+ assert_equal 'content', tag.identifier
287
+ assert_equal nil, tag.namespace
288
+
289
+ assert tag = ComfyPress::Tag::PageString.initialize_tag(
290
+ cms_pages(:default), '{{ cms:page:home.content:string }}'
291
+ )
292
+ assert_equal 'home.content', tag.identifier
293
+ assert_equal 'home', tag.namespace
294
+
295
+ assert tag = ComfyPress::Tag::PageString.initialize_tag(
296
+ cms_pages(:default), '{{ cms:page:home.main.content:string }}'
297
+ )
298
+ assert_equal 'home.main.content', tag.identifier
299
+ assert_equal 'home.main', tag.namespace
300
+
301
+ assert tag = ComfyPress::Tag::PageString.initialize_tag(
302
+ cms_pages(:default), '{{ cms:page:ho-me.ma-in.con-tent:string }}'
303
+ )
304
+ assert_equal 'ho-me.ma-in.con-tent', tag.identifier
305
+ assert_equal 'ho-me.ma-in', tag.namespace
306
+ end
307
+
308
+ end
@@ -0,0 +1,56 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class AssetTagTest < ActiveSupport::TestCase
4
+
5
+ def test_initialize_tag
6
+ assert tag = ComfyPress::Tag::Asset.initialize_tag(
7
+ cms_pages(:default), '{{ cms:asset:default:css:html_tag }}'
8
+ )
9
+ assert_equal 'default', tag.identifier
10
+ assert_equal ['css', 'html_tag'], tag.params
11
+ end
12
+
13
+ def test_initialize_tag_failure
14
+ [
15
+ '{{cms:asset}}',
16
+ '{{cms:not_asset:method_name}}',
17
+ '{not_a_tag}'
18
+ ].each do |tag_signature|
19
+ assert_nil ComfyPress::Tag::Asset.initialize_tag(
20
+ cms_pages(:default), tag_signature
21
+ )
22
+ end
23
+ end
24
+
25
+ def test_render_no_params
26
+ tag = ComfyPress::Tag::Asset.initialize_tag(
27
+ cms_pages(:default), '{{ cms:asset:default }}'
28
+ )
29
+ assert_equal '', tag.render
30
+ end
31
+
32
+ def test_render_for_css
33
+ tag = ComfyPress::Tag::Asset.initialize_tag(
34
+ cms_pages(:default), '{{ cms:asset:default:css }}'
35
+ )
36
+ assert_equal "/cms-css/#{cms_sites(:default).id}/default.css", tag.render
37
+
38
+ tag = ComfyPress::Tag::Asset.initialize_tag(
39
+ cms_pages(:default), '{{ cms:asset:default:css:html_tag }}'
40
+ )
41
+ assert_equal "<link href='/cms-css/#{cms_sites(:default).id}/default.css' media='screen' rel='stylesheet' type='text/css' />", tag.render
42
+ end
43
+
44
+ def test_render_for_js
45
+ tag = ComfyPress::Tag::Asset.initialize_tag(
46
+ cms_pages(:default), '{{ cms:asset:default:js }}'
47
+ )
48
+ assert_equal "/cms-js/#{cms_sites(:default).id}/default.js", tag.render
49
+
50
+ tag = ComfyPress::Tag::Asset.initialize_tag(
51
+ cms_pages(:default), '{{ cms:asset:default:js:html_tag }}'
52
+ )
53
+ assert_equal "<script src='/cms-js/#{cms_sites(:default).id}/default.js' type='text/javascript'></script>", tag.render
54
+ end
55
+
56
+ end
@@ -0,0 +1,116 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class CollectionTagTest < ActiveSupport::TestCase
4
+
5
+ module TestCollectionScope
6
+ def self.included(base)
7
+ base.scope :cms_collection, lambda{|*args| base.where(:identifier => args.first) if args.first }
8
+ end
9
+ end
10
+ Cms::Snippet.send(:include, TestCollectionScope)
11
+
12
+ def test_initialize_tag
13
+ assert tag = ComfyPress::Tag::Collection.initialize_tag(
14
+ cms_pages(:default), '{{ cms:collection:snippet:cms/snippet }}'
15
+ )
16
+ assert_equal 'snippet', tag.identifier
17
+ assert_nil tag.namespace
18
+ assert_equal 'Cms::Snippet', tag.collection_class
19
+ assert_equal 'partials/cms/snippets', tag.collection_partial
20
+ assert_equal 'label', tag.collection_title
21
+ assert_equal 'id', tag.collection_identifier
22
+ assert_equal [], tag.collection_params
23
+
24
+ assert tag = ComfyPress::Tag::Collection.initialize_tag(
25
+ cms_pages(:default), '{{ cms:collection:namespace.snippet:cms/snippet }}'
26
+ )
27
+ assert_equal 'namespace.snippet', tag.identifier
28
+ assert_equal 'namespace', tag.namespace
29
+ end
30
+
31
+ def test_initialize_tag_detailed
32
+ assert tag = ComfyPress::Tag::Collection.initialize_tag(
33
+ cms_pages(:default),
34
+ '{{ cms:collection:snippet:cms/snippet:path/to/partial:title:identifier:param_a:param_b }}'
35
+ )
36
+ assert_equal 'snippet', tag.identifier
37
+ assert_equal 'Cms::Snippet', tag.collection_class
38
+ assert_equal 'path/to/partial', tag.collection_partial
39
+ assert_equal 'title', tag.collection_title
40
+ assert_equal 'identifier', tag.collection_identifier
41
+ assert_equal ['param_a', 'param_b'], tag.collection_params
42
+ end
43
+
44
+ def test_initialize_tag_failure
45
+ [
46
+ '{{cms:collection}}',
47
+ '{{cms:collection:label}}',
48
+ '{{cms:not_collection:label:class:partial}}',
49
+ '{not_a_tag}'
50
+ ].each do |tag_signature|
51
+ assert_nil ComfyPress::Tag::Collection.initialize_tag(
52
+ cms_pages(:default), tag_signature
53
+ )
54
+ end
55
+ end
56
+
57
+ def test_collection_objects
58
+ assert tag = ComfyPress::Tag::Collection.initialize_tag(
59
+ cms_pages(:default), '{{ cms:collection:snippet:cms/snippet }}'
60
+ )
61
+ assert snippets = tag.collection_objects
62
+ assert_equal 1, snippets.count
63
+ assert snippets.first.is_a?(Cms::Snippet)
64
+ end
65
+
66
+ def test_collection_objects_with_scope
67
+ assert tag = ComfyPress::Tag::Collection.initialize_tag(
68
+ cms_pages(:default),
69
+ "{{ cms:collection:snippet:cms/snippet:path/to/partial:label:identifier:#{cms_snippets(:default).identifier} }}"
70
+ )
71
+ assert snippets = tag.collection_objects
72
+ assert_equal 1, snippets.count
73
+ assert snippets.first.is_a?(Cms::Snippet)
74
+
75
+ assert tag = ComfyPress::Tag::Collection.initialize_tag(
76
+ cms_pages(:default), "{{ cms:collection:snippet:cms/snippet:path/to/partial:label:slug:invalid }}"
77
+ )
78
+ assert snippets = tag.collection_objects
79
+ assert_equal 0, snippets.count
80
+ end
81
+
82
+ def test_content_and_render
83
+ assert tag = ComfyPress::Tag::Collection.initialize_tag(
84
+ cms_pages(:default), '{{ cms:collection:snippet:cms/snippet }}'
85
+ )
86
+ assert tag.block.content.blank?
87
+
88
+ snippet = cms_snippets(:default)
89
+ tag.block.content = snippet.id
90
+ assert_equal snippet.id, tag.block.content
91
+ assert_equal snippet.id, tag.content
92
+ assert_equal "<%= render :partial => 'partials/cms/snippets', :locals => {:model => 'Cms::Snippet', :identifier => '#{snippet.id}'} %>", tag.render
93
+ end
94
+
95
+ def test_content_and_render_detailed
96
+ assert tag = ComfyPress::Tag::Collection.initialize_tag(
97
+ cms_pages(:default), '{{ cms:collection:snippet:cms/snippet:path/to/partial:label:slug:param_a:param_b }}'
98
+ )
99
+ assert tag.block.content.blank?
100
+
101
+ snippet = cms_snippets(:default)
102
+ tag.block.content = snippet.identifier
103
+ assert_equal snippet.identifier, tag.block.content
104
+ assert_equal snippet.identifier, tag.content
105
+ assert_equal "<%= render :partial => 'path/to/partial', :locals => {:model => 'Cms::Snippet', :identifier => '#{snippet.identifier}', :param_1 => 'param_a', :param_2 => 'param_b'} %>", tag.render
106
+ end
107
+
108
+ def test_content_and_render_with_no_content
109
+ assert tag = ComfyPress::Tag::Collection.initialize_tag(
110
+ cms_pages(:default), '{{ cms:collection:snippet:cms/snippet:path/to/partial }}'
111
+ )
112
+ assert tag.block.content.blank?
113
+ assert_equal '', tag.render
114
+ end
115
+
116
+ end
@@ -0,0 +1,50 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class FieldDateTimeTagTest < ActiveSupport::TestCase
4
+
5
+ def test_initialize_tag
6
+ assert tag = ComfyPress::Tag::FieldDateTime.initialize_tag(
7
+ cms_pages(:default), '{{ cms:field:content:datetime }}'
8
+ )
9
+ assert_equal 'content', tag.identifier
10
+ assert_nil tag.namespace
11
+ assert tag = ComfyPress::Tag::FieldDateTime.initialize_tag(
12
+ cms_pages(:default), '{{cms:field:content:datetime}}'
13
+ )
14
+ assert_equal 'content', tag.identifier
15
+ assert tag = ComfyPress::Tag::FieldDateTime.initialize_tag(
16
+ cms_pages(:default), '{{cms:field:dash-content:datetime}}'
17
+ )
18
+ assert_equal 'dash-content', tag.identifier
19
+ assert tag = ComfyPress::Tag::FieldDateTime.initialize_tag(
20
+ cms_pages(:default), '{{cms:field:namespace.content:datetime}}'
21
+ )
22
+ assert_equal 'namespace.content', tag.identifier
23
+ assert_equal 'namespace', tag.namespace
24
+ end
25
+
26
+ def test_initialize_tag_failure
27
+ [
28
+ '{{cms:field:content:not_datetime}}',
29
+ '{{cms:field:content}}',
30
+ '{{cms:not_field:content}}',
31
+ '{not_a_tag}'
32
+ ].each do |tag_signature|
33
+ assert_nil ComfyPress::Tag::FieldDateTime.initialize_tag(
34
+ cms_pages(:default), tag_signature
35
+ )
36
+ end
37
+ end
38
+
39
+ def test_content_and_render
40
+ tag = ComfyPress::Tag::FieldDateTime.initialize_tag(
41
+ cms_pages(:default), '{{cms:field:content:datetime}}'
42
+ )
43
+ assert tag.block.content.blank?
44
+ time = 2.days.ago
45
+ tag.block.content = time
46
+ assert_equal time, tag.content
47
+ assert_equal '', tag.render
48
+ end
49
+
50
+ end
@@ -0,0 +1,49 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class FieldIntegerTagTest < ActiveSupport::TestCase
4
+
5
+ def test_initialize_tag
6
+ assert tag = ComfyPress::Tag::FieldInteger.initialize_tag(
7
+ cms_pages(:default), '{{ cms:field:content:integer }}'
8
+ )
9
+ assert_equal 'content', tag.identifier
10
+ assert_nil tag.namespace
11
+ assert tag = ComfyPress::Tag::FieldInteger.initialize_tag(
12
+ cms_pages(:default), '{{cms:field:content:integer}}'
13
+ )
14
+ assert_equal 'content', tag.identifier
15
+ assert tag = ComfyPress::Tag::FieldInteger.initialize_tag(
16
+ cms_pages(:default), '{{cms:field:dash-content:integer}}'
17
+ )
18
+ assert_equal 'dash-content', tag.identifier
19
+ assert tag = ComfyPress::Tag::FieldInteger.initialize_tag(
20
+ cms_pages(:default), '{{cms:field:namespace.content:integer}}'
21
+ )
22
+ assert_equal 'namespace.content', tag.identifier
23
+ assert_equal 'namespace', tag.namespace
24
+ end
25
+
26
+ def test_initialize_tag_failure
27
+ [
28
+ '{{cms:field:content:not_integer}}',
29
+ '{{cms:field:content}}',
30
+ '{{cms:not_field:content}}',
31
+ '{not_a_tag}'
32
+ ].each do |tag_signature|
33
+ assert_nil ComfyPress::Tag::FieldInteger.initialize_tag(
34
+ cms_pages(:default), tag_signature
35
+ )
36
+ end
37
+ end
38
+
39
+ def test_content_and_render
40
+ tag = ComfyPress::Tag::FieldInteger.initialize_tag(
41
+ cms_pages(:default), '{{cms:field:content:integer}}'
42
+ )
43
+ assert tag.block.content.blank?
44
+ tag.block.content = '5'
45
+ assert_equal '5', tag.content
46
+ assert_equal '', tag.render
47
+ end
48
+
49
+ end
@@ -0,0 +1,49 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class FieldRichTextTagTest < ActiveSupport::TestCase
4
+
5
+ def test_initialize_tag
6
+ assert tag = ComfyPress::Tag::FieldRichText.initialize_tag(
7
+ cms_pages(:default), '{{ cms:field:content:rich_text }}'
8
+ )
9
+ assert_equal 'content', tag.identifier
10
+ assert_nil tag.namespace
11
+ assert tag = ComfyPress::Tag::FieldRichText.initialize_tag(
12
+ cms_pages(:default), '{{cms:field:content:rich_text}}'
13
+ )
14
+ assert_equal 'content', tag.identifier
15
+ assert tag = ComfyPress::Tag::FieldRichText.initialize_tag(
16
+ cms_pages(:default), '{{cms:field:dash-content:rich_text}}'
17
+ )
18
+ assert_equal 'dash-content', tag.identifier
19
+ assert tag = ComfyPress::Tag::FieldRichText.initialize_tag(
20
+ cms_pages(:default), '{{cms:field:namespace.content:rich_text}}'
21
+ )
22
+ assert_equal 'namespace.content', tag.identifier
23
+ assert_equal 'namespace', tag.namespace
24
+ end
25
+
26
+ def test_initialize_tag_failure
27
+ [
28
+ '{{cms:field:content:not_rich_text}}',
29
+ '{{cms:field:content}}',
30
+ '{{cms:not_page:content}}',
31
+ '{not_a_tag}'
32
+ ].each do |tag_signature|
33
+ assert_nil ComfyPress::Tag::FieldRichText.initialize_tag(
34
+ cms_pages(:default), tag_signature
35
+ )
36
+ end
37
+ end
38
+
39
+ def test_content_and_render
40
+ tag = ComfyPress::Tag::FieldRichText.initialize_tag(
41
+ cms_pages(:default), '{{cms:field:content:rich_text}}'
42
+ )
43
+ assert tag.block.content.blank?
44
+ tag.block.content = 'test_content'
45
+ assert_equal 'test_content', tag.content
46
+ assert_equal '', tag.render
47
+ end
48
+
49
+ end
@@ -0,0 +1,52 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class FieldStringTagTest < ActiveSupport::TestCase
4
+
5
+ def test_initialize_tag
6
+ assert tag = ComfyPress::Tag::FieldString.initialize_tag(
7
+ cms_pages(:default), '{{ cms:field:content:string }}'
8
+ )
9
+ assert_equal 'content', tag.identifier
10
+ assert_nil tag.namespace
11
+ assert tag = ComfyPress::Tag::FieldString.initialize_tag(
12
+ cms_pages(:default), '{{cms:field:content:string}}'
13
+ )
14
+ assert_equal 'content', tag.identifier
15
+ assert tag = ComfyPress::Tag::FieldString.initialize_tag(
16
+ cms_pages(:default), '{{cms:field:content}}'
17
+ )
18
+ assert_equal 'content', tag.identifier
19
+ assert tag = ComfyPress::Tag::FieldString.initialize_tag(
20
+ cms_pages(:default), '{{cms:field:dash-content}}'
21
+ )
22
+ assert_equal 'dash-content', tag.identifier
23
+ assert tag = ComfyPress::Tag::FieldString.initialize_tag(
24
+ cms_pages(:default), '{{cms:field:namespace.content}}'
25
+ )
26
+ assert_equal 'namespace.content', tag.identifier
27
+ assert_equal 'namespace', tag.namespace
28
+ end
29
+
30
+ def test_initialize_tag_failure
31
+ [
32
+ '{{cms:field:content:not_string}}',
33
+ '{{cms:not_field:content}}',
34
+ '{not_a_tag}'
35
+ ].each do |tag_signature|
36
+ assert_nil ComfyPress::Tag::FieldString.initialize_tag(
37
+ cms_pages(:default), tag_signature
38
+ )
39
+ end
40
+ end
41
+
42
+ def test_content_and_render
43
+ tag = ComfyPress::Tag::FieldString.initialize_tag(
44
+ cms_pages(:default), '{{cms:field:content}}'
45
+ )
46
+ assert tag.block.content.blank?
47
+ tag.block.content = 'test_content'
48
+ assert_equal 'test_content', tag.content
49
+ assert_equal '', tag.render
50
+ end
51
+
52
+ end