alchemy_cms 2.1.12 → 2.2.rc1

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 (405) hide show
  1. data/.travis.yml +1 -1
  2. data/Gemfile +20 -16
  3. data/README.md +11 -7
  4. data/alchemy_cms.gemspec +31 -29
  5. data/app/assets/javascripts/alchemy/alchemy.base.js +234 -233
  6. data/app/assets/javascripts/alchemy/alchemy.buttons.js +26 -26
  7. data/app/assets/javascripts/alchemy/alchemy.datepicker.js +32 -32
  8. data/app/assets/javascripts/alchemy/alchemy.dirty.js +78 -78
  9. data/app/assets/javascripts/alchemy/alchemy.dragndrop.js +103 -103
  10. data/app/assets/javascripts/alchemy/alchemy.element_editor_selector.js +84 -84
  11. data/app/assets/javascripts/alchemy/alchemy.elements_window.js +88 -88
  12. data/app/assets/javascripts/alchemy/alchemy.file_progress.js +92 -0
  13. data/app/assets/javascripts/alchemy/alchemy.growler.js +23 -23
  14. data/app/assets/javascripts/alchemy/alchemy.html5.js +23 -0
  15. data/app/assets/javascripts/alchemy/alchemy.image_cropper.js +53 -52
  16. data/app/assets/javascripts/alchemy/alchemy.jquery_loader.js +33 -30
  17. data/app/assets/javascripts/alchemy/alchemy.js +2 -0
  18. data/app/assets/javascripts/alchemy/alchemy.js_extensions.js +14 -14
  19. data/app/assets/javascripts/alchemy/alchemy.link_overlay.js.coffee +181 -0
  20. data/app/assets/javascripts/alchemy/alchemy.menubar.js +48 -48
  21. data/app/assets/javascripts/alchemy/alchemy.page_sorter.js +39 -39
  22. data/app/assets/javascripts/alchemy/alchemy.preview.js +81 -83
  23. data/app/assets/javascripts/alchemy/alchemy.preview_window.js +86 -86
  24. data/app/assets/javascripts/alchemy/alchemy.routes.js.erb +23 -23
  25. data/app/assets/javascripts/alchemy/alchemy.swf_upload.js +208 -353
  26. data/app/assets/javascripts/alchemy/alchemy.uploader.js +279 -0
  27. data/app/assets/javascripts/alchemy/alchemy.windows.js +268 -268
  28. data/app/assets/javascripts/tiny_mce/plugins/alchemy_link/editor_plugin.js +42 -42
  29. data/app/assets/stylesheets/alchemy/_defaults.scss +89 -89
  30. data/app/assets/stylesheets/alchemy/base.css.scss +790 -804
  31. data/app/assets/stylesheets/alchemy/buttons.css.scss +263 -264
  32. data/app/assets/stylesheets/alchemy/dashboard.css.scss +66 -66
  33. data/app/assets/stylesheets/alchemy/elements.css.scss +575 -564
  34. data/app/assets/stylesheets/alchemy/flash.css.scss +45 -45
  35. data/app/assets/stylesheets/alchemy/frame.css.scss +262 -262
  36. data/app/assets/stylesheets/alchemy/icons.css.scss +86 -86
  37. data/app/assets/stylesheets/alchemy/jquery-ui.alchemy.css.scss +706 -707
  38. data/app/assets/stylesheets/alchemy/jquery.Jcrop.css.scss +46 -27
  39. data/app/assets/stylesheets/alchemy/jquery.sb.css.scss +107 -107
  40. data/app/assets/stylesheets/alchemy/login.css.scss +40 -38
  41. data/app/assets/stylesheets/alchemy/menubar.css.scss +84 -82
  42. data/app/assets/stylesheets/alchemy/modules.css.scss +9 -9
  43. data/app/assets/stylesheets/alchemy/pagination.css.scss +49 -49
  44. data/app/assets/stylesheets/alchemy/print.css +7 -7
  45. data/app/assets/stylesheets/alchemy/sitemap.css.scss +185 -154
  46. data/app/assets/stylesheets/alchemy/standard_set.css +205 -206
  47. data/app/assets/stylesheets/alchemy/tables.css.scss +94 -60
  48. data/app/assets/stylesheets/alchemy/tinymce_content.css.scss +34 -34
  49. data/app/assets/stylesheets/alchemy/tinymce_dialog.css.scss +177 -177
  50. data/app/assets/stylesheets/alchemy/upload.css.scss +68 -45
  51. data/app/assets/stylesheets/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css.scss +222 -221
  52. data/app/controllers/alchemy/admin/attachments_controller.rb +100 -100
  53. data/app/controllers/alchemy/admin/base_controller.rb +116 -116
  54. data/app/controllers/alchemy/admin/clipboard_controller.rb +44 -44
  55. data/app/controllers/alchemy/admin/contents_controller.rb +55 -55
  56. data/app/controllers/alchemy/admin/dashboard_controller.rb +12 -11
  57. data/app/controllers/alchemy/admin/elements_controller.rb +109 -109
  58. data/app/controllers/alchemy/admin/essence_audios_controller.rb +8 -8
  59. data/app/controllers/alchemy/admin/essence_files_controller.rb +20 -20
  60. data/app/controllers/alchemy/admin/essence_flashes_controller.rb +8 -8
  61. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +81 -81
  62. data/app/controllers/alchemy/admin/essence_videos_controller.rb +8 -8
  63. data/app/controllers/alchemy/admin/languages_controller.rb +16 -4
  64. data/app/controllers/alchemy/admin/layoutpages_controller.rb +9 -9
  65. data/app/controllers/alchemy/admin/pages_controller.rb +249 -248
  66. data/app/controllers/alchemy/admin/pictures_controller.rb +105 -105
  67. data/app/controllers/alchemy/admin/resources_controller.rb +111 -166
  68. data/app/controllers/alchemy/admin/trash_controller.rb +18 -18
  69. data/app/controllers/alchemy/admin/users_controller.rb +69 -69
  70. data/app/controllers/alchemy/attachments_controller.rb +27 -27
  71. data/app/controllers/alchemy/base_controller.rb +159 -155
  72. data/app/controllers/alchemy/elements_controller.rb +16 -16
  73. data/app/controllers/alchemy/messages_controller.rb +59 -59
  74. data/app/controllers/alchemy/pages_controller.rb +194 -198
  75. data/app/controllers/alchemy/pictures_controller.rb +57 -57
  76. data/app/controllers/alchemy/user_sessions_controller.rb +70 -70
  77. data/app/helpers/alchemy/admin/attachments_helper.rb +7 -7
  78. data/app/helpers/alchemy/admin/base_helper.rb +425 -425
  79. data/app/helpers/alchemy/admin/contents_helper.rb +72 -72
  80. data/app/helpers/alchemy/admin/elements_helper.rb +108 -107
  81. data/app/helpers/alchemy/admin/essences_helper.rb +108 -108
  82. data/app/helpers/alchemy/admin/pages_helper.rb +42 -42
  83. data/app/helpers/alchemy/admin/pictures_helper.rb +26 -26
  84. data/app/helpers/alchemy/base_helper.rb +90 -90
  85. data/app/helpers/alchemy/elements_helper.rb +167 -168
  86. data/app/helpers/alchemy/essences_helper.rb +133 -133
  87. data/app/helpers/alchemy/pages_helper.rb +515 -526
  88. data/app/helpers/alchemy/pictures_helper.rb +19 -0
  89. data/app/mailers/alchemy/messages.rb +13 -13
  90. data/app/mailers/alchemy/notifications.rb +19 -19
  91. data/app/models/alchemy.rb +3 -3
  92. data/app/models/alchemy/attachment.rb +52 -78
  93. data/app/models/alchemy/cell.rb +48 -48
  94. data/app/models/alchemy/content.rb +196 -196
  95. data/app/models/alchemy/element.rb +500 -490
  96. data/app/models/alchemy/essence_audio.rb +7 -7
  97. data/app/models/alchemy/essence_date.rb +10 -10
  98. data/app/models/alchemy/essence_file.rb +7 -7
  99. data/app/models/alchemy/essence_flash.rb +6 -6
  100. data/app/models/alchemy/essence_html.rb +9 -9
  101. data/app/models/alchemy/essence_picture.rb +17 -17
  102. data/app/models/alchemy/essence_richtext.rb +53 -53
  103. data/app/models/alchemy/essence_text.rb +21 -21
  104. data/app/models/alchemy/essence_video.rb +7 -7
  105. data/app/models/alchemy/folded_page.rb +3 -3
  106. data/app/models/alchemy/language.rb +91 -91
  107. data/app/models/alchemy/language/code.rb +14 -14
  108. data/app/models/alchemy/message.rb +48 -45
  109. data/app/models/alchemy/page.rb +555 -558
  110. data/app/models/alchemy/picture.rb +100 -99
  111. data/app/models/alchemy/user.rb +76 -74
  112. data/app/models/alchemy/user_session.rb +8 -8
  113. data/app/sweepers/alchemy/content_sweeper.rb +15 -15
  114. data/app/sweepers/alchemy/pages_sweeper.rb +50 -50
  115. data/app/sweepers/alchemy/pictures_sweeper.rb +14 -14
  116. data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +23 -23
  117. data/app/views/alchemy/admin/attachments/_attachment.html.erb +56 -56
  118. data/app/views/alchemy/admin/attachments/_file_to_assign.html.erb +15 -15
  119. data/app/views/alchemy/admin/attachments/_files_list.html.erb +16 -16
  120. data/app/views/alchemy/admin/attachments/create.js.erb +2 -2
  121. data/app/views/alchemy/admin/attachments/destroy.js.erb +3 -3
  122. data/app/views/alchemy/admin/attachments/edit.html.erb +10 -10
  123. data/app/views/alchemy/admin/attachments/index.html.erb +14 -14
  124. data/app/views/alchemy/admin/attachments/new.html.erb +9 -9
  125. data/app/views/alchemy/admin/clipboard/index.html.erb +21 -21
  126. data/app/views/alchemy/admin/clipboard/insert.js.erb +5 -5
  127. data/app/views/alchemy/admin/contents/_missing.html.erb +1 -1
  128. data/app/views/alchemy/admin/contents/create.js.erb +33 -33
  129. data/app/views/alchemy/admin/contents/destroy.js.erb +5 -5
  130. data/app/views/alchemy/admin/contents/new.html.erb +13 -13
  131. data/app/views/alchemy/admin/contents/order.js.erb +2 -2
  132. data/app/views/alchemy/admin/dashboard/index.html.erb +96 -92
  133. data/app/views/alchemy/admin/elements/_add_content.html.erb +12 -12
  134. data/app/views/alchemy/admin/elements/_element.html.erb +3 -3
  135. data/app/views/alchemy/admin/elements/_new_element_form.html.erb +28 -28
  136. data/app/views/alchemy/admin/elements/_picture_editor.html.erb +21 -21
  137. data/app/views/alchemy/admin/elements/create.js.erb +32 -32
  138. data/app/views/alchemy/admin/elements/index.html.erb +2 -2
  139. data/app/views/alchemy/admin/elements/new.html.erb +31 -31
  140. data/app/views/alchemy/admin/elements/order.js.erb +3 -3
  141. data/app/views/alchemy/admin/elements/trash.js.erb +13 -13
  142. data/app/views/alchemy/admin/elements/update.js.erb +6 -6
  143. data/app/views/alchemy/admin/essence_files/assign.js.erb +6 -6
  144. data/app/views/alchemy/admin/essence_pictures/crop.html.erb +32 -32
  145. data/app/views/alchemy/admin/essence_pictures/destroy.js.erb +1 -1
  146. data/app/views/alchemy/admin/essence_pictures/edit.html.erb +1 -1
  147. data/app/views/alchemy/admin/essence_pictures/update.js.erb +11 -11
  148. data/app/views/alchemy/admin/languages/_form.html.erb +51 -45
  149. data/app/views/alchemy/admin/languages/_language.html.erb +45 -45
  150. data/app/views/alchemy/admin/languages/_table.html.erb +25 -25
  151. data/app/views/alchemy/admin/layoutpages/index.html.erb +35 -35
  152. data/app/views/alchemy/admin/pages/_create_language_form.html.erb +42 -42
  153. data/app/views/alchemy/admin/pages/_external_link.html.erb +1 -1
  154. data/app/views/alchemy/admin/pages/_new_page_form.html.erb +27 -27
  155. data/app/views/alchemy/admin/pages/_page.html.erb +112 -112
  156. data/app/views/alchemy/admin/pages/_sitemap.html.erb +1 -1
  157. data/app/views/alchemy/admin/pages/configure.html.erb +71 -69
  158. data/app/views/alchemy/admin/pages/configure_external.html.erb +38 -38
  159. data/app/views/alchemy/admin/pages/destroy.js.erb +10 -10
  160. data/app/views/alchemy/admin/pages/edit.html.erb +165 -165
  161. data/app/views/alchemy/admin/pages/fold.js.erb +2 -2
  162. data/app/views/alchemy/admin/pages/index.html.erb +66 -66
  163. data/app/views/alchemy/admin/pages/locked.html.erb +1 -1
  164. data/app/views/alchemy/admin/pages/new.html.erb +40 -40
  165. data/app/views/alchemy/admin/pages/sort.js.erb +4 -4
  166. data/app/views/alchemy/admin/pages/unlock.js.erb +6 -6
  167. data/app/views/alchemy/admin/pages/update.js.erb +19 -19
  168. data/app/views/alchemy/admin/partials/_flash.html.erb +2 -2
  169. data/app/views/alchemy/admin/partials/_flash_notices.html.erb +1 -1
  170. data/app/views/alchemy/admin/partials/_flash_upload.html.erb +38 -0
  171. data/app/views/alchemy/admin/partials/_language_tree_select.html.erb +15 -15
  172. data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +8 -8
  173. data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +35 -35
  174. data/app/views/alchemy/admin/partials/_search_form.html.erb +14 -14
  175. data/app/views/alchemy/admin/partials/_sub_navigation_tab.html.erb +6 -6
  176. data/app/views/alchemy/admin/partials/_upload_form.html.erb +56 -118
  177. data/app/views/alchemy/admin/pictures/_archive_overlay.html.erb +11 -11
  178. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +71 -71
  179. data/app/views/alchemy/admin/pictures/_picture.html.erb +32 -32
  180. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +26 -26
  181. data/app/views/alchemy/admin/pictures/_pictures_list.html.erb +6 -6
  182. data/app/views/alchemy/admin/pictures/create.js.erb +7 -7
  183. data/app/views/alchemy/admin/pictures/index.html.erb +67 -67
  184. data/app/views/alchemy/admin/pictures/show_in_window.html.erb +5 -4
  185. data/app/views/alchemy/admin/resources/_form.html.erb +25 -19
  186. data/app/views/alchemy/admin/resources/_resource.html.erb +37 -36
  187. data/app/views/alchemy/admin/resources/_table.html.erb +17 -17
  188. data/app/views/alchemy/admin/resources/destroy.js.erb +1 -1
  189. data/app/views/alchemy/admin/resources/index.html.erb +14 -14
  190. data/app/views/alchemy/admin/trash/index.html.erb +20 -20
  191. data/app/views/alchemy/admin/users/_table.html.erb +52 -52
  192. data/app/views/alchemy/admin/users/_user.html.erb +35 -36
  193. data/app/views/alchemy/admin/users/index.html.erb +26 -27
  194. data/app/views/alchemy/base/error_notice.html.erb +2 -2
  195. data/app/views/alchemy/base/update.js.erb +1 -1
  196. data/app/views/alchemy/elements/_contactform_view.html.erb +76 -76
  197. data/app/views/alchemy/elements/_download_view.html.erb +1 -1
  198. data/app/views/alchemy/elements/_editor_not_found.html.erb +3 -3
  199. data/app/views/alchemy/elements/_searchresult_view.html.erb +2 -2
  200. data/app/views/alchemy/elements/_sitemap_editor.html.erb +1 -1
  201. data/app/views/alchemy/essences/_essence_audio_view.html.erb +13 -13
  202. data/app/views/alchemy/essences/_essence_date_editor.html.erb +10 -10
  203. data/app/views/alchemy/essences/_essence_file_editor.html.erb +62 -62
  204. data/app/views/alchemy/essences/_essence_file_view.html.erb +8 -8
  205. data/app/views/alchemy/essences/_essence_flash_view.html.erb +19 -19
  206. data/app/views/alchemy/essences/_essence_html_editor.html.erb +6 -6
  207. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +73 -73
  208. data/app/views/alchemy/essences/_essence_picture_view.html.erb +34 -34
  209. data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +7 -7
  210. data/app/views/alchemy/essences/_essence_text_editor.html.erb +8 -8
  211. data/app/views/alchemy/navigation/_image_link.html.erb +12 -12
  212. data/app/views/alchemy/navigation/_link.html.erb +13 -13
  213. data/app/views/alchemy/navigation/_renderer.html.erb +17 -17
  214. data/app/views/alchemy/page_layouts/_layout_footer.html.erb +1 -1
  215. data/app/views/alchemy/page_layouts/_layout_header.html.erb +1 -1
  216. data/app/views/alchemy/pages/show.rss.builder +14 -14
  217. data/app/views/alchemy/search/_result.html.erb +7 -7
  218. data/app/views/alchemy/user_sessions/leave.html.erb +9 -9
  219. data/app/views/alchemy/user_sessions/login.html.erb +39 -39
  220. data/app/views/alchemy/user_sessions/logout.html.erb +1 -1
  221. data/app/views/layouts/alchemy/admin.html.erb +81 -81
  222. data/app/views/layouts/alchemy/login.html.erb +36 -36
  223. data/app/views/layouts/alchemy/pages.html.erb +48 -27
  224. data/bin/alchemy +136 -134
  225. data/config/alchemy/config.yml +13 -9
  226. data/config/locales/alchemy.de.yml +24 -30
  227. data/config/locales/alchemy.en.yml +11 -28
  228. data/config/routes.rb +146 -146
  229. data/db/migrate/20100607193638_create_essence_pictures.rb +3 -3
  230. data/db/migrate/20101109150312_alter_pages_visible_column_default.rb +1 -1
  231. data/db/migrate/20101109151812_create_languages.rb +3 -3
  232. data/db/migrate/20110115123343_remove_css_class_default_from_essence_pictures.rb +3 -3
  233. data/db/migrate/20110224105120_change_pages_visible_default.rb +3 -3
  234. data/db/migrate/20110228182659_remove_default_page_layout_from_pages.rb +2 -2
  235. data/db/migrate/20110414163140_remove_display_name_from_elements.rb +3 -3
  236. data/db/migrate/20110511100516_rename_essence_texts_title_to_link_title.rb +2 -2
  237. data/db/migrate/20110529130500_add_cell_id_to_elements.rb +3 -3
  238. data/db/migrate/20110530102804_change_pages_page_layout_column.rb +3 -3
  239. data/db/migrate/20110711142057_change_open_link_in_new_window_to_link_target.rb +1 -1
  240. data/db/migrate/20111116125112_namespace_alchemy_models.rb +21 -21
  241. data/lib/alchemy/auth_engine.rb +5 -5
  242. data/lib/alchemy/capistrano.rb +64 -64
  243. data/lib/alchemy/config.rb +47 -44
  244. data/lib/alchemy/engine.rb +41 -41
  245. data/lib/alchemy/essence.rb +50 -51
  246. data/lib/alchemy/i18n.rb +48 -48
  247. data/lib/alchemy/modules.rb +30 -30
  248. data/lib/alchemy/mount_point.rb +6 -6
  249. data/lib/alchemy/page_layout.rb +94 -93
  250. data/lib/alchemy/resource.rb +82 -0
  251. data/lib/alchemy/resources_helper.rb +56 -0
  252. data/lib/alchemy/scoped_pagination_url_helper.rb +8 -8
  253. data/lib/alchemy/seeder.rb +88 -88
  254. data/lib/alchemy/tinymce.rb +49 -49
  255. data/lib/alchemy/upgrader.rb +103 -103
  256. data/lib/alchemy/version.rb +1 -1
  257. data/lib/alchemy_cms.rb +26 -27
  258. data/lib/extensions/action_view.rb +1 -1
  259. data/lib/extensions/array.rb +3 -3
  260. data/lib/extensions/hash.rb +3 -3
  261. data/lib/middleware/flash_session_cookie.rb +1 -1
  262. data/lib/rails/generators/alchemy/deploy_script/deploy_script_generator.rb +24 -24
  263. data/lib/rails/generators/alchemy/elements/elements_generator.rb +7 -7
  264. data/lib/rails/generators/alchemy/elements/templates/view.html.erb +17 -17
  265. data/lib/rails/generators/alchemy/page_layouts/page_layouts_generator.rb +6 -6
  266. data/lib/rails/generators/alchemy/plugin/templates/authorization_rules.rb +8 -8
  267. data/lib/rails/generators/alchemy/scaffold/files/pages.html.erb +7 -7
  268. data/lib/rails/generators/alchemy/scaffold/scaffold_generator.rb +36 -36
  269. data/lib/rails/templates/alchemy.rb +1 -1
  270. data/lib/tasks/ferret.rake +2 -2
  271. data/lib/tasks/fleximage.rake +32 -32
  272. data/lib/tasks/install.rake +12 -12
  273. data/lib/tasks/upgrade.rake +4 -4
  274. data/spec/controllers/admin/clipboard_controller_spec.rb +43 -43
  275. data/spec/controllers/admin/contents_controller_spec.rb +22 -22
  276. data/spec/controllers/admin/elements_controller_spec.rb +13 -13
  277. data/spec/controllers/admin/languages_controller_spec.rb +31 -0
  278. data/spec/controllers/admin/pages_controller_spec.rb +10 -41
  279. data/spec/controllers/admin/resources_controller_spec.rb +19 -0
  280. data/spec/controllers/admin/trash_controller_spec.rb +11 -11
  281. data/spec/controllers/base_controller_spec.rb +46 -46
  282. data/spec/controllers/pages_controller_spec.rb +102 -92
  283. data/spec/dummy/app/controllers/admin/events_controller.rb +3 -0
  284. data/spec/dummy/app/controllers/errors_controller.rb +5 -0
  285. data/spec/dummy/app/models/event.rb +3 -0
  286. data/spec/dummy/config.ru +1 -1
  287. data/spec/dummy/config/application.rb +3 -0
  288. data/spec/dummy/config/authorization_rules.rb +7 -0
  289. data/spec/dummy/config/environments/development.rb +8 -1
  290. data/spec/dummy/config/environments/production.rb +1 -1
  291. data/spec/dummy/config/environments/test.rb +5 -2
  292. data/spec/dummy/config/routes.rb +9 -1
  293. data/spec/dummy/db/schema.rb +47 -35
  294. data/spec/dummy/public/404.html +19 -7
  295. data/spec/dummy/public/404.html.bak +26 -0
  296. data/spec/dummy/public/422.html +19 -7
  297. data/spec/dummy/public/500.html +19 -7
  298. data/spec/dummy/script/rails +2 -2
  299. data/spec/factories.rb +76 -76
  300. data/spec/helpers/admin/base_helper_spec.rb +21 -21
  301. data/spec/helpers/admin/contents_helper_spec.rb +14 -14
  302. data/spec/helpers/admin/elements_helper_spec.rb +40 -40
  303. data/spec/helpers/admin/essences_helper_spec.rb +7 -7
  304. data/spec/helpers/elements_helper_spec.rb +154 -154
  305. data/spec/helpers/essences_helper_spec.rb +10 -10
  306. data/spec/helpers/pages_helper_spec.rb +369 -372
  307. data/spec/helpers/pictures_helper_spec.rb +14 -0
  308. data/spec/helpers/url_helpers_spec.rb +29 -34
  309. data/spec/integration/admin/pages_controller_spec.rb +50 -50
  310. data/spec/integration/admin/resources_integration_spec.rb +100 -0
  311. data/spec/integration/navigation_spec.rb +1 -1
  312. data/spec/integration/pages_controller_spec.rb +205 -207
  313. data/spec/integration/security_spec.rb +47 -47
  314. data/spec/javascripts/alchemy/link_overlay_spec.js.coffee +42 -0
  315. data/spec/javascripts/alchemy_integration_spec.coffee +12 -0
  316. data/spec/javascripts/fixtures/select.html +3 -0
  317. data/spec/javascripts/helpers/.gitkeep +0 -0
  318. data/spec/javascripts/helpers/jasmine-jquery-1.3.1.js +289 -0
  319. data/spec/javascripts/helpers/mock-ajax.js +207 -0
  320. data/spec/javascripts/helpers/test_responses/test_responses.js +1 -0
  321. data/spec/javascripts/spec.css +3 -0
  322. data/spec/javascripts/spec.js +2 -0
  323. data/spec/libraries/resource_spec.rb +122 -0
  324. data/spec/libraries/resources_helper_spec.rb +105 -0
  325. data/spec/models/content_spec.rb +67 -67
  326. data/spec/models/element_spec.rb +133 -133
  327. data/spec/models/essence_picture_spec.rb +5 -5
  328. data/spec/models/essence_richtext_spec.rb +4 -4
  329. data/spec/models/language_spec.rb +89 -89
  330. data/spec/models/page_spec.rb +436 -506
  331. data/spec/models/picture_spec.rb +34 -34
  332. data/spec/models/user_spec.rb +2 -2
  333. data/spec/page_layout_spec.rb +24 -20
  334. data/spec/routing_spec.rb +253 -253
  335. data/spec/spec_helper.rb +51 -50
  336. data/spec/support/alchemy/controller_hacks.rb +25 -25
  337. data/spec/support/alchemy/specs_helpers.rb +25 -25
  338. data/spec/support/integration_spec_helper.rb +24 -0
  339. data/vendor/assets/javascripts/jquery_plugins/jquery.html5uploader.js +271 -0
  340. data/vendor/assets/javascripts/jquery_plugins/jquery.in-place-edit.js +86 -85
  341. data/vendor/assets/javascripts/jquery_plugins/jquery.ui.nestedSortable.js +380 -377
  342. data/vendor/assets/javascripts/jquery_plugins/jquery.ui.tabspaging.js +285 -279
  343. data/vendor/assets/javascripts/swfupload/SWFObject License.txt +3 -3
  344. data/vendor/assets/javascripts/swfupload/swfupload.cookies.js +47 -47
  345. data/vendor/assets/javascripts/swfupload/swfupload.js +612 -612
  346. data/vendor/assets/javascripts/swfupload/swfupload.queue.js +93 -93
  347. data/vendor/assets/javascripts/swfupload/swfupload.speed.js +337 -337
  348. data/vendor/assets/javascripts/swfupload/swfupload.swfobject.js +706 -102
  349. data/vendor/assets/javascripts/tiny_mce/license.txt +6 -6
  350. data/vendor/assets/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm +97 -97
  351. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/template.htm +386 -376
  352. data/vendor/assets/javascripts/tiny_mce/plugins/paste/js/pastetext.js +30 -30
  353. data/vendor/assets/javascripts/tiny_mce/plugins/paste/js/pasteword.js +45 -45
  354. data/vendor/assets/javascripts/tiny_mce/plugins/paste/pastetext.htm +20 -17
  355. data/vendor/assets/javascripts/tiny_mce/plugins/paste/pasteword.htm +12 -12
  356. data/vendor/assets/javascripts/tiny_mce/plugins/table/cell.htm +183 -173
  357. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/cell.css +4 -4
  358. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/row.css +7 -7
  359. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/table.css +3 -3
  360. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/cell.js +282 -280
  361. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/merge_cells.js +15 -15
  362. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/row.js +204 -204
  363. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/table.js +435 -435
  364. data/vendor/assets/javascripts/tiny_mce/plugins/table/merge_cells.htm +24 -22
  365. data/vendor/assets/javascripts/tiny_mce/plugins/table/row.htm +144 -136
  366. data/vendor/assets/javascripts/tiny_mce/plugins/table/table.htm +184 -168
  367. data/vendor/assets/javascripts/tiny_mce/themes/advanced/about.htm +62 -46
  368. data/vendor/assets/javascripts/tiny_mce/themes/advanced/anchor.htm +17 -16
  369. data/vendor/assets/javascripts/tiny_mce/themes/advanced/charmap.htm +56 -47
  370. data/vendor/assets/javascripts/tiny_mce/themes/advanced/color_picker.htm +67 -54
  371. data/vendor/assets/javascripts/tiny_mce/themes/advanced/editor_template.js +852 -1
  372. data/vendor/assets/javascripts/tiny_mce/themes/advanced/image.htm +79 -69
  373. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/about.js +48 -48
  374. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/anchor.js +28 -28
  375. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/charmap.js +317 -317
  376. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/color_picker.js +248 -246
  377. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/image.js +246 -246
  378. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/link.js +146 -146
  379. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/source_editor.js +31 -31
  380. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/de.js +1 -1
  381. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/de_dlg.js +1 -1
  382. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/en.js +1 -1
  383. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js +1 -1
  384. data/vendor/assets/javascripts/tiny_mce/themes/advanced/link.htm +53 -46
  385. data/vendor/assets/javascripts/tiny_mce/themes/advanced/shortcuts.htm +57 -45
  386. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/content.css +182 -47
  387. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css +399 -92
  388. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/ui.css +891 -187
  389. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/content.css +102 -24
  390. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +377 -78
  391. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css +452 -77
  392. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css +167 -45
  393. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +399 -92
  394. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +890 -190
  395. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +33 -7
  396. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +15 -4
  397. data/vendor/assets/javascripts/tiny_mce/themes/advanced/source_editor.htm +18 -15
  398. data/vendor/assets/javascripts/tiny_mce/utils/editable_selects.js +46 -46
  399. data/vendor/assets/javascripts/tiny_mce/utils/form_utils.js +124 -124
  400. data/vendor/assets/javascripts/tiny_mce/utils/mctabs.js +112 -112
  401. data/vendor/assets/javascripts/tiny_mce/utils/validate.js +213 -213
  402. metadata +102 -115
  403. data/app/assets/javascripts/alchemy/alchemy.link_overlay.js +0 -216
  404. data/lib/tasks/routes.rake +0 -29
  405. data/spec/integration/admin/resources_spec.rb +0 -19
