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,450 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class CmsAdmin::PagesControllerTest < ActionController::TestCase
4
+
5
+ def test_get_index
6
+ get :index, :site_id => cms_sites(:default)
7
+ assert_response :success
8
+ assert assigns(:pages)
9
+ assert_template :index
10
+ end
11
+
12
+ def test_get_index_with_no_pages
13
+ Cms::Page.delete_all
14
+ get :index, :site_id => cms_sites(:default)
15
+ assert_response :redirect
16
+ assert_redirected_to :action => :new
17
+ end
18
+
19
+ def test_get_index_with_category
20
+ category = cms_sites(:default).categories.create!(:label => 'Test Category', :categorized_type => 'Cms::Page')
21
+ category.categorizations.create!(:categorized => cms_pages(:child))
22
+
23
+ get :index, :site_id => cms_sites(:default), :category => category.label
24
+ assert_response :success
25
+ assert assigns(:pages)
26
+ assert_equal 1, assigns(:pages).count
27
+ assert assigns(:pages).first.categories.member? category
28
+ end
29
+
30
+ def test_get_index_with_category_invalid
31
+ get :index, :site_id => cms_sites(:default), :category => 'invalid'
32
+ assert_response :success
33
+ assert assigns(:pages)
34
+ assert_equal 0, assigns(:pages).count
35
+ end
36
+
37
+ def test_get_new
38
+ site = cms_sites(:default)
39
+ get :new, :site_id => site
40
+ assert_response :success
41
+ assert assigns(:page)
42
+ assert_equal cms_layouts(:default), assigns(:page).layout
43
+ assert_template :new
44
+ assert_select "form[action=/cms-admin/sites/#{site.id}/pages]"
45
+ assert_select "select[data-url=/cms-admin/sites/#{site.id}/pages/0/form_blocks]"
46
+ assert_select "form[action='/cms-admin/sites/#{site.id}/files?ajax=true']"
47
+ end
48
+
49
+ def test_get_new_with_field_datetime
50
+ cms_layouts(:default).update_column(:content, '{{cms:field:test_label:datetime}}')
51
+ get :new, :site_id => cms_sites(:default)
52
+ assert_response :success
53
+ assert_select "input[type='text'][name='page[blocks_attributes][0][content]'][data-datetime]"
54
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][identifier]'][value='test_label']"
55
+ end
56
+
57
+ def test_get_new_with_field_integer
58
+ cms_layouts(:default).update_column(:content, '{{cms:field:test_label:integer}}')
59
+ get :new, :site_id => cms_sites(:default)
60
+ assert_response :success
61
+ assert_select "input[type='number'][name='page[blocks_attributes][0][content]']"
62
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][identifier]'][value='test_label']"
63
+ end
64
+
65
+ def test_get_new_with_field_string
66
+ cms_layouts(:default).update_column(:content, '{{cms:field:test_label:string}}')
67
+ get :new, :site_id => cms_sites(:default)
68
+ assert_response :success
69
+ assert_select "input[type='text'][name='page[blocks_attributes][0][content]']"
70
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][identifier]'][value='test_label']"
71
+ end
72
+
73
+ def test_get_new_with_field_text
74
+ cms_layouts(:default).update_column(:content, '{{cms:field:test_label:text}}')
75
+ get :new, :site_id => cms_sites(:default)
76
+ assert_response :success
77
+ assert_select "textarea[name='page[blocks_attributes][0][content]'][data-cm-mode='text/html']"
78
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][identifier]'][value='test_label']"
79
+ end
80
+
81
+ def test_get_new_with_field_rich_text
82
+ cms_layouts(:default).update_column(:content, '{{cms:field:test_label:rich_text}}')
83
+ get :new, :site_id => cms_sites(:default)
84
+ assert_response :success
85
+ assert_select "textarea[name='page[blocks_attributes][0][content]'][data-rich-text]"
86
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][identifier]'][value='test_label']"
87
+ end
88
+
89
+ def test_get_new_with_page_datetime
90
+ cms_layouts(:default).update_column(:content, '{{cms:page:test_label:datetime}}')
91
+ get :new, :site_id => cms_sites(:default)
92
+ assert_response :success
93
+ assert_select "input[type='text'][name='page[blocks_attributes][0][content]'][data-datetime]"
94
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][identifier]'][value='test_label']"
95
+ end
96
+
97
+ def test_get_new_with_page_integer
98
+ cms_layouts(:default).update_column(:content, '{{cms:page:test_label:integer}}')
99
+ get :new, :site_id => cms_sites(:default)
100
+ assert_response :success
101
+ assert_select "input[type='number'][name='page[blocks_attributes][0][content]']"
102
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][identifier]'][value='test_label']"
103
+ end
104
+
105
+ def test_get_new_with_page_string
106
+ cms_layouts(:default).update_column(:content, '{{cms:page:test_label:string}}')
107
+ get :new, :site_id => cms_sites(:default)
108
+ assert_response :success
109
+ assert_select "input[type='text'][name='page[blocks_attributes][0][content]']"
110
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][identifier]'][value='test_label']"
111
+ end
112
+
113
+ def test_get_new_with_page_text
114
+ cms_layouts(:default).update_column(:content, '{{cms:page:test_label}}')
115
+ get :new, :site_id => cms_sites(:default)
116
+ assert_response :success
117
+ assert_select "textarea[name='page[blocks_attributes][0][content]'][data-cm-mode=text/html]"
118
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][identifier]'][value='test_label']"
119
+ end
120
+
121
+ def test_get_new_with_page_file
122
+ cms_layouts(:default).update_column(:content, '{{cms:page_file:test_label}}')
123
+ get :new, :site_id => cms_sites(:default)
124
+ assert_response :success
125
+ assert_select "input[type='file'][name='page[blocks_attributes][0][content]']"
126
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][identifier]'][value='test_label']"
127
+ end
128
+
129
+ def test_get_new_with_page_files
130
+ cms_layouts(:default).update_column(:content, '{{cms:page_files:test_label}}')
131
+ get :new, :site_id => cms_sites(:default)
132
+ assert_response :success
133
+ assert_select "input[type='file'][name='page[blocks_attributes][0][content][]'][multiple=multiple]"
134
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][identifier]'][value='test_label']"
135
+ end
136
+
137
+ def test_get_new_with_collection
138
+ snippet = cms_snippets(:default)
139
+ cms_layouts(:default).update_column(:content, '{{cms:collection:snippet:cms/snippet}}')
140
+ get :new, :site_id => cms_sites(:default)
141
+ assert_response :success
142
+ assert_select "select[name='page[blocks_attributes][0][content]']" do
143
+ assert_select "option[value='']", :html => '---- Select Cms/Snippet ----'
144
+ assert_select "option[value='#{snippet.id}']", :html => snippet.label
145
+ end
146
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][identifier]'][value='snippet']"
147
+ end
148
+
149
+ def test_get_new_with_page_rich_text
150
+ cms_layouts(:default).update_column(:content, '{{cms:page:test_label:rich_text}}')
151
+ get :new, :site_id => cms_sites(:default)
152
+ assert_response :success
153
+ assert_select "textarea[name='page[blocks_attributes][0][content]'][data-rich-text]"
154
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][identifier]'][value='test_label']"
155
+ end
156
+
157
+ def test_get_new_with_page_markdown
158
+ cms_layouts(:default).update_column(:content, '{{cms:page:test_label:markdown}}')
159
+ get :new, :site_id => cms_sites(:default)
160
+ assert_response :success
161
+ assert_select "textarea[name='page[blocks_attributes][0][content]'][data-cm-mode=text/x-markdown]"
162
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][identifier]'][value='test_label']"
163
+ end
164
+
165
+ def test_get_new_with_several_tag_fields
166
+ cms_layouts(:default).update_column(:content, '{{cms:page:label_a}}{{cms:page:label_b}}')
167
+ get :new, :site_id => cms_sites(:default)
168
+ assert_response :success
169
+ assert_select "textarea[name='page[blocks_attributes][0][content]']"
170
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][identifier]'][value='label_a']"
171
+ assert_select "textarea[name='page[blocks_attributes][1][content]']"
172
+ assert_select "input[type='hidden'][name='page[blocks_attributes][1][identifier]'][value='label_b']"
173
+ end
174
+
175
+ def test_get_new_with_crashy_tag
176
+ cms_layouts(:default).update_column(:content, '{{cms:collection:label:invalid}}')
177
+ get :new, :site_id => cms_sites(:default)
178
+ assert_response :success
179
+ end
180
+
181
+ def test_get_new_with_repeated_tag
182
+ cms_layouts(:default).update_column(:content, '{{cms:page:test_label}}{{cms:page:test_label}}')
183
+ get :new, :site_id => cms_sites(:default)
184
+ assert_response :success
185
+ assert_select "textarea[name='page[blocks_attributes][0][content]']"
186
+ assert_select "input[type='hidden'][name='page[blocks_attributes][0][identifier]'][value='test_label']"
187
+ assert_select "textarea[name='page[blocks_attributes][1][content]']", 0
188
+ assert_select "input[type='hidden'][name='page[blocks_attributes][1][identifier]'][value='test_label']", 0
189
+ end
190
+
191
+ def test_get_new_as_child_page
192
+ get :new, :site_id => cms_sites(:default), :parent_id => cms_pages(:default)
193
+ assert_response :success
194
+ assert assigns(:page)
195
+ assert_equal cms_pages(:default), assigns(:page).parent
196
+ assert_template :new
197
+ end
198
+
199
+ def test_get_edit
200
+ page = cms_pages(:default)
201
+ get :edit, :site_id => page.site, :id => page
202
+ assert_response :success
203
+ assert assigns(:page)
204
+ assert_template :edit
205
+ assert_select "form[action=/cms-admin/sites/#{page.site.id}/pages/#{page.id}]"
206
+ assert_select "select[data-url=/cms-admin/sites/#{page.site.id}/pages/#{page.id}/form_blocks]"
207
+ end
208
+
209
+ def test_get_edit_failure
210
+ get :edit, :site_id => cms_sites(:default), :id => 'not_found'
211
+ assert_response :redirect
212
+ assert_redirected_to :action => :index
213
+ assert_equal 'Page not found', flash[:error]
214
+ end
215
+
216
+ def test_get_edit_with_blank_layout
217
+ page = cms_pages(:default)
218
+ page.update_column(:layout_id, nil)
219
+ get :edit, :site_id => page.site, :id => page
220
+ assert_response :success
221
+ assert assigns(:page)
222
+ assert assigns(:page).layout
223
+ end
224
+
225
+ def test_get_edit_with_non_english_locale
226
+ site = cms_sites(:default)
227
+ site.update_column(:locale, 'es')
228
+ get :edit, :site_id => site, :id => cms_pages(:default)
229
+ assert_response :success
230
+ end
231
+
232
+ def test_creation
233
+ assert_difference 'Cms::Page.count' do
234
+ assert_difference 'Cms::Block.count', 2 do
235
+ post :create, :site_id => cms_sites(:default), :page => {
236
+ :label => 'Test Page',
237
+ :slug => 'test-page',
238
+ :parent_id => cms_pages(:default).id,
239
+ :layout_id => cms_layouts(:default).id,
240
+ :blocks_attributes => [
241
+ { :identifier => 'default_page_text',
242
+ :content => 'content content' },
243
+ { :identifier => 'default_field_text',
244
+ :content => 'title content' }
245
+ ]
246
+ }, :commit => 'Create Page'
247
+ assert_response :redirect
248
+ page = Cms::Page.last
249
+ assert_equal cms_sites(:default), page.site
250
+ assert_redirected_to :action => :edit, :id => page
251
+ assert_equal 'Page created', flash[:success]
252
+ end
253
+ end
254
+ end
255
+
256
+ def test_creation_failure
257
+ assert_no_difference ['Cms::Page.count', 'Cms::Block.count'] do
258
+ post :create, :site_id => cms_sites(:default), :page => {
259
+ :layout_id => cms_layouts(:default).id,
260
+ :blocks_attributes => [
261
+ { :identifier => 'default_page_text',
262
+ :content => 'content content' },
263
+ { :identifier => 'default_field_text',
264
+ :content => 'title content' }
265
+ ]
266
+ }
267
+ assert_response :success
268
+ page = assigns(:page)
269
+ assert_equal 2, page.blocks.size
270
+ assert_equal ['content content', 'title content'], page.blocks.collect{|b| b.content}
271
+ assert_template :new
272
+ assert_equal 'Failed to create page', flash[:error]
273
+ end
274
+ end
275
+
276
+ def test_update
277
+ page = cms_pages(:default)
278
+ assert_no_difference 'Cms::Block.count' do
279
+ put :update, :site_id => page.site, :id => page, :page => {
280
+ :label => 'Updated Label'
281
+ }
282
+ page.reload
283
+ assert_response :redirect
284
+ assert_redirected_to :action => :edit, :id => page
285
+ assert_equal 'Page updated', flash[:success]
286
+ assert_equal 'Updated Label', page.label
287
+ end
288
+ end
289
+
290
+ def test_update_with_layout_change
291
+ page = cms_pages(:default)
292
+ assert_difference 'Cms::Block.count', 2 do
293
+ put :update, :site_id => page.site, :id => page, :page => {
294
+ :label => 'Updated Label',
295
+ :layout_id => cms_layouts(:nested).id,
296
+ :blocks_attributes => [
297
+ { :identifier => 'content',
298
+ :content => 'new_page_text_content' },
299
+ { :identifier => 'header',
300
+ :content => 'new_page_string_content' }
301
+ ]
302
+ }
303
+ page.reload
304
+ assert_response :redirect
305
+ assert_redirected_to :action => :edit, :id => page
306
+ assert_equal 'Page updated', flash[:success]
307
+ assert_equal 'Updated Label', page.label
308
+ assert_equal ['content', 'default_field_text', 'default_page_text', 'header'], page.blocks.collect{|b| b.identifier}
309
+ end
310
+ end
311
+
312
+ def test_update_failure
313
+ put :update, :site_id => cms_sites(:default), :id => cms_pages(:default), :page => {
314
+ :label => ''
315
+ }
316
+ assert_response :success
317
+ assert_template :edit
318
+ assert assigns(:page)
319
+ assert_equal 'Failed to update page', flash[:error]
320
+ end
321
+
322
+ def test_destroy
323
+ assert_difference 'Cms::Page.count', -2 do
324
+ assert_difference 'Cms::Block.count', -2 do
325
+ delete :destroy, :site_id => cms_sites(:default), :id => cms_pages(:default)
326
+ assert_response :redirect
327
+ assert_redirected_to :action => :index
328
+ assert_equal 'Page deleted', flash[:success]
329
+ end
330
+ end
331
+ end
332
+
333
+ def test_get_form_blocks
334
+ site = cms_sites(:default)
335
+ xhr :get, :form_blocks, :site_id => site, :id => cms_pages(:default), :layout_id => cms_layouts(:nested).id
336
+ assert_response :success
337
+ assert assigns(:page)
338
+ assert_equal 2, assigns(:page).tags.size
339
+ assert_template :form_blocks
340
+
341
+ xhr :get, :form_blocks, :site_id => site, :id => cms_pages(:default), :layout_id => cms_layouts(:default).id
342
+ assert_response :success
343
+ assert assigns(:page)
344
+ assert_equal 4, assigns(:page).tags.size
345
+ assert_template :form_blocks
346
+ end
347
+
348
+ def test_get_form_blocks_for_new_page
349
+ xhr :get, :form_blocks, :site_id => cms_sites(:default), :id => 0, :layout_id => cms_layouts(:default).id
350
+ assert_response :success
351
+ assert assigns(:page)
352
+ assert_equal 3, assigns(:page).tags.size
353
+ assert_template :form_blocks
354
+ end
355
+
356
+ def test_creation_preview
357
+ site = cms_sites(:default)
358
+ layout = cms_layouts(:default)
359
+
360
+ assert_no_difference 'Cms::Page.count' do
361
+ post :create, :site_id => site, :preview => 'Preview', :page => {
362
+ :label => 'Test Page',
363
+ :slug => 'test-page',
364
+ :parent_id => cms_pages(:default).id,
365
+ :layout_id => layout.id,
366
+ :blocks_attributes => [
367
+ { :identifier => 'default_page_text',
368
+ :content => 'preview content' }
369
+ ]
370
+ }
371
+ assert_response :success
372
+ assert_match /preview content/, response.body
373
+
374
+ assert_equal site, assigns(:cms_site)
375
+ assert_equal layout, assigns(:cms_layout)
376
+ assert assigns(:cms_page)
377
+ assert assigns(:cms_page).new_record?
378
+ end
379
+ end
380
+
381
+ def test_update_preview
382
+ page = cms_pages(:default)
383
+ assert_no_difference 'Cms::Page.count' do
384
+ put :update, :site_id => page.site, :preview => 'Preview', :id => page, :page => {
385
+ :label => 'Updated Label',
386
+ :blocks_attributes => [
387
+ { :identifier => 'default_page_text',
388
+ :content => 'preview content' }
389
+ ]
390
+ }
391
+ assert_response :success
392
+ assert_match /preview content/, response.body
393
+ page.reload
394
+ assert_not_equal 'Updated Label', page.label
395
+
396
+ assert_equal page.site, assigns(:cms_site)
397
+ assert_equal page.layout, assigns(:cms_layout)
398
+ assert_equal page, assigns(:cms_page)
399
+ end
400
+ end
401
+
402
+ def test_get_new_with_no_layout
403
+ Cms::Layout.destroy_all
404
+ get :new, :site_id => cms_sites(:default)
405
+ assert_response :redirect
406
+ assert_redirected_to new_cms_admin_site_layout_path(cms_sites(:default))
407
+ assert_equal 'No Layouts found. Please create one.', flash[:error]
408
+ end
409
+
410
+ def test_get_edit_with_no_layout
411
+ Cms::Layout.destroy_all
412
+ page = cms_pages(:default)
413
+ get :edit, :site_id => page.site, :id => page
414
+ assert_response :redirect
415
+ assert_redirected_to new_cms_admin_site_layout_path(page.site)
416
+ assert_equal 'No Layouts found. Please create one.', flash[:error]
417
+ end
418
+
419
+ def test_get_toggle_branch
420
+ page = cms_pages(:default)
421
+ get :toggle_branch, :site_id => page.site, :id => page, :format => :js
422
+ assert_response :success
423
+ assert_equal [page.id.to_s], session[:cms_page_tree]
424
+
425
+ get :toggle_branch, :site_id => page.site, :id => page, :format => :js
426
+ assert_response :success
427
+ assert_equal [], session[:cms_page_tree]
428
+ end
429
+
430
+ def test_reorder
431
+ page_one = cms_pages(:child)
432
+ page_two = cms_sites(:default).pages.create!(
433
+ :parent => cms_pages(:default),
434
+ :layout => cms_layouts(:default),
435
+ :label => 'test',
436
+ :slug => 'test'
437
+ )
438
+ assert_equal 0, page_one.position
439
+ assert_equal 1, page_two.position
440
+
441
+ put :reorder, :site_id => cms_sites(:default), :cms_page => [page_two.id, page_one.id]
442
+ assert_response :success
443
+ page_one.reload
444
+ page_two.reload
445
+
446
+ assert_equal 1, page_one.position
447
+ assert_equal 0, page_two.position
448
+ end
449
+
450
+ end
@@ -0,0 +1,138 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class CmsAdmin::RevisionsControllerTest < ActionController::TestCase
4
+
5
+ def test_get_index_for_layouts
6
+ get :index, :site_id => cms_sites(:default), :layout_id => cms_layouts(:default)
7
+ assert_response :redirect
8
+ assert_redirected_to :action => :show, :id => cms_revisions(:layout)
9
+ end
10
+
11
+ def test_get_index_for_pages
12
+ get :index, :site_id => cms_sites(:default), :page_id => cms_pages(:default)
13
+ assert_response :redirect
14
+ assert_redirected_to :action => :show, :id => cms_revisions(:page)
15
+ end
16
+
17
+ def test_get_index_for_snippets
18
+ get :index, :site_id => cms_sites(:default), :snippet_id => cms_snippets(:default)
19
+ assert_response :redirect
20
+ assert_redirected_to :action => :show, :id => cms_revisions(:snippet)
21
+ end
22
+
23
+ def test_get_index_for_snippets_with_no_revisions
24
+ Cms::Revision.delete_all
25
+ get :index, :site_id => cms_sites(:default), :snippet_id => cms_snippets(:default)
26
+ assert_response :redirect
27
+ assert_redirected_to :action => :show, :id => 0
28
+ end
29
+
30
+ def test_get_show_for_layout
31
+ get :show, :site_id => cms_sites(:default), :layout_id => cms_layouts(:default), :id => cms_revisions(:layout)
32
+ assert_response :success
33
+ assert assigns(:record)
34
+ assert assigns(:revision)
35
+ assert assigns(:record).is_a?(Cms::Layout)
36
+ assert_template :show
37
+ end
38
+
39
+ def test_get_show_for_page
40
+ get :show, :site_id => cms_sites(:default), :page_id => cms_pages(:default), :id => cms_revisions(:page)
41
+ assert_response :success
42
+ assert assigns(:record)
43
+ assert assigns(:revision)
44
+ assert assigns(:record).is_a?(Cms::Page)
45
+ assert_template :show
46
+ end
47
+
48
+ def test_get_show_for_snippet
49
+ get :show, :site_id => cms_sites(:default), :snippet_id => cms_snippets(:default), :id => cms_revisions(:snippet)
50
+ assert_response :success
51
+ assert assigns(:record)
52
+ assert assigns(:revision)
53
+ assert assigns(:record).is_a?(Cms::Snippet)
54
+ assert_template :show
55
+ end
56
+
57
+ def test_get_show_for_bad_type
58
+ get :show, :site_id => cms_sites(:default), :snippet_id => 'invalid', :id => cms_revisions(:snippet)
59
+ assert_response :redirect
60
+ assert_redirected_to cms_admin_path
61
+ assert_equal 'Record Not Found', flash[:error]
62
+ end
63
+
64
+ def test_get_show_for_layout_failure
65
+ site = cms_sites(:default)
66
+ get :show, :site_id => site, :layout_id => cms_layouts(:default), :id => 'invalid'
67
+ assert_response :redirect
68
+ assert assigns(:record)
69
+ assert_redirected_to edit_cms_admin_site_layout_path(site, assigns(:record))
70
+ assert_equal 'Revision Not Found', flash[:error]
71
+ end
72
+
73
+ def test_get_show_for_page_failure
74
+ site = cms_sites(:default)
75
+ get :show, :site_id => site, :page_id => cms_pages(:default), :id => 'invalid'
76
+ assert_response :redirect
77
+ assert assigns(:record)
78
+ assert_redirected_to edit_cms_admin_site_page_path(site, assigns(:record))
79
+ assert_equal 'Revision Not Found', flash[:error]
80
+ end
81
+
82
+ def test_get_show_for_snippet_failure
83
+ site = cms_sites(:default)
84
+ get :show, :site_id => site, :snippet_id => cms_snippets(:default), :id => 'invalid'
85
+ assert_response :redirect
86
+ assert assigns(:record)
87
+ assert_redirected_to edit_cms_admin_site_snippet_path(site, assigns(:record))
88
+ assert_equal 'Revision Not Found', flash[:error]
89
+ end
90
+
91
+ def test_revert_for_layout
92
+ layout = cms_layouts(:default)
93
+
94
+ assert_difference 'layout.revisions.count' do
95
+ put :revert, :site_id => cms_sites(:default), :layout_id => layout, :id => cms_revisions(:layout)
96
+ assert_response :redirect
97
+ assert_redirected_to edit_cms_admin_site_layout_path(layout.site, layout)
98
+ assert_equal 'Content Reverted', flash[:success]
99
+
100
+ layout.reload
101
+ assert_equal 'revision {{cms:page:default_page_text}}', layout.content
102
+ assert_equal 'revision css', layout.css
103
+ assert_equal 'revision js', layout.js
104
+ end
105
+ end
106
+
107
+ def test_revert_for_page
108
+ page = cms_pages(:default)
109
+
110
+ assert_difference 'page.revisions.count' do
111
+ put :revert, :site_id => cms_sites(:default), :page_id => page, :id => cms_revisions(:page)
112
+ assert_response :redirect
113
+ assert_redirected_to edit_cms_admin_site_page_path(page.site, page)
114
+ assert_equal 'Content Reverted', flash[:success]
115
+
116
+ page.reload
117
+ assert_equal [
118
+ { :identifier => 'default_field_text', :content => 'revision field content' },
119
+ { :identifier => 'default_page_text', :content => 'revision page content' }
120
+ ], page.blocks_attributes
121
+ end
122
+ end
123
+
124
+ def test_revert_for_snippet
125
+ snippet = cms_snippets(:default)
126
+
127
+ assert_difference 'snippet.revisions.count' do
128
+ put :revert, :site_id => cms_sites(:default), :snippet_id => snippet, :id => cms_revisions(:snippet)
129
+ assert_response :redirect
130
+ assert_redirected_to edit_cms_admin_site_snippet_path(snippet.site, snippet)
131
+ assert_equal 'Content Reverted', flash[:success]
132
+
133
+ snippet.reload
134
+ assert_equal 'revision content', snippet.content
135
+ end
136
+ end
137
+
138
+ end
@@ -0,0 +1,105 @@
1
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
+
3
+ class CmsAdmin::SitesControllerTest < ActionController::TestCase
4
+
5
+ def test_get_index
6
+ get :index
7
+ assert_response :success
8
+ assert assigns(:sites)
9
+ assert_template :index
10
+ end
11
+
12
+ def test_get_index_with_no_sites
13
+ Cms::Site.delete_all
14
+ get :index
15
+ assert_response :redirect
16
+ assert_redirected_to :action => :new
17
+ end
18
+
19
+ def test_get_new
20
+ get :new
21
+ assert_response :success
22
+ assert assigns(:site)
23
+ assert_equal 'test.host', assigns(:site).hostname
24
+ assert_template :new
25
+ assert_select 'form[action=/cms-admin/sites]'
26
+ end
27
+
28
+ def test_get_edit
29
+ site = cms_sites(:default)
30
+ get :edit, :id => site
31
+ assert_response :success
32
+ assert assigns(:site)
33
+ assert_template :edit
34
+ assert_select "form[action=/cms-admin/sites/#{site.id}]"
35
+ end
36
+
37
+ def test_get_edit_failure
38
+ get :edit, :id => 'not_found'
39
+ assert_response :redirect
40
+ assert_redirected_to :action => :index
41
+ assert_equal 'Site not found', flash[:error]
42
+ end
43
+
44
+ def test_create
45
+ assert_difference 'Cms::Site.count' do
46
+ post :create, :site => {
47
+ :label => 'Test Site',
48
+ :identifier => 'test-site',
49
+ :hostname => 'test.site.local'
50
+ }
51
+ assert_response :redirect
52
+ site = Cms::Site.last
53
+ assert_redirected_to cms_admin_site_layouts_path(site)
54
+ assert_equal 'Site created', flash[:success]
55
+ end
56
+ end
57
+
58
+ def test_creation_failure
59
+ assert_no_difference 'Cms::Site.count' do
60
+ post :create, :site => { }
61
+ assert_response :success
62
+ assert_template :new
63
+ assert_equal 'Failed to create site', flash[:error]
64
+ end
65
+ end
66
+
67
+ def test_update
68
+ site = cms_sites(:default)
69
+ put :update, :id => site, :site => {
70
+ :label => 'New Site',
71
+ :hostname => 'new.site.local',
72
+ :locale => 'es',
73
+ :is_mirrored => '1'
74
+ }
75
+ assert_response :redirect
76
+ assert_redirected_to :action => :edit, :id => site
77
+ assert_equal 'Site updated', flash[:success]
78
+ site.reload
79
+ assert_equal 'New Site', site.label
80
+ assert_equal 'new.site.local', site.hostname
81
+ assert_equal 'es', site.locale
82
+ assert site.is_mirrored?
83
+ end
84
+
85
+ def test_update_failure
86
+ site = cms_sites(:default)
87
+ put :update, :id => site, :site => {
88
+ :hostname => ''
89
+ }
90
+ assert_response :success
91
+ assert_template :edit
92
+ site.reload
93
+ assert_not_equal '', site.hostname
94
+ assert_equal 'Failed to update site', flash[:error]
95
+ end
96
+
97
+ def test_destroy
98
+ assert_difference 'Cms::Site.count', -1 do
99
+ delete :destroy, :id => cms_sites(:default)
100
+ assert_response :redirect
101
+ assert_redirected_to :action => :index
102
+ assert_equal 'Site deleted', flash[:success]
103
+ end
104
+ end
105
+ end