@@ -2,48 +2,48 @@ require 'spec_helper'
2
2
 
3
3
  describe Alchemy::Admin::ClipboardController do
4
4
 
5
- before(:each) do
6
- activate_authlogic
7
- Alchemy::UserSession.create(Factory(:admin_user))
8
- end
9
-
10
- context "clipboard" do
11
-
12
- it "should hold element ids" do
13
- @page = Factory(:page, :parent_id => Alchemy::Page.rootpage.id)
14
- @element = Factory(:element, :page => @page)
15
- @another_element = Factory(:element, :page => @page)
16
- session['clipboard'] = { 'elements' => [{:id => @element.id, :action => 'copy'}] }
17
- post(:insert, {:remarkable_type => 'element', :remarkable_id => @another_element.id, :format => :js})
18
- session['clipboard']['elements'].should == [{:id => @element.id, :action => 'copy'}, {:id => @another_element.id, :action => 'copy'}]
19
- end
20
-
21
- it "should not have the same element twice" do
22
- @page = Factory(:page, :parent_id => Alchemy::Page.rootpage.id)
23
- @element = Factory(:element, :page => @page)
24
- session['clipboard'] = { 'elements' => [{:id => @element.id, :action => 'copy'}] }
25
- post(:insert, {:remarkable_type => 'element', :remarkable_id => @element.id, :format => :js})
26
- session['clipboard']['elements'].should == [{:id => @element.id, :action => 'copy'}]
27
- end
28
-
29
- it "should remove element ids" do
30
- @page = Factory(:page, :parent_id => Alchemy::Page.rootpage.id)
31
- @element = Factory(:element, :page => @page)
32
- @another_element = Factory(:element, :page => @page)
33
- session['clipboard'] = { 'elements' => [{:id => @element.id, :action => 'copy'}, {:id => @another_element.id, :action => 'copy'}] }
34
- delete(:remove, {:remarkable_type => 'element', :remarkable_id => @another_element.id, :format => :js})
35
- session['clipboard']['elements'].should == [{:id => @element.id, :action => 'copy'}]
36
- end
37
-
38
- it "should be clearable" do
39
- @page = Factory(:page, :parent_id => Alchemy::Page.rootpage.id)
40
- @element = Factory(:element, :page => @page)
41
- @another_element = Factory(:element, :page => @page)
42
- session['clipboard'] = { 'elements' => [@element.id, @another_element.id] }
43
- delete(:clear, :format => :js)
44
- session['clipboard'].should == {}
45
- end
46
-
47
- end
5
+ before(:each) do
6
+ activate_authlogic
7
+ Alchemy::UserSession.create(Factory(:admin_user))
8
+ end
9
+
10
+ context "clipboard" do
11
+
12
+ it "should hold element ids" do
13
+ @page = Factory(:page, :parent_id => Alchemy::Page.rootpage.id)
14
+ @element = Factory(:element, :page => @page)
15
+ @another_element = Factory(:element, :page => @page)
16
+ session['clipboard'] = {'elements' => [{:id => @element.id, :action => 'copy'}]}
17
+ post(:insert, {:remarkable_type => 'element', :remarkable_id => @another_element.id, :format => :js})
18
+ session['clipboard']['elements'].should == [{:id => @element.id, :action => 'copy'}, {:id => @another_element.id.to_s, :action => 'copy'}]
19
+ end
20
+
21
+ it "should not have the same element twice" do
22
+ @page = Factory(:page, :parent_id => Alchemy::Page.rootpage.id)
23
+ @element = Factory(:element, :page => @page)
24
+ session['clipboard'] = {'elements' => [{:id => @element.id, :action => 'copy'}]}
25
+ post(:insert, {:remarkable_type => 'element', :remarkable_id => @element.id, :format => :js})
26
+ session['clipboard']['elements'].should == [{:id => @element.id, :action => 'copy'}]
27
+ end
28
+
29
+ it "should remove element ids" do
30
+ @page = Factory(:page, :parent_id => Alchemy::Page.rootpage.id)
31
+ @element = Factory(:element, :page => @page)
32
+ @another_element = Factory(:element, :page => @page)
33
+ session['clipboard'] = {'elements' => [{:id => @element.id, :action => 'copy'}, {:id => @another_element.id, :action => 'copy'}]}
34
+ delete(:remove, {:remarkable_type => 'element', :remarkable_id => @another_element.id, :format => :js})
35
+ session['clipboard']['elements'].should == [{:id => @element.id, :action => 'copy'}]
36
+ end
37
+
38
+ it "should be clearable" do
39
+ @page = Factory(:page, :parent_id => Alchemy::Page.rootpage.id)
40
+ @element = Factory(:element, :page => @page)
41
+ @another_element = Factory(:element, :page => @page)
42
+ session['clipboard'] = {'elements' => [@element.id, @another_element.id]}
43
+ delete(:clear, :format => :js)
44
+ session['clipboard'].should == {}
45
+ end
46
+
47
+ end
48
48
 
49
49
  end
@@ -2,34 +2,34 @@ require 'spec_helper'
2
2
 
3
3
  describe Alchemy::Admin::ContentsController do
4
4
 
5
- before(:each) do
6
- activate_authlogic
7
- Alchemy::UserSession.create Factory(:admin_user)
8
- end
5
+ before(:each) do
6
+ activate_authlogic
7
+ Alchemy::UserSession.create Factory(:admin_user)
8
+ end
9
9
 
10
- it "should update a content via ajax" do
11
- @element = Factory(:element)
12
- post :update, {:id => @element.contents.find_by_name('intro').id, :content => {:body => 'Peters Petshop'}, :format => :js}
13
- @element.ingredient('intro').should == "Peters Petshop"
14
- end
10
+ it "should update a content via ajax" do
11
+ @element = Factory(:element)
12
+ post :update, {:id => @element.contents.find_by_name('intro').id, :content => {:body => 'Peters Petshop'}, :format => :js}
13
+ @element.ingredient('intro').should == "Peters Petshop"
14
+ end
15
15
 
16
- describe "#order" do
16
+ describe "#order" do
17
17
 
18
- context "with content_ids in params" do
18
+ context "with content_ids in params" do
19
19
 
20
- before(:each) do
21
- @element = Factory(:element)
22
- end
20
+ before(:each) do
21
+ @element = Factory(:element)
22
+ end
23
23
 
24
- it "should reorder the contents" do
25
- content_ids = @element.contents.essence_texts.collect(&:id)
26
- post :order, {:content_ids => content_ids.reverse, :format => :js}
27
- response.status.should == 200
28
- @element.contents.essence_texts.collect(&:id).should == content_ids.reverse
29
- end
24
+ it "should reorder the contents" do
25
+ content_ids = @element.contents.essence_texts.collect(&:id)
26
+ post :order, {:content_ids => content_ids.reverse, :format => :js}
27
+ response.status.should == 200
28
+ @element.contents.essence_texts.collect(&:id).should == content_ids.reverse
29
+ end
30
30
 
31
- end
31
+ end
32
32
 
33
- end
33
+ end
34
34
 
35
35
  end
@@ -2,21 +2,21 @@ require 'spec_helper'
2
2
 
3
3
  describe Alchemy::Admin::ElementsController do
4
4
 
5
- render_views
5
+ render_views
6
6
 
7
- before(:each) do
8
- activate_authlogic
9
- Alchemy::UserSession.create Factory(:admin_user)
10
- end
7
+ before(:each) do
8
+ activate_authlogic
9
+ Alchemy::UserSession.create Factory(:admin_user)
10
+ end
11
11
 
12
- let(:page) {mock_model('Page', {:id => 1, :urlname => 'lulu'})}
13
- let(:element) {mock_model('Element', {:id => 1, :page_id => page.id, :public => true, :display_name_with_preview_text => 'lalaa', :dom_id => 1})}
12
+ let(:page) { mock_model('Page', {:id => 1, :urlname => 'lulu'}) }
13
+ let(:element) { mock_model('Element', {:id => 1, :page_id => page.id, :public => true, :display_name_with_preview_text => 'lalaa', :dom_id => 1}) }
14
14
 
15
- it "should return a select tag with elements" do
16
- Alchemy::Page.should_receive(:find_by_urlname_and_language_id).and_return(page)
17
- Alchemy::Element.should_receive(:find_all_by_page_id_and_public).and_return([element])
18
- get :list, {:page_urlname => page.urlname, :format => :js}
19
- response.body.should match(/select(.*)elements_from_page_selector(.*)option/)
20
- end
15
+ it "should return a select tag with elements" do
16
+ Alchemy::Page.should_receive(:find_by_urlname_and_language_id).and_return(page)
17
+ Alchemy::Element.should_receive(:find_all_by_page_id_and_public).and_return([element])
18
+ get :list, {:page_urlname => page.urlname, :format => :js}
19
+ response.body.should match(/select(.*)elements_from_page_selector(.*)option/)
20
+ end
21
21
 
22
22
  end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ class Alchemy::Config;
4
+ end
5
+
6
+ describe Alchemy::Admin::LanguagesController do
7
+
8
+ before(:each) do
9
+ activate_authlogic
10
+ Alchemy::UserSession.create Factory(:admin_user)
11
+ end
12
+
13
+ describe "new" do
14
+
15
+ context "when default_language.page_layout is set" do
16
+ it "should use it as page_layout-default for the new language" do
17
+ Alchemy::Config.should_receive(:get).with(:default_language) { {'page_layout' => "new_standard"} }
18
+ get :new
19
+ assigns(:language).page_layout.should eql("new_standard")
20
+ end
21
+ end
22
+
23
+ context "when default_language or page_layout aren't configured" do
24
+ it "should fallback to 'intro'" do
25
+ get :new
26
+ assigns(:language).page_layout.should eql("intro")
27
+ end
28
+ end
29
+
30
+ end
31
+ end
@@ -2,49 +2,18 @@ require 'spec_helper'
2
2
 
3
3
  describe Alchemy::Admin::PagesController do
4
4
 
5
- before(:each) do
6
- activate_authlogic
7
- Alchemy::UserSession.create Factory(:admin_user)
8
- end
5
+ before(:each) do
6
+ activate_authlogic
7
+ Alchemy::UserSession.create Factory(:admin_user)
8
+ end
9
9
 
10
- describe "#flush" do
10
+ describe "#flush" do
11
11
 
12
- it "should remove the cache of all pages" do
13
- post :flush, {:format => :js}
14
- response.status.should == 200
15
- end
12
+ it "should remove the cache of all pages" do
13
+ post :flush, {:format => :js}
14
+ response.status.should == 200
15
+ end
16
16
 
17
- end
18
-
19
- describe '#copy_language_tree' do
20
-
21
- before(:each) do
22
- @language = Alchemy::Language.get_default
23
- @language_root = Factory(:language_root_page, :language => @language, :name => 'Intro')
24
- @level_1 = Factory(:public_page, :language => @language, :parent_id => @language_root.id, :visible => true, :name => 'Level 1')
25
- @level_2 = Factory(:public_page, :language => @language, :parent_id => @level_1.id, :visible => true, :name => 'Level 2')
26
- @level_3 = Factory(:public_page, :language => @language, :parent_id => @level_2.id, :visible => true, :name => 'Level 3')
27
- @level_4 = Factory(:public_page, :language => @language, :parent_id => @level_3.id, :visible => true, :name => 'Level 4')
28
- @new_language = Factory(:language)
29
- session[:language_code] = @new_language.code
30
- session[:language_id] = @new_language.id
31
- post :copy_language_tree, {:languages => {:new_lang_id => @new_language.id, :old_lang_id => @language.id}}
32
- @new_lang_root = Alchemy::Page.language_root_for(@new_language.id)
33
- end
34
-
35
- it "should copy all pages" do
36
- @new_lang_root.descendants.count.should == 4
37
- @new_lang_root.descendants.collect(&:name).should == ["Level 1 (Copy)", "Level 2 (Copy)", "Level 3 (Copy)", "Level 4 (Copy)"]
38
- end
39
-
40
- it "should not set layoutpage attribute to nil" do
41
- @new_lang_root.layoutpage.should_not be_nil
42
- end
43
-
44
- it "should not set layoutpage attribute to true" do
45
- @new_lang_root.layoutpage.should_not be_true
46
- end
47
-
48
- end
17
+ end
49
18
 
50
19
  end
@@ -0,0 +1,19 @@
1
+ require File.dirname(__FILE__) + "/../../../lib/alchemy/resource"
2
+ require File.dirname(__FILE__) + "/../../../lib/alchemy/resources_helper"
3
+
4
+ module Alchemy
5
+ module Admin
6
+ class ResourcesController
7
+ helper Alchemy::ResourcesHelper
8
+ end
9
+ end
10
+ end
11
+
12
+
13
+ describe Alchemy::Admin::ResourcesController do
14
+ describe "index" do
15
+ it "should include ResourcesHelper" do
16
+ Alchemy::Admin::ResourcesController.new.respond_to?(:resource_window_size).should be_true
17
+ end
18
+ end
19
+ end
@@ -2,18 +2,18 @@ require 'spec_helper'
2
2
 
3
3
  describe Alchemy::Admin::TrashController do
4
4
 
5
- render_views
5
+ render_views
6
6
 
7
- before(:each) do
8
- activate_authlogic
9
- Alchemy::UserSession.create Factory(:admin_user)
10
- end
7
+ before(:each) do
8
+ activate_authlogic
9
+ Alchemy::UserSession.create Factory(:admin_user)
10
+ end
11
11
 
12
- it "should hold trashed elements" do
13
- @page = Factory(:page, :parent_id => Alchemy::Page.rootpage.id)
14
- @element = Factory(:element, :page => nil, :public => false, :position => 0, :folded => true)
15
- get :index, :page_id => @page.id
16
- response.body.should have_selector("#trash_items #element_#{@element.id}.element_editor")
17
- end
12
+ it "should hold trashed elements" do
13
+ @page = Factory(:page, :parent_id => Alchemy::Page.rootpage.id)
14
+ @element = Factory(:element, :page => nil, :public => false, :position => 0, :folded => true)
15
+ get :index, :page_id => @page.id
16
+ response.body.should have_selector("#trash_items #element_#{@element.id}.element_editor")
17
+ end
18
18
 
19
19
  end
@@ -2,66 +2,66 @@ require 'spec_helper'
2
2
 
3
3
  describe Alchemy::BaseController do
4
4
 
5
- describe "#set_language_from" do
5
+ describe "#set_language_from" do
6
6
 
7
- it "should set the language from id" do
8
- @language = Alchemy::Language.get_default
9
- controller.send :set_language_from, @language.id
10
- controller.session[:language_id].should == @language.id
11
- end
7
+ it "should set the language from id" do
8
+ @language = Alchemy::Language.get_default
9
+ controller.send :set_language_from, @language.id
10
+ controller.session[:language_id].should == @language.id
11
+ end
12
12
 
13
- it "should set the language from code" do
14
- @language = Factory(:language, :code => 'kl')
15
- controller.send :set_language_from, "kl"
16
- controller.session[:language_id].should == @language.id
17
- controller.session[:language_code].should == @language.code
18
- end
13
+ it "should set the language from code" do
14
+ @language = Factory(:language, :code => 'kl')
15
+ controller.send :set_language_from, "kl"
16
+ controller.session[:language_id].should == @language.id
17
+ controller.session[:language_code].should == @language.code
18
+ end
19
19
 
20
- it "should set the language from id as string" do
21
- @language = Factory(:language)
22
- controller.send :set_language_from, @language.id.to_s
23
- controller.session[:language_id].should == @language.id
24
- controller.session[:language_code].should == @language.code
25
- end
20
+ it "should set the language from id as string" do
21
+ @language = Factory(:language)
22
+ controller.send :set_language_from, @language.id.to_s
23
+ controller.session[:language_id].should == @language.id
24
+ controller.session[:language_code].should == @language.code
25
+ end
26
26
 
27
- end
27
+ end
28
28
 
29
- describe "#set_language" do
29
+ describe "#set_language" do
30
30
 
31
- context "with no lang param" do
31
+ context "with no lang param" do
32
32
 
33
- it "should set the default language" do
34
- controller.stub!(:params).and_return({})
35
- controller.send :set_language
36
- controller.session[:language_id].should == Alchemy::Language.get_default.id
37
- controller.session[:language_code].should == Alchemy::Language.get_default.code
38
- end
33
+ it "should set the default language" do
34
+ controller.stub!(:params).and_return({})
35
+ controller.send :set_language
36
+ controller.session[:language_id].should == Alchemy::Language.get_default.id
37
+ controller.session[:language_code].should == Alchemy::Language.get_default.code
38
+ end
39
39
 
40
- end
40
+ end
41
41
 
42
- context "with lang param" do
42
+ context "with lang param" do
43
43
 
44
- it "should set the language" do
45
- @language = Factory(:language)
46
- controller.stub!(:params).and_return({:lang => 'kl'})
47
- controller.send :set_language
48
- controller.session[:language_id].should == @language.id
49
- controller.session[:language_code].should == @language.code
50
- end
44
+ it "should set the language" do
45
+ @language = Factory(:language)
46
+ controller.stub!(:params).and_return({:lang => 'kl'})
47
+ controller.send :set_language
48
+ controller.session[:language_id].should == @language.id
49
+ controller.session[:language_code].should == @language.code
50
+ end
51
51
 
52
- context "for language that does not exist" do
52
+ context "for language that does not exist" do
53
53
 
54
- it "should set the language to default" do
55
- controller.stub!(:params).and_return({:lang => 'fo'})
56
- controller.send :set_language
57
- controller.session[:language_id].should == Alchemy::Language.get_default.id
58
- controller.session[:language_code].should == Alchemy::Language.get_default.code
59
- end
54
+ it "should set the language to default" do
55
+ controller.stub!(:params).and_return({:lang => 'fo'})
56
+ controller.send :set_language
57
+ controller.session[:language_id].should == Alchemy::Language.get_default.id
58
+ controller.session[:language_code].should == Alchemy::Language.get_default.code
59
+ end
60
60
 
61
- end
61
+ end
62
62
 
63
- end
63
+ end
64
64
 
65
- end
65
+ end
66
66
 
67
67
  end
@@ -2,132 +2,142 @@ require 'spec_helper'
2
2
 
3
3
  describe Alchemy::PagesController do
4
4
 
5
- render_views
5
+ render_views
6
6
 
7
- before(:each) do
8
- @default_language = Alchemy::Language.get_default
9
- @default_language_root = Factory(:language_root_page, :language => @default_language, :name => 'Home', :public => true)
10
- end
7
+ before(:each) do
8
+ @default_language = Alchemy::Language.get_default
9
+ @default_language_root = Factory(:language_root_page, :language => @default_language, :name => 'Home', :public => true)
10
+ end
11
11
 
12
- context "requested for a page containing a feed" do
12
+ context "requested for a page containing a feed" do
13
13
 
14
- before(:each) do
15
- @page = Factory(:public_page, :parent_id => @default_language_root.id, :page_layout => 'news', :name => 'News', :language => @default_language)
16
- end
14
+ before(:each) do
15
+ @page = Factory(:public_page, :parent_id => @default_language_root.id, :page_layout => 'news', :name => 'News', :language => @default_language)
16
+ end
17
17
 
18
- it "should render a rss feed" do
19
- get :show, :urlname => 'news', :format => :rss
20
- response.content_type.should == 'application/rss+xml'
21
- end
18
+ it "should render a rss feed" do
19
+ get :show, :urlname => 'news', :format => :rss
20
+ response.content_type.should == 'application/rss+xml'
21
+ end
22
22
 
23
- it "should include content" do
24
- @page.elements.first.content_by_name('news_headline').essence.update_attributes({:body => 'Peters Petshop'})
25
- get :show, :urlname => 'news', :format => :rss
26
- response.body.should match /Peters Petshop/
27
- end
28
-
29
- end
23
+ it "should include content" do
24
+ @page.elements.first.content_by_name('news_headline').essence.update_attributes({:body => 'Peters Petshop'})
25
+ get :show, :urlname => 'news', :format => :rss
26
+ response.body.should match /Peters Petshop/
27
+ end
30
28
 
31
- context "requested for a page that does not contain a feed" do
29
+ end
32
30
 
33
- it "should render xml 404 error" do
34
- get :show, :urlname => 'home', :format => :rss
35
- response.status.should == 404
36
- end
31
+ context "requested for a page that does not contain a feed" do
37
32
 
38
- end
33
+ it "should render xml 404 error" do
34
+ get :show, :urlname => 'home', :format => :rss
35
+ response.status.should == 404
36
+ end
39
37
 
40
- describe "Layout rendering" do
38
+ end
41
39
 
42
- context "with param layout set to none" do
40
+ describe "Layout rendering" do
43
41
 
44
- it "should not render a layout" do
45
- get :show, :urlname => :home, :layout => false
46
- response.body.should_not have_content('<head>')
47
- end
42
+ context "with param layout set to none" do
48
43
 
49
- end
44
+ it "should not render a layout" do
45
+ get :show, :urlname => :home, :layout => false
46
+ response.body.should_not have_content('<head>')
47
+ end
50
48
 
51
- context "with param layout set to a custom layout" do
49
+ end
52
50
 
53
- before do
54
- @custom_layout = Rails.root.join('app/views/layouts', 'custom.html.erb')
55
- File.open(@custom_layout, 'w') do |custom_layout|
56
- custom_layout.puts "<html>I am a custom layout</html>"
57
- end
58
- end
51
+ context "with param layout set to a custom layout" do
59
52
 
60
- it "should render the custom layout" do
61
- get :show, :urlname => :home, :layout => 'custom'
62
- response.body.should have_content('I am a custom layout')
63
- end
53
+ before do
54
+ @custom_layout = Rails.root.join('app/views/layouts', 'custom.html.erb')
55
+ File.open(@custom_layout, 'w') do |custom_layout|
56
+ custom_layout.puts "<html>I am a custom layout</html>"
57
+ end
58
+ end
64
59
 
65
- after do
66
- FileUtils.rm(@custom_layout)
67
- end
60
+ it "should render the custom layout" do
61
+ get :show, :urlname => :home, :layout => 'custom'
62
+ response.body.should have_content('I am a custom layout')
63
+ end
68
64
 
69
- end
65
+ after do
66
+ FileUtils.rm(@custom_layout)
67
+ end
70
68
 
71
- context "with application layout absent" do
69
+ end
72
70
 
73
- it "should render pages layout" do
74
- get :show, :urlname => :home
75
- response.body.should_not have_content('I am the application layout')
76
- end
71
+ context "with application layout absent" do
77
72
 
78
- end
73
+ it "should render pages layout" do
74
+ get :show, :urlname => :home
75
+ response.body.should_not have_content('I am the application layout')
76
+ end
79
77
 
80
- context "with application layout present" do
78
+ end
81
79
 
82
- before do
83
- @app_layout = Rails.root.join('app/views/layouts', 'application.html.erb')
84
- File.open(@app_layout, 'w') do |app_layout|
85
- app_layout.puts "<html>I am the application layout</html>"
86
- end
87
- end
80
+ context "with application layout present" do
88
81
 
89
- it "should render application layout" do
90
- get :show, :urlname => :home
91
- response.body.should have_content('I am the application layout')
92
- end
82
+ before do
83
+ @app_layout = Rails.root.join('app/views/layouts', 'application.html.erb')
84
+ File.open(@app_layout, 'w') do |app_layout|
85
+ app_layout.puts "<html>I am the application layout</html>"
86
+ end
87
+ end
93
88
 
94
- after do
95
- FileUtils.rm(@app_layout)
96
- end
89
+ it "should render application layout" do
90
+ get :show, :urlname => :home
91
+ response.body.should have_content('I am the application layout')
92
+ end
97
93
 
98
- end
94
+ after do
95
+ FileUtils.rm(@app_layout)
96
+ end
99
97
 
100
- end
98
+ end
101
99
 
102
- describe "url nesting" do
100
+ end
103
101
 
104
- before(:each) do
105
- @catalog = Factory(:public_page, :name => "Catalog", :parent_id => @default_language_root.id, :language => @default_language)
106
- @products = Factory(:public_page, :name => "Products", :parent_id => @catalog.id, :language => @default_language)
107
- @product = Factory(:public_page, :name => "Screwdriver", :parent_id => @products.id, :language => @default_language)
108
- @product.elements.find_by_name('article').contents.essence_texts.first.essence.update_attribute(:body, 'screwdriver')
109
- controller.stub!(:configuration) { |arg| arg == :url_nesting ? true : false }
110
- end
102
+ describe "url nesting" do
111
103
 
112
- context "with correct levelnames in params" do
104
+ before(:each) do
105
+ @catalog = Factory(:public_page, :name => "Catalog", :parent_id => @default_language_root.id, :language => @default_language)
106
+ @products = Factory(:public_page, :name => "Products", :parent_id => @catalog.id, :language => @default_language)
107
+ @product = Factory(:public_page, :name => "Screwdriver", :parent_id => @products.id, :language => @default_language)
108
+ @product.elements.find_by_name('article').contents.essence_texts.first.essence.update_attribute(:body, 'screwdriver')
109
+ controller.stub!(:configuration) { |arg| arg == :url_nesting ? true : false }
110
+ end
113
111
 
114
- it "should show the requested page" do
115
- get :show, {:level1 => 'catalog', :level2 => 'products', :urlname => 'screwdriver'}
116
- response.status.should == 200
117
- response.body.should have_content("screwdriver")
118
- end
112
+ context "with correct levelnames in params" do
119
113
 
120
- end
114
+ it "should show the requested page" do
115
+ get :show, {:level1 => 'catalog', :level2 => 'products', :urlname => 'screwdriver'}
116
+ response.status.should == 200
117
+ response.body.should have_content("screwdriver")
118
+ end
121
119
 
122
- context "with incorrect levelnames in params" do
120
+ end
123
121
 
124
- it "should show 404 page" do
125
- get :show, {:level1 => 'catalog', :level2 => 'faqs', :urlname => 'screwdriver'}
126
- response.status.should == 404
127
- end
122
+ context "with incorrect levelnames in params" do
128
123
 
129
- end
124
+ it "should raise a RoutingError that is in turn handled by rails (as 404 status)" do
125
+ expect {
126
+ get :show, {:level1 => 'catalog', :level2 => 'faqs', :urlname => 'screwdriver'}
127
+ }.to raise_error(ActionController::RoutingError)
128
+ end
130
129
 
131
- end
130
+ end
131
+
132
+ end
133
+
134
+ context "when a non-existent page is requested" do
135
+ it "should raise a RoutingError (that is handled by rails, see integration specs)" do
136
+ Factory(:admin_user) # otherwise we are redirected to create_user
137
+ expect {
138
+ get :show, {:urlname => 'doesntexist'}
139
+ }.to raise_error(ActionController::RoutingError)
140
+ end
141
+ end
132
142
 
133
143
  end