alchemy_cms 3.2.1 → 3.3.0.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 (556) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +28 -0
  3. data/.gitignore +2 -2
  4. data/.travis.yml +11 -3
  5. data/CHANGELOG.md +100 -0
  6. data/CONTRIBUTING.md +1 -1
  7. data/Gemfile +12 -1
  8. data/README.md +25 -7
  9. data/Rakefile +1 -3
  10. data/alchemy_cms.gemspec +7 -15
  11. data/app/assets/fonts/alchemy/icons.eot +0 -0
  12. data/app/assets/fonts/alchemy/icons.svg +28 -66
  13. data/app/assets/fonts/alchemy/icons.ttf +0 -0
  14. data/app/assets/fonts/alchemy/icons.woff +0 -0
  15. data/app/assets/images/alchemy/icons.png +0 -0
  16. data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +10 -3
  17. data/app/assets/javascripts/alchemy/alchemy.buttons.js.coffee +15 -6
  18. data/app/assets/javascripts/alchemy/alchemy.char_counter.js.coffee +1 -1
  19. data/app/assets/javascripts/alchemy/alchemy.datepicker.js.coffee +1 -1
  20. data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +10 -4
  21. data/app/assets/javascripts/alchemy/alchemy.dirty.js.coffee +16 -22
  22. data/app/assets/javascripts/alchemy/alchemy.dragndrop.js.coffee +69 -32
  23. data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +147 -83
  24. data/app/assets/javascripts/alchemy/alchemy.file_progress.js.coffee +14 -14
  25. data/app/assets/javascripts/alchemy/alchemy.hotkeys.js.coffee +1 -1
  26. data/app/assets/javascripts/alchemy/alchemy.i18n.js.coffee +1 -1
  27. data/app/assets/javascripts/alchemy/alchemy.image_overlay.coffee +55 -0
  28. data/app/assets/javascripts/alchemy/alchemy.initializer.js.coffee +8 -1
  29. data/app/assets/javascripts/alchemy/alchemy.js +3 -1
  30. data/app/assets/javascripts/alchemy/alchemy.link_dialog.js.coffee +36 -31
  31. data/app/assets/javascripts/alchemy/alchemy.preview.js.coffee +35 -29
  32. data/app/assets/javascripts/alchemy/alchemy.sitemap.js.coffee +51 -5
  33. data/app/assets/javascripts/alchemy/alchemy.tinymce.js.coffee +26 -10
  34. data/app/assets/javascripts/alchemy/{alchemy.windows.js.coffee → alchemy.trash_window.js.coffee} +1 -13
  35. data/app/assets/javascripts/alchemy/alchemy.uploader.js.coffee +15 -17
  36. data/app/assets/javascripts/tinymce/plugins/alchemy_link/plugin.min.js +3 -3
  37. data/app/assets/stylesheets/alchemy/_extends.scss +1 -1
  38. data/app/assets/stylesheets/alchemy/_mixins.scss +27 -0
  39. data/app/assets/stylesheets/alchemy/_variables.scss +1 -0
  40. data/app/assets/stylesheets/alchemy/admin.scss +1 -0
  41. data/app/assets/stylesheets/alchemy/archive.scss +0 -57
  42. data/app/assets/stylesheets/alchemy/base.scss +1 -18
  43. data/app/assets/stylesheets/alchemy/buttons.scss +30 -25
  44. data/app/assets/stylesheets/alchemy/dialogs.scss +25 -9
  45. data/app/assets/stylesheets/alchemy/elements.scss +182 -126
  46. data/app/assets/stylesheets/alchemy/form_fields.scss +14 -8
  47. data/app/assets/stylesheets/alchemy/forms.scss +10 -1
  48. data/app/assets/stylesheets/alchemy/frame.scss +3 -10
  49. data/app/assets/stylesheets/alchemy/icon-font.scss +13 -6
  50. data/app/assets/stylesheets/alchemy/icons.scss +16 -0
  51. data/app/assets/stylesheets/alchemy/image_library.scss +269 -0
  52. data/app/assets/stylesheets/alchemy/selects.scss +1 -0
  53. data/app/assets/stylesheets/alchemy/sitemap.scss +12 -1
  54. data/app/assets/stylesheets/alchemy/toolbar.scss +2 -2
  55. data/app/assets/stylesheets/alchemy/upload.scss +97 -87
  56. data/app/assets/stylesheets/alchemy/welcome.sass +49 -0
  57. data/app/controllers/alchemy/admin/attachments_controller.rb +21 -29
  58. data/app/controllers/alchemy/admin/base_controller.rb +23 -4
  59. data/app/controllers/alchemy/admin/clipboard_controller.rb +0 -1
  60. data/app/controllers/alchemy/admin/contents_controller.rb +2 -4
  61. data/app/controllers/alchemy/admin/dashboard_controller.rb +4 -4
  62. data/app/controllers/alchemy/admin/elements_controller.rb +20 -11
  63. data/app/controllers/alchemy/admin/essence_files_controller.rb +2 -2
  64. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +10 -9
  65. data/app/controllers/alchemy/admin/languages_controller.rb +0 -1
  66. data/app/controllers/alchemy/admin/layoutpages_controller.rb +0 -2
  67. data/app/controllers/alchemy/admin/legacy_page_urls_controller.rb +0 -1
  68. data/app/controllers/alchemy/admin/pages_controller.rb +46 -29
  69. data/app/controllers/alchemy/admin/pictures_controller.rb +44 -55
  70. data/app/controllers/alchemy/admin/resources_controller.rb +8 -75
  71. data/app/controllers/alchemy/admin/tags_controller.rb +10 -8
  72. data/app/controllers/alchemy/admin/trash_controller.rb +0 -6
  73. data/app/controllers/alchemy/api/contents_controller.rb +0 -1
  74. data/app/controllers/alchemy/api/elements_controller.rb +0 -1
  75. data/app/controllers/alchemy/api/pages_controller.rb +4 -1
  76. data/app/controllers/alchemy/attachments_controller.rb +4 -5
  77. data/app/controllers/alchemy/base_controller.rb +6 -5
  78. data/app/controllers/alchemy/elements_controller.rb +1 -1
  79. data/app/controllers/alchemy/messages_controller.rb +9 -4
  80. data/app/controllers/alchemy/pages_controller.rb +133 -137
  81. data/app/controllers/alchemy/pictures_controller.rb +12 -10
  82. data/app/controllers/concerns/alchemy/admin/uploader_responses.rb +41 -0
  83. data/app/controllers/concerns/alchemy/legacy_page_redirects.rb +56 -0
  84. data/app/controllers/concerns/alchemy/locale_redirects.rb +38 -0
  85. data/app/controllers/concerns/alchemy/page_redirects.rb +80 -0
  86. data/app/controllers/concerns/alchemy/site_redirects.rb +22 -0
  87. data/app/helpers/alchemy/admin/attachments_helper.rb +1 -2
  88. data/app/helpers/alchemy/admin/base_helper.rb +36 -62
  89. data/app/helpers/alchemy/admin/contents_helper.rb +6 -80
  90. data/app/helpers/alchemy/admin/elements_helper.rb +36 -15
  91. data/app/helpers/alchemy/admin/essences_helper.rb +15 -8
  92. data/app/helpers/alchemy/admin/form_helper.rb +6 -10
  93. data/app/helpers/alchemy/admin/navigation_helper.rb +4 -7
  94. data/app/helpers/alchemy/admin/pages_helper.rb +14 -35
  95. data/app/helpers/alchemy/admin/pictures_helper.rb +12 -14
  96. data/app/helpers/alchemy/admin/tags_helper.rb +5 -7
  97. data/app/helpers/alchemy/base_helper.rb +9 -17
  98. data/app/helpers/alchemy/elements_block_helper.rb +5 -13
  99. data/app/helpers/alchemy/elements_helper.rb +6 -6
  100. data/app/helpers/alchemy/essences_helper.rb +3 -16
  101. data/app/helpers/alchemy/pages_helper.rb +32 -25
  102. data/app/helpers/alchemy/url_helper.rb +14 -16
  103. data/app/mailers/alchemy/messages.rb +0 -2
  104. data/app/models/alchemy.rb +0 -2
  105. data/app/models/alchemy/attachment.rb +45 -56
  106. data/app/models/alchemy/cell.rb +7 -8
  107. data/app/models/alchemy/content.rb +39 -24
  108. data/app/models/alchemy/content/factory.rb +27 -44
  109. data/app/models/alchemy/element.rb +101 -267
  110. data/app/models/alchemy/element/definitions.rb +9 -8
  111. data/app/models/alchemy/element/element_contents.rb +150 -0
  112. data/app/models/alchemy/element/element_essences.rb +109 -0
  113. data/app/models/alchemy/element/presenters.rb +18 -7
  114. data/app/models/alchemy/essence_date.rb +1 -2
  115. data/app/models/alchemy/essence_file.rb +10 -6
  116. data/app/models/alchemy/essence_html.rb +0 -1
  117. data/app/models/alchemy/essence_picture.rb +12 -4
  118. data/app/models/alchemy/essence_richtext.rb +6 -3
  119. data/app/models/alchemy/language.rb +48 -21
  120. data/app/models/alchemy/language/code.rb +1 -4
  121. data/app/models/alchemy/page.rb +33 -35
  122. data/app/models/alchemy/page/page_cells.rb +6 -10
  123. data/app/models/alchemy/page/page_elements.rb +130 -100
  124. data/app/models/alchemy/page/page_naming.rb +2 -3
  125. data/app/models/alchemy/page/page_natures.rb +50 -16
  126. data/app/models/alchemy/page/page_scopes.rb +7 -7
  127. data/app/models/alchemy/page/page_users.rb +3 -3
  128. data/app/models/alchemy/picture.rb +48 -33
  129. data/app/models/alchemy/picture/transformations.rb +8 -9
  130. data/app/models/alchemy/site.rb +19 -17
  131. data/app/models/alchemy/site/layout.rb +9 -9
  132. data/app/models/alchemy/tag.rb +0 -2
  133. data/app/models/alchemy/tree_node.rb +5 -4
  134. data/app/serializers/alchemy/attachment_serializer.rb +0 -1
  135. data/app/serializers/alchemy/base_serializer.rb +30 -0
  136. data/app/serializers/alchemy/cell_serializer.rb +0 -1
  137. data/app/serializers/alchemy/essence_boolean_serializer.rb +0 -1
  138. data/app/serializers/alchemy/essence_date_serializer.rb +0 -1
  139. data/app/serializers/alchemy/essence_file_serializer.rb +0 -1
  140. data/app/serializers/alchemy/essence_html_serializer.rb +0 -1
  141. data/app/serializers/alchemy/essence_link_serializer.rb +0 -1
  142. data/app/serializers/alchemy/essence_picture_serializer.rb +0 -1
  143. data/app/serializers/alchemy/essence_richtext_serializer.rb +0 -1
  144. data/app/serializers/alchemy/essence_select_serializer.rb +0 -1
  145. data/app/serializers/alchemy/essence_text_serializer.rb +0 -1
  146. data/app/serializers/alchemy/legacy_element_serializer.rb +0 -1
  147. data/app/serializers/alchemy/page_serializer.rb +0 -1
  148. data/app/serializers/alchemy/page_tree_serializer.rb +90 -0
  149. data/app/serializers/alchemy/picture_serializer.rb +0 -1
  150. data/app/views/alchemy/_menubar.html.erb +3 -3
  151. data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +11 -16
  152. data/app/views/alchemy/admin/attachments/_attachment.html.erb +9 -9
  153. data/app/views/alchemy/admin/attachments/_files_list.html.erb +7 -15
  154. data/app/views/alchemy/admin/attachments/_overlay_file_list.html.erb +1 -1
  155. data/app/views/alchemy/admin/attachments/_tag_list.html.erb +2 -2
  156. data/app/views/alchemy/admin/attachments/edit.html.erb +3 -3
  157. data/app/views/alchemy/admin/attachments/index.html.erb +10 -17
  158. data/app/views/alchemy/admin/clipboard/clear.js.erb +1 -1
  159. data/app/views/alchemy/admin/clipboard/index.html.erb +3 -3
  160. data/app/views/alchemy/admin/clipboard/insert.js.erb +3 -3
  161. data/app/views/alchemy/admin/clipboard/remove.js.erb +2 -2
  162. data/app/views/alchemy/admin/contents/_missing.html.erb +5 -7
  163. data/app/views/alchemy/admin/contents/create.js.erb +1 -1
  164. data/app/views/alchemy/admin/contents/new.html.erb +2 -2
  165. data/app/views/alchemy/admin/dashboard/_locked_pages.html.erb +6 -6
  166. data/app/views/alchemy/admin/dashboard/_recent_pages.html.erb +2 -2
  167. data/app/views/alchemy/admin/dashboard/_users.html.erb +2 -2
  168. data/app/views/alchemy/admin/dashboard/help.html.erb +15 -15
  169. data/app/views/alchemy/admin/dashboard/index.html.erb +6 -6
  170. data/app/views/alchemy/admin/dashboard/info.html.erb +5 -5
  171. data/app/views/alchemy/admin/elements/_add_picture.html.erb +1 -1
  172. data/app/views/alchemy/admin/elements/_element.html.erb +52 -18
  173. data/app/views/alchemy/admin/elements/_element_footer.html.erb +11 -0
  174. data/app/views/alchemy/admin/elements/{_element_head.html.erb → _element_header.html.erb} +8 -8
  175. data/app/views/alchemy/admin/elements/_element_toolbar.html.erb +49 -0
  176. data/app/views/alchemy/admin/elements/_new_element_form.html.erb +7 -6
  177. data/app/views/alchemy/admin/elements/_picture_gallery_editor.html.erb +1 -1
  178. data/app/views/alchemy/admin/elements/_refresh_editor.js.erb +1 -1
  179. data/app/views/alchemy/admin/elements/create.js.erb +13 -8
  180. data/app/views/alchemy/admin/elements/fold.js.erb +12 -7
  181. data/app/views/alchemy/admin/elements/index.html.erb +12 -8
  182. data/app/views/alchemy/admin/elements/list.html.erb +3 -3
  183. data/app/views/alchemy/admin/elements/new.html.erb +4 -4
  184. data/app/views/alchemy/admin/elements/order.js.erb +3 -4
  185. data/app/views/alchemy/admin/elements/publish.js.erb +15 -0
  186. data/app/views/alchemy/admin/elements/trash.js.erb +3 -3
  187. data/app/views/alchemy/admin/elements/update.js.erb +7 -8
  188. data/app/views/alchemy/admin/essence_files/edit.html.erb +16 -13
  189. data/app/views/alchemy/admin/essence_pictures/crop.html.erb +3 -3
  190. data/app/views/alchemy/admin/essence_pictures/edit.html.erb +8 -8
  191. data/app/views/alchemy/admin/languages/_form.html.erb +12 -3
  192. data/app/views/alchemy/admin/languages/_language.html.erb +8 -2
  193. data/app/views/alchemy/admin/languages/_table.html.erb +11 -5
  194. data/app/views/alchemy/admin/languages/index.html.erb +1 -1
  195. data/app/views/alchemy/admin/layoutpages/_layoutpage.html.erb +8 -8
  196. data/app/views/alchemy/admin/layoutpages/edit.html.erb +2 -2
  197. data/app/views/alchemy/admin/layoutpages/index.html.erb +6 -13
  198. data/app/views/alchemy/admin/leave.html.erb +5 -5
  199. data/app/views/alchemy/admin/legacy_page_urls/_form.html.erb +1 -1
  200. data/app/views/alchemy/admin/legacy_page_urls/_legacy_page_url.html.erb +4 -4
  201. data/app/views/alchemy/admin/legacy_page_urls/_new.html.erb +1 -1
  202. data/app/views/alchemy/admin/pages/_create_language_form.html.erb +9 -9
  203. data/app/views/alchemy/admin/pages/_external_link.html.erb +6 -6
  204. data/app/views/alchemy/admin/pages/_file_link.html.erb +6 -6
  205. data/app/views/alchemy/admin/pages/_form.html.erb +6 -6
  206. data/app/views/alchemy/admin/pages/_internal_link.html.erb +9 -11
  207. data/app/views/alchemy/admin/pages/_legacy_urls.html.erb +3 -3
  208. data/app/views/alchemy/admin/pages/_locked_page.html.erb +4 -4
  209. data/app/views/alchemy/admin/pages/_new_page_form.html.erb +2 -2
  210. data/app/views/alchemy/admin/pages/_page.html.erb +95 -80
  211. data/app/views/alchemy/admin/pages/_page_for_links.html.erb +22 -22
  212. data/app/views/alchemy/admin/pages/_page_infos.html.erb +12 -0
  213. data/app/views/alchemy/admin/pages/_page_status.html.erb +7 -9
  214. data/app/views/alchemy/admin/pages/_sitemap.html.erb +35 -6
  215. data/app/views/alchemy/admin/pages/_tinymce_custom_config.html.erb +0 -3
  216. data/app/views/alchemy/admin/pages/configure.html.erb +1 -1
  217. data/app/views/alchemy/admin/pages/configure_external.html.erb +4 -4
  218. data/app/views/alchemy/admin/pages/edit.html.erb +39 -44
  219. data/app/views/alchemy/admin/pages/flush.js.erb +1 -1
  220. data/app/views/alchemy/admin/pages/fold.js.erb +2 -3
  221. data/app/views/alchemy/admin/pages/index.html.erb +15 -22
  222. data/app/views/alchemy/admin/pages/info.html.erb +8 -8
  223. data/app/views/alchemy/admin/pages/link.html.erb +3 -3
  224. data/app/views/alchemy/admin/pages/locked.html.erb +1 -1
  225. data/app/views/alchemy/admin/pages/new.html.erb +4 -4
  226. data/app/views/alchemy/admin/pages/sort.js.erb +1 -2
  227. data/app/views/alchemy/admin/pages/unlock.js.erb +1 -1
  228. data/app/views/alchemy/admin/pages/update.js.erb +3 -3
  229. data/app/views/alchemy/admin/partials/_autocomplete_tag_list.html.erb +1 -1
  230. data/app/views/alchemy/admin/partials/_language_tree_select.html.erb +1 -1
  231. data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +1 -1
  232. data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +9 -15
  233. data/app/views/alchemy/admin/partials/_search_form.html.erb +14 -13
  234. data/app/views/alchemy/admin/partials/_sub_navigation.html.erb +1 -1
  235. data/app/views/alchemy/admin/pictures/_archive.html.erb +14 -14
  236. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +30 -36
  237. data/app/views/alchemy/admin/pictures/_filter_bar.html.erb +5 -5
  238. data/app/views/alchemy/admin/pictures/{edit.html.erb → _form.html.erb} +7 -6
  239. data/app/views/alchemy/admin/pictures/_infos.html.erb +50 -0
  240. data/app/views/alchemy/admin/pictures/_overlay_picture_list.html.erb +1 -1
  241. data/app/views/alchemy/admin/pictures/_picture.html.erb +17 -51
  242. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +1 -1
  243. data/app/views/alchemy/admin/pictures/_tag_list.html.erb +2 -2
  244. data/app/views/alchemy/admin/pictures/edit_multiple.html.erb +6 -6
  245. data/app/views/alchemy/admin/pictures/index.html.erb +28 -36
  246. data/app/views/alchemy/admin/pictures/show.html.erb +46 -9
  247. data/app/views/alchemy/admin/pictures/update.js.erb +6 -0
  248. data/app/views/alchemy/admin/resources/_form.html.erb +3 -3
  249. data/app/views/alchemy/admin/resources/_resource.html.erb +4 -4
  250. data/app/views/alchemy/admin/resources/_table.html.erb +5 -6
  251. data/app/views/alchemy/admin/resources/index.csv.erb +12 -10
  252. data/app/views/alchemy/admin/resources/index.html.erb +4 -4
  253. data/app/views/alchemy/admin/sites/index.html.erb +1 -1
  254. data/app/views/alchemy/admin/tags/_tag.html.erb +4 -4
  255. data/app/views/alchemy/admin/tags/edit.html.erb +5 -5
  256. data/app/views/alchemy/admin/tags/index.html.erb +8 -8
  257. data/app/views/alchemy/admin/tags/new.html.erb +2 -2
  258. data/app/views/alchemy/admin/trash/clear.js.erb +1 -1
  259. data/app/views/alchemy/admin/trash/index.html.erb +8 -6
  260. data/app/views/alchemy/admin/uploader/_button.html.erb +39 -0
  261. data/app/views/alchemy/admin/uploader/_setup.html.erb +13 -0
  262. data/app/views/alchemy/base/500.html.erb +4 -4
  263. data/app/views/alchemy/elements/_editor_not_found.html.erb +1 -1
  264. data/app/views/alchemy/essences/_essence_boolean_editor.html.erb +3 -4
  265. data/app/views/alchemy/essences/_essence_boolean_view.html.erb +1 -1
  266. data/app/views/alchemy/essences/_essence_date_editor.html.erb +2 -6
  267. data/app/views/alchemy/essences/_essence_date_view.html.erb +1 -1
  268. data/app/views/alchemy/essences/_essence_file_editor.html.erb +9 -11
  269. data/app/views/alchemy/essences/_essence_file_view.html.erb +11 -5
  270. data/app/views/alchemy/essences/_essence_html_editor.html.erb +1 -1
  271. data/app/views/alchemy/essences/_essence_link_editor.html.erb +1 -1
  272. data/app/views/alchemy/essences/_essence_link_view.html.erb +1 -1
  273. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +47 -52
  274. data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +1 -1
  275. data/app/views/alchemy/essences/_essence_richtext_view.html.erb +1 -1
  276. data/app/views/alchemy/essences/_essence_select_editor.html.erb +23 -13
  277. data/app/views/alchemy/essences/_essence_text_editor.html.erb +1 -1
  278. data/app/views/alchemy/essences/_essence_text_view.html.erb +1 -1
  279. data/app/views/alchemy/essences/shared/_essence_picture_tools.html.erb +29 -36
  280. data/app/views/alchemy/essences/shared/_linkable_essence_tools.html.erb +5 -5
  281. data/app/views/alchemy/language_links/_language.html.erb +15 -9
  282. data/app/views/alchemy/messages/contact_form_mail.de.text.erb +1 -1
  283. data/app/views/alchemy/messages/contact_form_mail.en.text.erb +1 -1
  284. data/app/views/alchemy/messages/contact_form_mail.es.text.erb +1 -1
  285. data/app/views/alchemy/navigation/_link.html.erb +0 -1
  286. data/app/views/alchemy/pages/show.rss.builder +6 -4
  287. data/app/views/alchemy/welcome.html.erb +28 -0
  288. data/app/views/layouts/alchemy/admin.html.erb +14 -10
  289. data/bin/alchemy +3 -4
  290. data/bin/rspec +7 -0
  291. data/bin/spring +15 -0
  292. data/config/alchemy/config.yml +16 -17
  293. data/config/initializers/assets.rb +13 -0
  294. data/config/locales/alchemy.de.yml +27 -29
  295. data/config/locales/alchemy.en.yml +23 -29
  296. data/config/locales/alchemy.es.yml +23 -29
  297. data/config/locales/alchemy.fr.yml +19 -28
  298. data/config/locales/alchemy.nl.yml +19 -27
  299. data/config/locales/alchemy.ru.yml +19 -28
  300. data/config/routes.rb +53 -54
  301. data/config/spring.rb +2 -0
  302. data/db/migrate/20130827094554_alchemy_two_point_six.rb +1 -3
  303. data/db/migrate/20150608204610_add_parent_element_id_to_alchemy_elements.rb +6 -0
  304. data/db/migrate/20150729151825_add_link_text_to_alchemy_essence_files.rb +5 -0
  305. data/db/migrate/20150906195818_add_locale_to_alchemy_languages.rb +7 -0
  306. data/lib/alchemy/auth_accessors.rb +1 -1
  307. data/lib/alchemy/cache_digests/template_tracker.rb +7 -13
  308. data/lib/alchemy/config.rb +5 -7
  309. data/lib/alchemy/configuration_methods.rb +11 -1
  310. data/lib/alchemy/controller_actions.rb +9 -12
  311. data/lib/alchemy/engine.rb +11 -28
  312. data/lib/alchemy/errors.rb +0 -1
  313. data/lib/alchemy/essence.rb +20 -20
  314. data/lib/alchemy/filetypes.rb +1 -3
  315. data/lib/alchemy/forms/builder.rb +0 -2
  316. data/lib/alchemy/hints.rb +1 -3
  317. data/lib/alchemy/i18n.rb +81 -53
  318. data/lib/alchemy/kaminari/scoped_pagination_url_helper.rb +0 -2
  319. data/lib/alchemy/locale.rb +0 -1
  320. data/lib/alchemy/logger.rb +1 -3
  321. data/lib/alchemy/modules.rb +3 -3
  322. data/lib/alchemy/mount_point.rb +0 -2
  323. data/lib/alchemy/name_conversions.rb +1 -3
  324. data/lib/alchemy/on_page_layout.rb +37 -23
  325. data/lib/alchemy/on_page_layout/callbacks_runner.rb +34 -0
  326. data/lib/alchemy/page_layout.rb +23 -24
  327. data/lib/alchemy/paths.rb +32 -0
  328. data/lib/alchemy/permissions.rb +20 -20
  329. data/lib/alchemy/picture_attributes.rb +0 -3
  330. data/lib/alchemy/resource.rb +66 -22
  331. data/lib/alchemy/resources_helper.rb +48 -11
  332. data/lib/alchemy/routing_constraints.rb +4 -5
  333. data/lib/alchemy/seeder.rb +1 -4
  334. data/lib/alchemy/shell.rb +12 -14
  335. data/lib/alchemy/tasks/helpers.rb +5 -7
  336. data/lib/alchemy/test_support/essence_shared_examples.rb +24 -24
  337. data/lib/alchemy/test_support/factories.rb +2 -146
  338. data/lib/alchemy/test_support/factories/attachment_factory.rb +9 -0
  339. data/lib/alchemy/test_support/factories/cell_factory.rb +9 -0
  340. data/lib/alchemy/test_support/factories/content_factory.rb +10 -0
  341. data/lib/alchemy/test_support/factories/dummy_user_factory.rb +21 -0
  342. data/lib/alchemy/test_support/factories/element_factory.rb +21 -0
  343. data/lib/alchemy/test_support/factories/essence_file_factory.rb +8 -0
  344. data/lib/alchemy/test_support/factories/essence_picture_factory.rb +8 -0
  345. data/lib/alchemy/test_support/factories/essence_text_factory.rb +7 -0
  346. data/lib/alchemy/test_support/factories/language_factory.rb +28 -0
  347. data/lib/alchemy/test_support/factories/page_factory.rb +45 -0
  348. data/lib/alchemy/test_support/factories/picture_factory.rb +10 -0
  349. data/lib/alchemy/test_support/factories/site_factory.rb +12 -0
  350. data/lib/alchemy/test_support/integration_helpers.rb +0 -3
  351. data/lib/alchemy/tinymce.rb +24 -35
  352. data/lib/alchemy/touching.rb +5 -6
  353. data/lib/alchemy/upgrader.rb +3 -5
  354. data/lib/alchemy/upgrader/tasks/available_contents_upgrader.rb +155 -0
  355. data/lib/alchemy/upgrader/tasks/nestable_elements_migration.rb +71 -0
  356. data/lib/alchemy/upgrader/tasks/three_point_two_task.rb +31 -0
  357. data/lib/alchemy/upgrader/three_point_three.rb +50 -0
  358. data/lib/alchemy/upgrader/three_point_two.rb +3 -32
  359. data/lib/alchemy/upgrader/three_point_zero.rb +0 -1
  360. data/lib/alchemy/version.rb +1 -1
  361. data/lib/rails/generators/alchemy/base.rb +1 -1
  362. data/lib/rails/generators/alchemy/elements/elements_generator.rb +1 -7
  363. data/lib/rails/generators/alchemy/elements/templates/editor.html.erb +5 -7
  364. data/lib/rails/generators/alchemy/elements/templates/editor.html.haml +6 -8
  365. data/lib/rails/generators/alchemy/elements/templates/editor.html.slim +6 -7
  366. data/lib/rails/generators/alchemy/elements/templates/view.html.erb +4 -4
  367. data/lib/rails/generators/alchemy/elements/templates/view.html.haml +3 -3
  368. data/lib/rails/generators/alchemy/elements/templates/view.html.slim +3 -3
  369. data/lib/rails/generators/alchemy/essence/essence_generator.rb +2 -3
  370. data/lib/rails/generators/alchemy/essence/templates/editor.html.erb +1 -1
  371. data/lib/rails/generators/alchemy/install/files/alchemy.de.yml +2 -2
  372. data/lib/rails/generators/alchemy/install/files/alchemy.en.yml +2 -2
  373. data/lib/rails/generators/alchemy/install/files/alchemy.es.yml +3 -3
  374. data/lib/rails/generators/alchemy/install/install_generator.rb +0 -1
  375. data/lib/rails/generators/alchemy/install/templates/elements.yml.tt +2 -2
  376. data/lib/rails/generators/alchemy/install/templates/page_layouts.yml.tt +1 -1
  377. data/lib/rails/generators/alchemy/module/module_generator.rb +1 -1
  378. data/lib/rails/templates/alchemy.rb +2 -2
  379. data/lib/tasks/alchemy/convert.rake +4 -8
  380. data/lib/tasks/alchemy/db.rake +2 -3
  381. data/lib/tasks/alchemy/install.rake +3 -4
  382. data/lib/tasks/alchemy/tidy.rake +4 -5
  383. data/lib/tasks/alchemy/upgrade.rake +2 -4
  384. data/spec/controllers/{admin → alchemy/admin}/attachments_controller_spec.rb +26 -44
  385. data/spec/controllers/{admin → alchemy/admin}/base_controller_spec.rb +14 -1
  386. data/spec/controllers/{admin → alchemy/admin}/clipboard_controller_spec.rb +3 -3
  387. data/spec/controllers/{admin → alchemy/admin}/contents_controller_spec.rb +4 -4
  388. data/spec/controllers/{admin → alchemy/admin}/dashboard_controller_spec.rb +11 -6
  389. data/spec/controllers/{admin → alchemy/admin}/elements_controller_spec.rb +54 -31
  390. data/spec/controllers/{admin → alchemy/admin}/essence_files_controller_spec.rb +8 -3
  391. data/spec/controllers/{admin → alchemy/admin}/essence_pictures_controller_spec.rb +3 -3
  392. data/spec/controllers/{admin → alchemy/admin}/languages_controller_spec.rb +13 -1
  393. data/spec/controllers/{admin → alchemy/admin}/layoutpages_controller_spec.rb +0 -6
  394. data/spec/controllers/{admin → alchemy/admin}/pages_controller_spec.rb +103 -35
  395. data/spec/controllers/{admin → alchemy/admin}/pictures_controller_spec.rb +133 -108
  396. data/spec/controllers/alchemy/admin/resources_controller_spec.rb +81 -0
  397. data/spec/controllers/{admin → alchemy/admin}/trash_controller_spec.rb +12 -13
  398. data/spec/controllers/alchemy/api/contents_controller_spec.rb +12 -13
  399. data/spec/controllers/alchemy/api/elements_controller_spec.rb +8 -9
  400. data/spec/controllers/alchemy/api/pages_controller_spec.rb +40 -7
  401. data/spec/controllers/{attachments_controller_spec.rb → alchemy/attachments_controller_spec.rb} +7 -7
  402. data/spec/controllers/alchemy/base_controller_spec.rb +106 -0
  403. data/spec/controllers/{elements_controller_spec.rb → alchemy/elements_controller_spec.rb} +4 -4
  404. data/spec/controllers/{messages_controller_spec.rb → alchemy/messages_controller_spec.rb} +14 -9
  405. data/spec/controllers/alchemy/on_page_layout_mixin_spec.rb +330 -0
  406. data/spec/controllers/{pages_controller_spec.rb → alchemy/pages_controller_spec.rb} +167 -89
  407. data/spec/controllers/{pictures_controller_spec.rb → alchemy/pictures_controller_spec.rb} +42 -20
  408. data/spec/dummy/app/models/dummy_user.rb +4 -0
  409. data/spec/dummy/app/views/alchemy/elements/_all_you_can_eat_view.html.erb +31 -0
  410. data/spec/dummy/app/views/alchemy/elements/_article_editor.html.erb +6 -10
  411. data/spec/dummy/app/views/alchemy/elements/_article_view.html.erb +9 -24
  412. data/spec/dummy/app/views/alchemy/elements/_bild_editor.html.erb +3 -0
  413. data/spec/dummy/app/views/alchemy/elements/_bild_view.html.erb +5 -0
  414. data/spec/dummy/app/views/alchemy/elements/_contactform_editor.html.erb +6 -0
  415. data/spec/dummy/app/views/alchemy/elements/_contactform_view.html.erb +16 -0
  416. data/spec/dummy/app/views/alchemy/elements/_download_editor.html.erb +3 -0
  417. data/spec/dummy/app/views/alchemy/elements/_download_view.html.erb +5 -0
  418. data/spec/dummy/app/views/alchemy/elements/_erb_element_editor.html.erb +3 -0
  419. data/spec/dummy/app/views/alchemy/elements/_erb_element_view.html.erb +5 -0
  420. data/spec/dummy/app/views/alchemy/elements/_header_editor.html.erb +3 -0
  421. data/spec/dummy/app/views/alchemy/elements/_header_view.html.erb +5 -0
  422. data/spec/dummy/app/views/alchemy/elements/_news_editor.html.erb +5 -0
  423. data/spec/dummy/app/views/alchemy/elements/_search_editor.html.erb +1 -0
  424. data/spec/dummy/app/views/alchemy/elements/_search_view.html.erb +4 -0
  425. data/spec/dummy/app/views/alchemy/elements/_slide_editor.html.erb +3 -0
  426. data/spec/dummy/app/views/alchemy/elements/_slide_view.html.erb +5 -0
  427. data/spec/dummy/app/views/alchemy/elements/_slider_editor.html.erb +2 -0
  428. data/spec/dummy/app/views/alchemy/elements/_slider_view.html.erb +4 -0
  429. data/spec/dummy/app/views/alchemy/elements/_text_editor.html.erb +3 -0
  430. data/spec/dummy/app/views/alchemy/elements/_text_view.html.erb +5 -0
  431. data/spec/dummy/app/views/alchemy/page_layouts/_standard.html.erb +1 -0
  432. data/spec/dummy/config/alchemy/elements.yml +10 -13
  433. data/spec/dummy/config/alchemy/page_layouts.yml +1 -1
  434. data/spec/dummy/config/initializers/alchemy.rb +1 -0
  435. data/spec/dummy/config/locales/kl.yml +2 -0
  436. data/spec/dummy/db/migrate/20150608204610_add_parent_element_id_to_alchemy_elements.rb +1 -0
  437. data/spec/dummy/db/migrate/20150729151825_add_link_text_to_alchemy_essence_files.rb +1 -0
  438. data/spec/dummy/db/migrate/20150906195818_add_locale_to_alchemy_languages.rb +1 -0
  439. data/spec/dummy/db/schema.rb +10 -6
  440. data/spec/factories.rb +13 -0
  441. data/spec/features/admin/admin_layout_spec.rb +14 -0
  442. data/spec/features/admin/dashboard_spec.rb +1 -2
  443. data/spec/features/admin/edit_elements_feature_spec.rb +36 -0
  444. data/spec/features/admin/language_tree_feature_spec.rb +7 -8
  445. data/spec/features/admin/languages_features_spec.rb +65 -0
  446. data/spec/features/admin/legacy_page_url_management_spec.rb +3 -3
  447. data/spec/features/admin/link_overlay_spec.rb +16 -17
  448. data/spec/features/admin/locale_select_feature_spec.rb +1 -1
  449. data/spec/features/admin/modules_integration_spec.rb +0 -1
  450. data/spec/features/admin/navigation_feature_spec.rb +11 -2
  451. data/spec/features/admin/page_creation_feature_spec.rb +5 -5
  452. data/spec/features/admin/page_editing_feature_spec.rb +6 -6
  453. data/spec/features/admin/picture_library_integration_spec.rb +3 -3
  454. data/spec/features/admin/resources_integration_spec.rb +7 -12
  455. data/spec/features/admin/site_select_feature_spec.rb +1 -2
  456. data/spec/features/admin/tinymce_feature_spec.rb +0 -1
  457. data/spec/features/page_feature_spec.rb +57 -158
  458. data/spec/features/page_redirects_spec.rb +358 -0
  459. data/spec/features/picture_security_spec.rb +1 -7
  460. data/spec/fixtures/animated.gif +0 -0
  461. data/spec/helpers/{admin → alchemy/admin}/attachments_helper_spec.rb +0 -0
  462. data/spec/helpers/{admin → alchemy/admin}/base_helper_spec.rb +39 -29
  463. data/spec/helpers/{admin → alchemy/admin}/contents_helper_spec.rb +4 -23
  464. data/spec/helpers/{admin → alchemy/admin}/elements_helper_spec.rb +141 -5
  465. data/spec/helpers/{admin → alchemy/admin}/essences_helper_spec.rb +69 -8
  466. data/spec/helpers/{admin → alchemy/admin}/navigation_helper_spec.rb +43 -37
  467. data/spec/helpers/{admin → alchemy/admin}/pages_helper_spec.rb +6 -38
  468. data/spec/helpers/{admin → alchemy/admin}/pictures_helper_spec.rb +0 -1
  469. data/spec/helpers/{admin → alchemy/admin}/tags_helper_spec.rb +1 -3
  470. data/spec/helpers/{base_helper_spec.rb → alchemy/base_helper_spec.rb} +1 -2
  471. data/spec/helpers/{elements_block_helper_spec.rb → alchemy/elements_block_helper_spec.rb} +3 -3
  472. data/spec/helpers/{elements_helper_spec.rb → alchemy/elements_helper_spec.rb} +18 -19
  473. data/spec/helpers/alchemy/essences_helper_spec.rb +85 -0
  474. data/spec/helpers/{pages_helper_spec.rb → alchemy/pages_helper_spec.rb} +125 -39
  475. data/spec/helpers/alchemy/picture_url_helpers_spec.rb +78 -0
  476. data/spec/helpers/{url_helper_spec.rb → alchemy/url_helper_spec.rb} +66 -40
  477. data/spec/libraries/config_spec.rb +2 -3
  478. data/spec/libraries/controller_actions_spec.rb +18 -18
  479. data/spec/libraries/i18n_spec.rb +7 -0
  480. data/spec/libraries/page_layout_spec.rb +13 -7
  481. data/spec/libraries/paths_spec.rb +15 -0
  482. data/spec/libraries/permissions_spec.rb +6 -7
  483. data/spec/libraries/resource_spec.rb +48 -75
  484. data/spec/libraries/resources_helper_spec.rb +55 -6
  485. data/spec/libraries/shell_spec.rb +0 -4
  486. data/spec/libraries/template_tracker_spec.rb +4 -13
  487. data/spec/libraries/tinymce_spec.rb +53 -9
  488. data/spec/mailers/{messages_spec.rb → alchemy/messages_spec.rb} +0 -2
  489. data/spec/models/{attachment_spec.rb → alchemy/attachment_spec.rb} +43 -20
  490. data/spec/models/{cell_spec.rb → alchemy/cell_spec.rb} +2 -3
  491. data/spec/models/{content_spec.rb → alchemy/content_spec.rb} +179 -70
  492. data/spec/models/{element_spec.rb → alchemy/element_spec.rb} +315 -70
  493. data/spec/models/{element_to_page_spec.rb → alchemy/element_to_page_spec.rb} +0 -1
  494. data/spec/models/{essence_boolean_spec.rb → alchemy/essence_boolean_spec.rb} +0 -0
  495. data/spec/models/{essence_date_spec.rb → alchemy/essence_date_spec.rb} +2 -3
  496. data/spec/models/{essence_file_spec.rb → alchemy/essence_file_spec.rb} +2 -5
  497. data/spec/models/{essence_html_spec.rb → alchemy/essence_html_spec.rb} +1 -1
  498. data/spec/models/{essence_link_spec.rb → alchemy/essence_link_spec.rb} +0 -0
  499. data/spec/models/{essence_picture_spec.rb → alchemy/essence_picture_spec.rb} +101 -29
  500. data/spec/models/{essence_richtext_spec.rb → alchemy/essence_richtext_spec.rb} +7 -2
  501. data/spec/models/{essence_select_spec.rb → alchemy/essence_select_spec.rb} +0 -0
  502. data/spec/models/{essence_text_spec.rb → alchemy/essence_text_spec.rb} +4 -8
  503. data/spec/models/alchemy/language_spec.rb +243 -0
  504. data/spec/models/{legacy_page_url_spec.rb → alchemy/legacy_page_url_spec.rb} +1 -1
  505. data/spec/models/{message_spec.rb → alchemy/message_spec.rb} +0 -0
  506. data/spec/models/{page_spec.rb → alchemy/page_spec.rb} +460 -248
  507. data/spec/models/{picture_spec.rb → alchemy/picture_spec.rb} +118 -30
  508. data/spec/models/{site_spec.rb → alchemy/site_spec.rb} +19 -84
  509. data/spec/models/{tag_spec.rb → alchemy/tag_spec.rb} +1 -3
  510. data/spec/models/dummy_model_spec.rb +1 -2
  511. data/spec/requests/alchemy/admin/resources_requests_spec.rb +26 -0
  512. data/spec/requests/alchemy/admin/site_requests_spec.rb +19 -0
  513. data/spec/requests/alchemy/site_requests_spec.rb +18 -0
  514. data/spec/requests/alchemy/sitemap_spec.rb +56 -0
  515. data/spec/routing/api_routing_spec.rb +1 -1
  516. data/spec/routing/routing_spec.rb +121 -15
  517. data/spec/spec_helper.rb +2 -1
  518. data/spec/support/hint_examples.rb +1 -3
  519. data/spec/support/test_tweaks.rb +3 -3
  520. data/spec/support/transformation_examples.rb +6 -7
  521. data/spec/tasks/helpers_spec.rb +2 -4
  522. data/spec/views/admin/pictures/show_spec.rb +43 -0
  523. data/spec/views/essences/essence_boolean_editor_spec.rb +0 -1
  524. data/spec/views/essences/essence_boolean_view_spec.rb +2 -4
  525. data/spec/views/essences/essence_date_view_spec.rb +0 -1
  526. data/spec/views/essences/essence_file_editor_spec.rb +4 -6
  527. data/spec/views/essences/essence_file_view_spec.rb +56 -3
  528. data/spec/views/essences/essence_link_view_spec.rb +1 -1
  529. data/spec/views/essences/essence_picture_editor_spec.rb +80 -0
  530. data/spec/views/essences/essence_picture_view_spec.rb +0 -1
  531. data/spec/views/essences/essence_select_view_spec.rb +0 -1
  532. data/spec/views/essences/essence_text_view_spec.rb +0 -1
  533. data/vendor/assets/javascripts/handlebars.js +4608 -0
  534. data/vendor/assets/javascripts/tinymce/langs/de.js +19 -0
  535. data/vendor/assets/javascripts/tinymce/langs/es.js +19 -0
  536. data/vendor/assets/javascripts/tinymce/langs/fr.js +23 -4
  537. data/vendor/assets/javascripts/tinymce/langs/nl.js +22 -3
  538. data/vendor/assets/javascripts/tinymce/langs/ru.js +22 -3
  539. data/vendor/assets/javascripts/tinymce/plugins/paste/plugin.min.js +1 -1
  540. data/vendor/assets/javascripts/tinymce/plugins/table/plugin.min.js +1 -1
  541. data/vendor/assets/javascripts/tinymce/themes/modern/theme.min.js +1 -1
  542. data/vendor/assets/javascripts/tinymce/tinymce.min.js +12 -13
  543. metadata +274 -256
  544. data/app/views/alchemy/admin/attachments/create.js.erb +0 -11
  545. data/app/views/alchemy/admin/attachments/new.html.erb +0 -14
  546. data/app/views/alchemy/admin/elements/_element_foot.html.erb +0 -36
  547. data/app/views/alchemy/admin/partials/_upload_form.html.erb +0 -67
  548. data/app/views/alchemy/admin/pictures/info.html.erb +0 -38
  549. data/app/views/alchemy/admin/pictures/new.html.erb +0 -16
  550. data/lib/alchemy/middleware/rescue_old_cookies.rb +0 -27
  551. data/spec/controllers/admin/resources_controller_spec.rb +0 -53
  552. data/spec/controllers/base_controller_spec.rb +0 -51
  553. data/spec/helpers/essences_helper_spec.rb +0 -156
  554. data/spec/helpers/picture_url_helpers_spec.rb +0 -35
  555. data/spec/libraries/on_page_layout_spec.rb +0 -112
  556. data/spec/models/language_spec.rb +0 -123
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Alchemy::Admin::BaseController do
4
-
5
4
  describe '#options_from_params' do
6
5
  subject { controller.send(:options_from_params) }
7
6
 
@@ -71,4 +70,18 @@ describe Alchemy::Admin::BaseController do
71
70
  end
72
71
  end
73
72
 
73
+ context 'when current_alchemy_user is present' do
74
+ let!(:page) { create(:alchemy_page) }
75
+ let!(:user) { create(:alchemy_dummy_user, :as_admin) }
76
+
77
+ before do
78
+ allow(controller).to receive(:current_alchemy_user) { user }
79
+ page.lock_to!(user)
80
+ end
81
+
82
+ it 'loads locked pages' do
83
+ controller.send(:load_locked_pages)
84
+ expect(assigns(:locked_pages)).to include(page)
85
+ end
86
+ end
74
87
  end
@@ -2,9 +2,9 @@ require 'spec_helper'
2
2
 
3
3
  module Alchemy
4
4
  describe Admin::ClipboardController do
5
- let(:public_page) { build_stubbed(:public_page) }
6
- let(:element) { build_stubbed(:element, page: public_page) }
7
- let(:another_element) { build_stubbed(:element, page: public_page) }
5
+ let(:public_page) { build_stubbed(:alchemy_page, :public) }
6
+ let(:element) { build_stubbed(:alchemy_element, page: public_page) }
7
+ let(:another_element) { build_stubbed(:alchemy_element, page: public_page) }
8
8
 
9
9
  before do
10
10
  authorize_user(:as_admin)
@@ -2,8 +2,8 @@ require 'spec_helper'
2
2
 
3
3
  module Alchemy
4
4
  describe Admin::ContentsController do
5
- let(:element) { build_stubbed(:element) }
6
- let(:content) { build_stubbed(:content, element: element) }
5
+ let(:element) { build_stubbed(:alchemy_element) }
6
+ let(:content) { build_stubbed(:alchemy_content, element: element) }
7
7
 
8
8
  before do
9
9
  authorize_user(:as_admin)
@@ -15,7 +15,7 @@ module Alchemy
15
15
  end
16
16
 
17
17
  describe '#create' do
18
- let(:element) { build_stubbed(:element, name: 'headline') }
18
+ let(:element) { build_stubbed(:alchemy_element, name: 'headline') }
19
19
 
20
20
  it "creates a content from name" do
21
21
  expect(Content).to receive(:create_from_scratch).and_return(content)
@@ -61,7 +61,7 @@ module Alchemy
61
61
  describe "#order" do
62
62
  context "with content_ids in params" do
63
63
  let(:element) do
64
- create(:element, name: 'all_you_can_eat', create_contents_after_create: true)
64
+ create(:alchemy_element, name: 'all_you_can_eat', create_contents_after_create: true)
65
65
  end
66
66
 
67
67
  let(:content_ids) { element.contents.pluck(:id).shuffle }
@@ -2,14 +2,19 @@ require 'spec_helper'
2
2
 
3
3
  module Alchemy
4
4
  describe Admin::DashboardController do
5
- let(:user) { build(:alchemy_dummy_user, :as_admin) }
5
+ let(:user) { build_stubbed(:alchemy_dummy_user, :as_admin) }
6
6
 
7
7
  before { authorize_user(user) }
8
8
 
9
9
  describe '#index' do
10
10
  before do
11
- expect(Page).to receive(:from_current_site).and_return(double(all_last_edited_from: []))
12
- expect(Page).to receive(:from_current_site).and_return(double(all_locked: []))
11
+ allow(Page).to receive(:from_current_site).and_return(
12
+ double(
13
+ all_last_edited_from: [],
14
+ locked_by: [],
15
+ locked: []
16
+ )
17
+ )
13
18
  end
14
19
 
15
20
  it "assigns @last_edited_pages" do
@@ -17,9 +22,9 @@ module Alchemy
17
22
  expect(assigns(:last_edited_pages)).to eq([])
18
23
  end
19
24
 
20
- it "assigns @locked_pages" do
25
+ it "assigns @all_locked_pages" do
21
26
  alchemy_get :index
22
- expect(assigns(:locked_pages)).to eq([])
27
+ expect(assigns(:all_locked_pages)).to eq([])
23
28
  end
24
29
 
25
30
  context 'with user class having logged_in scope' do
@@ -47,7 +52,7 @@ module Alchemy
47
52
  context 'user having signed in before' do
48
53
  before do
49
54
  expect(user).to receive(:sign_in_count).and_return(5)
50
- expect(user).to receive(:last_sign_in_at).and_return(Time.now)
55
+ expect(user).to receive(:last_sign_in_at).and_return(Time.current)
51
56
  end
52
57
 
53
58
  it "assigns @first_time" do
@@ -2,22 +2,22 @@ require 'spec_helper'
2
2
 
3
3
  module Alchemy
4
4
  describe Admin::ElementsController do
5
- let(:alchemy_page) { create(:page) }
6
- let(:element) { create(:element, :page_id => alchemy_page.id) }
7
- let(:element_in_clipboard) { create(:element, :page_id => alchemy_page.id) }
5
+ let(:alchemy_page) { create(:alchemy_page) }
6
+ let(:element) { create(:alchemy_element, page_id: alchemy_page.id) }
7
+ let(:element_in_clipboard) { create(:alchemy_element, page_id: alchemy_page.id) }
8
8
  let(:clipboard) { session[:alchemy_clipboard] = {} }
9
9
 
10
10
  before { authorize_user(:as_author) }
11
11
 
12
12
  describe '#index' do
13
- let(:alchemy_page) { build_stubbed(:page) }
13
+ let(:alchemy_page) { build_stubbed(:alchemy_page) }
14
14
 
15
15
  before do
16
16
  expect(Page).to receive(:find).and_return alchemy_page
17
17
  end
18
18
 
19
19
  context 'with cells' do
20
- let(:cell) { build_stubbed(:cell, page: alchemy_page) }
20
+ let(:cell) { build_stubbed(:alchemy_cell, page: alchemy_page) }
21
21
 
22
22
  before do
23
23
  expect(alchemy_page).to receive(:cells).and_return [cell]
@@ -69,9 +69,9 @@ module Alchemy
69
69
  end
70
70
 
71
71
  describe '#order' do
72
- let(:element_1) { FactoryGirl.create(:element) }
73
- let(:element_2) { FactoryGirl.create(:element) }
74
- let(:element_3) { FactoryGirl.create(:element) }
72
+ let(:element_1) { create(:alchemy_element) }
73
+ let(:element_2) { create(:alchemy_element) }
74
+ let(:element_3) { create(:alchemy_element) }
75
75
  let(:element_ids) { [element_1.id, element_3.id, element_2.id] }
76
76
 
77
77
  it "sets new position for given element ids" do
@@ -79,8 +79,16 @@ module Alchemy
79
79
  expect(Element.all.pluck(:id)).to eq(element_ids)
80
80
  end
81
81
 
82
+ context 'with missing [:element_ids] param' do
83
+ it 'does not raise any error and silently rejects to order' do
84
+ expect {
85
+ alchemy_xhr :post, :order
86
+ }.to_not raise_error
87
+ end
88
+ end
89
+
82
90
  context "untrashing" do
83
- let(:trashed_element) { FactoryGirl.create(:element, public: false, position: nil, page_id: 58, cell_id: 32) }
91
+ let(:trashed_element) { create(:alchemy_element, public: false, position: nil, page_id: 58, cell_id: 32) }
84
92
 
85
93
  before do
86
94
  # Because of a before_create filter it can not be created with a nil position and needs to be trashed here
@@ -113,10 +121,10 @@ module Alchemy
113
121
  end
114
122
 
115
123
  describe '#new' do
116
- let(:alchemy_page) { build_stubbed(:page) }
124
+ let(:alchemy_page) { build_stubbed(:alchemy_page) }
117
125
 
118
126
  before do
119
- expect(Page).to receive(:find_by_id).and_return(alchemy_page)
127
+ expect(Page).to receive(:find).and_return(alchemy_page)
120
128
  end
121
129
 
122
130
  it "assign variable for all available element definitions" do
@@ -165,7 +173,7 @@ module Alchemy
165
173
  end
166
174
 
167
175
  context "if page has cells" do
168
- let(:page) { create(:public_page, do_not_autogenerate: false) }
176
+ let(:page) { create(:alchemy_page, :public, do_not_autogenerate: false) }
169
177
  let(:cell) { page.cells.first }
170
178
 
171
179
  context "not pasting from clipboard" do
@@ -234,17 +242,17 @@ module Alchemy
234
242
 
235
243
  context "and no cell name in element name" do
236
244
  it "should create the element in the nil cell" do
237
- alchemy_xhr :post, :create, {element: {page_id: page.id}, paste_from_clipboard: "#{element_in_clipboard.id}"}
245
+ alchemy_xhr :post, :create, {element: {page_id: page.id}, paste_from_clipboard: element_in_clipboard.id.to_s}
238
246
  expect(page.elements.first.cell).to eq(nil)
239
247
  end
240
248
  end
241
249
  end
242
250
 
243
251
  context "on a page with a setting for insert_elements_at of top" do
244
- let!(:alchemy_page) { create(:public_page, name: 'News') }
245
- let!(:element_in_clipboard) { create(:element, page: alchemy_page, name: 'news') }
246
- let!(:cell) { create(:cell, name: 'news', page: alchemy_page) }
247
- let!(:element) { create(:element, name: 'news', page: alchemy_page, cell: cell) }
252
+ let!(:alchemy_page) { create(:alchemy_page, :public, name: 'News') }
253
+ let!(:element_in_clipboard) { create(:alchemy_element, page: alchemy_page, name: 'news') }
254
+ let!(:cell) { create(:alchemy_cell, name: 'news', page: alchemy_page) }
255
+ let!(:element) { create(:alchemy_element, name: 'news', page: alchemy_page, cell: cell) }
248
256
 
249
257
  before do
250
258
  expect(PageLayout).to receive(:get).at_least(:once).and_return({
@@ -329,7 +337,7 @@ module Alchemy
329
337
 
330
338
  context "with the cell already present" do
331
339
  before do
332
- create(:cell, page: alchemy_page, name: 'header')
340
+ create(:alchemy_cell, page: alchemy_page, name: 'header')
333
341
  end
334
342
 
335
343
  it "should load the cell" do
@@ -363,8 +371,8 @@ module Alchemy
363
371
  end
364
372
 
365
373
  describe '#update' do
366
- let(:page) { build_stubbed(:page) }
367
- let(:element) { build_stubbed(:element, page: page) }
374
+ let(:page) { build_stubbed(:alchemy_page) }
375
+ let(:element) { build_stubbed(:alchemy_element, page: page) }
368
376
  let(:contents_parameters) { ActionController::Parameters.new(1 => {ingredient: 'Title'}) }
369
377
  let(:element_parameters) { ActionController::Parameters.new(tag_list: 'Tag 1', public: false) }
370
378
 
@@ -414,16 +422,31 @@ module Alchemy
414
422
  context "element params" do
415
423
  let(:parameters) { ActionController::Parameters.new(element: {public: true}) }
416
424
 
417
- specify ":element is required" do
418
- expect(controller.params).to receive(:require).with(:element).and_return(parameters)
419
- controller.send :element_params
425
+ before do
426
+ expect(controller).to receive(:params).and_return(parameters)
427
+ expect(parameters).to receive(:fetch).with(:element, {}).and_return(parameters)
420
428
  end
421
429
 
422
- specify ":public and :tag_list is permitted" do
423
- expect(controller).to receive(:params).and_return(parameters)
424
- expect(parameters).to receive(:require).with(:element).and_return(parameters)
425
- expect(parameters).to receive(:permit).with(:public, :tag_list)
426
- controller.send :element_params
430
+ context 'with taggable element' do
431
+ before do
432
+ controller.instance_variable_set(:'@element', mock_model(Element, taggable?: true))
433
+ end
434
+
435
+ specify ":tag_list is permitted" do
436
+ expect(parameters).to receive(:permit).with(:tag_list)
437
+ controller.send :element_params
438
+ end
439
+ end
440
+
441
+ context 'with not taggable element' do
442
+ before do
443
+ controller.instance_variable_set(:'@element', mock_model(Element, taggable?: false))
444
+ end
445
+
446
+ specify ":tag_list is not permitted" do
447
+ expect(parameters).to_not receive(:permit)
448
+ controller.send :element_params
449
+ end
427
450
  end
428
451
  end
429
452
  end
@@ -431,7 +454,7 @@ module Alchemy
431
454
  describe '#trash' do
432
455
  subject { alchemy_xhr :delete, :trash, {id: element.id} }
433
456
 
434
- let(:element) { build_stubbed(:element) }
457
+ let(:element) { build_stubbed(:alchemy_element) }
435
458
 
436
459
  before { expect(Element).to receive(:find).and_return element }
437
460
 
@@ -444,7 +467,7 @@ module Alchemy
444
467
  describe '#fold' do
445
468
  subject { alchemy_xhr :post, :fold, {id: element.id} }
446
469
 
447
- let(:element) { build_stubbed(:element) }
470
+ let(:element) { build_stubbed(:alchemy_element) }
448
471
 
449
472
  before do
450
473
  expect(element).to receive(:save).and_return true
@@ -455,7 +478,7 @@ module Alchemy
455
478
  before { expect(element).to receive(:folded).and_return true }
456
479
 
457
480
  it "sets folded to false." do
458
- expect(element).to receive(:folded=).with(false).and_return(true)
481
+ expect(element).to receive(:folded=).with(false).and_return(false)
459
482
  subject
460
483
  end
461
484
  end
@@ -29,21 +29,26 @@ module Alchemy
29
29
  end
30
30
 
31
31
  describe '#update' do
32
- let(:essence_file) { FactoryGirl.create(:essence_file) }
32
+ let(:essence_file) { create(:alchemy_essence_file) }
33
33
 
34
34
  before do
35
35
  expect(EssenceFile).to receive(:find).and_return(essence_file)
36
36
  end
37
37
 
38
38
  it "should update the attributes of essence_file" do
39
- alchemy_xhr :put, :update, id: essence_file.id, essence_file: {title: 'new title', css_class: 'left'}
39
+ alchemy_xhr :put, :update, id: essence_file.id, essence_file: {
40
+ title: 'new title',
41
+ css_class: 'left',
42
+ link_text: 'Download this file'
43
+ }
40
44
  expect(essence_file.title).to eq 'new title'
41
45
  expect(essence_file.css_class).to eq 'left'
46
+ expect(essence_file.link_text).to eq 'Download this file'
42
47
  end
43
48
  end
44
49
 
45
50
  describe '#assign' do
46
- let(:content) { create(:content) }
51
+ let(:content) { create(:alchemy_content) }
47
52
 
48
53
  before do
49
54
  expect(Content).to receive(:find_by).and_return(content)
@@ -33,7 +33,7 @@ module Alchemy
33
33
 
34
34
  it "renders error message" do
35
35
  alchemy_get :crop, id: 1
36
- expect(assigns(:no_image_notice)).to eq(Alchemy::I18n.t(:no_image_for_cropper_found))
36
+ expect(assigns(:no_image_notice)).to eq(Alchemy.t(:no_image_for_cropper_found))
37
37
  end
38
38
  end
39
39
 
@@ -153,7 +153,7 @@ module Alchemy
153
153
  context 'with no fixed_ratio set in params' do
154
154
  it "sets a fixed ratio from sizes" do
155
155
  alchemy_get :crop, id: 1, options: {image_size: '80x60'}
156
- expect(assigns(:ratio)).to eq(80.0/60.0)
156
+ expect(assigns(:ratio)).to eq(80.0 / 60.0)
157
157
  end
158
158
  end
159
159
  end
@@ -179,7 +179,7 @@ module Alchemy
179
179
  end
180
180
 
181
181
  describe '#assign' do
182
- let(:content) { create(:content) }
182
+ let(:content) { create(:alchemy_content) }
183
183
 
184
184
  before do
185
185
  expect(Content).to receive(:find).and_return(content)
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Alchemy::Admin::LanguagesController do
4
-
5
4
  before do
6
5
  authorize_user(:as_admin)
7
6
  end
@@ -58,4 +57,17 @@ describe Alchemy::Admin::LanguagesController do
58
57
  end
59
58
  end
60
59
  end
60
+
61
+ describe "#index" do
62
+ context "editor users" do
63
+ before do
64
+ authorize_user(:as_editor)
65
+ end
66
+
67
+ it "should be able to index language" do
68
+ alchemy_get :index
69
+ expect(response).to render_template(:index)
70
+ end
71
+ end
72
+ end
61
73
  end
@@ -2,17 +2,11 @@ require 'spec_helper'
2
2
 
3
3
  module Alchemy
4
4
  describe Admin::LayoutpagesController do
5
-
6
5
  before(:each) do
7
6
  authorize_user(:as_admin)
8
7
  end
9
8
 
10
9
  describe "#index" do
11
- it "should assign @locked_pages" do
12
- alchemy_get :index
13
- expect(assigns(:locked_pages)).to eq([])
14
- end
15
-
16
10
  it "should assign @layout_root" do
17
11
  alchemy_get :index
18
12
  expect(assigns(:layout_root)).to be_a(Page)
@@ -3,7 +3,6 @@ require 'spec_helper'
3
3
 
4
4
  module Alchemy
5
5
  describe Admin::PagesController do
6
-
7
6
  context 'a guest' do
8
7
  it 'can not access page tree' do
9
8
  alchemy_get :index
@@ -26,8 +25,8 @@ module Alchemy
26
25
  before { authorize_user(user) }
27
26
 
28
27
  describe '#index' do
29
- let(:language) { build_stubbed(:language) }
30
- let(:language_root) { build_stubbed(:language_root_page) }
28
+ let(:language) { build_stubbed(:alchemy_language) }
29
+ let(:language_root) { build_stubbed(:alchemy_page, :language_root) }
31
30
 
32
31
  context 'with existing language root page' do
33
32
  before do
@@ -55,11 +54,74 @@ module Alchemy
55
54
  end
56
55
  end
57
56
 
57
+ describe '#tree' do
58
+ let(:page_1) { create(:alchemy_page, visible: true, name: 'one') }
59
+ let(:page_2) { create(:alchemy_page, visible: true, name: 'two', parent_id: page_1.id) }
60
+ let(:page_3) { create(:alchemy_page, visible: true, name: 'three', parent_id: page_2.id) }
61
+ let(:pages) { [page_1, page_2, page_3] }
62
+
63
+ before do
64
+ pages
65
+ end
66
+
67
+ it 'returns a tree as JSON' do
68
+ alchemy_get :tree, id: page_1.id, full: 'true'
69
+
70
+ expect(response.status).to eq(200)
71
+ expect(response.content_type).to eq('application/json')
72
+
73
+ result = JSON.parse(response.body)
74
+
75
+ expect(result).to have_key('pages')
76
+ expect(result['pages'].count).to eq(1)
77
+
78
+ page = result['pages'].first
79
+
80
+ expect(page).to have_key('id')
81
+ expect(page['id']).to eq(page_1.id)
82
+ expect(page).to have_key('name')
83
+ expect(page['name']).to eq(page_1.name)
84
+ expect(page).to have_key('children')
85
+ expect(page['children'].count).to eq(1)
86
+
87
+ page = page['children'].first
88
+
89
+ expect(page).to have_key('id')
90
+ expect(page['id']).to eq(page_2.id)
91
+ expect(page).to have_key('name')
92
+ expect(page['name']).to eq(page_2.name)
93
+ expect(page).to have_key('children')
94
+ expect(page['children'].count).to eq(1)
95
+
96
+ page = page['children'].first
97
+
98
+ expect(page).to have_key('id')
99
+ expect(page['id']).to eq(page_3.id)
100
+ expect(page).to have_key('name')
101
+ expect(page['name']).to eq(page_3.name)
102
+ expect(page).to have_key('children')
103
+ expect(page['children'].count).to eq(0)
104
+ end
105
+
106
+ it 'does not return a branch that is folded' do
107
+ alchemy_xhr :post, :fold, id: page_2.id
108
+ alchemy_get :tree, id: page_1.id, full: 'false'
109
+
110
+ expect(response.status).to eq(200)
111
+ expect(response.content_type).to eq('application/json')
112
+
113
+ result = JSON.parse(response.body)
114
+ page = result['pages'].first['children'].first
115
+
116
+ expect(page['children'].count).to eq(0)
117
+ end
118
+ end
119
+
58
120
  describe "#flush" do
59
- let(:content_page_1) { create(:public_page, name: "content page 1", published_at: Time.current - 5.days) }
60
- let(:content_page_2) { create(:public_page, name: "content page 2", published_at: Time.current - 8.days) }
61
- let(:layout_page_1) { create(:page, layoutpage: true, name: "layout_page 1", published_at: Time.current - 5.days) }
62
- let(:layout_page_2) { create(:page, layoutpage: true, name: "layout_page 2", published_at: Time.current - 8.days) }
121
+ let(:content_page_1) { create(:alchemy_page, :public, name: "content page 1", published_at: Time.current - 5.days) }
122
+ let(:content_page_2) { create(:alchemy_page, :public, name: "content page 2", published_at: Time.current - 8.days) }
123
+ let(:layout_page_1) { create(:alchemy_page, layoutpage: true, name: "layout_page 1", published_at: Time.current - 5.days) }
124
+ let(:layout_page_2) { create(:alchemy_page, layoutpage: true, name: "layout_page 2", published_at: Time.current - 8.days) }
63
125
  let(:content_pages) { [content_page_1, content_page_2] }
64
126
  let(:layout_pages) { [layout_page_1, layout_page_2] }
65
127
 
@@ -104,10 +166,11 @@ module Alchemy
104
166
  end
105
167
 
106
168
  describe '#show' do
107
- let(:page) { build_stubbed(:page, language_code: 'nl') }
169
+ let(:language) { build_stubbed(:alchemy_language, locale: 'nl') }
170
+ let(:page) { build_stubbed(:alchemy_page, language: language) }
108
171
 
109
172
  before do
110
- expect(Page).to receive(:find).with("#{page.id}").and_return(page)
173
+ expect(Page).to receive(:find).with(page.id.to_s).and_return(page)
111
174
  allow(Page).to receive(:language_root_for).and_return(mock_model(Alchemy::Page))
112
175
  end
113
176
 
@@ -134,9 +197,9 @@ module Alchemy
134
197
  end
135
198
 
136
199
  describe '#order' do
137
- let(:page_1) { FactoryGirl.create(:page, visible: true) }
138
- let(:page_2) { FactoryGirl.create(:page, visible: true) }
139
- let(:page_3) { FactoryGirl.create(:page, visible: true) }
200
+ let(:page_1) { create(:alchemy_page, visible: true) }
201
+ let(:page_2) { create(:alchemy_page, visible: true) }
202
+ let(:page_3) { create(:alchemy_page, visible: true) }
140
203
  let(:page_item_1) { {id: page_1.id, slug: page_1.slug, restricted: false, external: page_1.redirects_to_external?, visible: page_1.visible?, children: [page_item_2]} }
141
204
  let(:page_item_2) { {id: page_2.id, slug: page_2.slug, restricted: false, external: page_2.redirects_to_external?, visible: page_2.visible?, children: [page_item_3]} }
142
205
  let(:page_item_3) { {id: page_3.id, slug: page_3.slug, restricted: false, external: page_3.redirects_to_external?, visible: page_3.visible? } }
@@ -156,7 +219,7 @@ module Alchemy
156
219
  it "updates the pages urlnames" do
157
220
  alchemy_xhr :post, :order, set: set_of_pages.to_json
158
221
  [page_1, page_2, page_3].map(&:reload)
159
- expect(page_1.urlname).to eq("#{page_1.slug}")
222
+ expect(page_1.urlname).to eq(page_1.slug.to_s)
160
223
  expect(page_2.urlname).to eq("#{page_1.slug}/#{page_2.slug}")
161
224
  expect(page_3.urlname).to eq("#{page_1.slug}/#{page_2.slug}/#{page_3.slug}")
162
225
  end
@@ -174,7 +237,7 @@ module Alchemy
174
237
  it "does not use this pages slug in urlnames of descendants" do
175
238
  alchemy_xhr :post, :order, set: set_of_pages.to_json
176
239
  [page_1, page_2, page_3].map(&:reload)
177
- expect(page_1.urlname).to eq("#{page_1.slug}")
240
+ expect(page_1.urlname).to eq(page_1.slug.to_s)
178
241
  expect(page_2.urlname).to eq("#{page_1.slug}/#{page_2.slug}")
179
242
  expect(page_3.urlname).to eq("#{page_1.slug}/#{page_3.slug}")
180
243
  end
@@ -198,7 +261,7 @@ module Alchemy
198
261
  end
199
262
 
200
263
  context 'with restricted page in tree' do
201
- let(:page_2) { FactoryGirl.create(:page, restricted: true) }
264
+ let(:page_2) { create(:alchemy_page, restricted: true) }
202
265
  let(:page_item_2) do
203
266
  {
204
267
  id: page_2.id,
@@ -250,7 +313,7 @@ module Alchemy
250
313
  render_views
251
314
 
252
315
  context "with page having nested urlname" do
253
- let(:page) { create(:page, name: 'Foobar', urlname: 'foobar') }
316
+ let(:page) { create(:alchemy_page, name: 'Foobar', urlname: 'foobar') }
254
317
 
255
318
  it "should always show the slug" do
256
319
  alchemy_xhr :get, :configure, {id: page.id}
@@ -277,7 +340,6 @@ module Alchemy
277
340
  end
278
341
 
279
342
  it "redirects to edit page template" do
280
- page = mock_model('Page')
281
343
  expect(controller).to receive(:edit_admin_page_path).and_return('bla')
282
344
  alchemy_post :create, page: page_params
283
345
  expect(response).to redirect_to('bla')
@@ -325,8 +387,8 @@ module Alchemy
325
387
  let(:page_in_clipboard) { mock_model(Alchemy::Page) }
326
388
 
327
389
  before do
328
- allow(Page).to receive(:find_by).with(id: "#{parent.id}").and_return(parent)
329
- allow(Page).to receive(:find).with("#{page_in_clipboard.id}").and_return(page_in_clipboard)
390
+ allow(Page).to receive(:find_by).with(id: parent.id.to_s).and_return(parent)
391
+ allow(Page).to receive(:find).with(page_in_clipboard.id.to_s).and_return(page_in_clipboard)
330
392
  end
331
393
 
332
394
  it "should call Page#copy_and_paste" do
@@ -344,8 +406,8 @@ module Alchemy
344
406
 
345
407
  describe '#copy_language_tree' do
346
408
  let(:params) { {languages: {new_lang_id: '2', old_lang_id: '1'}} }
347
- let(:language_root_to_copy_from) { build_stubbed(:language_root_page) }
348
- let(:copy_of_language_root) { build_stubbed(:language_root_page) }
409
+ let(:language_root_to_copy_from) { build_stubbed(:alchemy_page, :language_root) }
410
+ let(:copy_of_language_root) { build_stubbed(:alchemy_page, :language_root) }
349
411
  let(:root_page) { mock_model('Page') }
350
412
 
351
413
  before do
@@ -355,11 +417,11 @@ module Alchemy
355
417
  allow_any_instance_of(Page).to receive(:move_to_child_of)
356
418
  allow_any_instance_of(Page).to receive(:copy_children_to)
357
419
  allow(controller).to receive(:store_current_language)
358
- allow(Language).to receive(:current).and_return(mock_model('Language', language_code: 'it', code: 'it'))
420
+ allow(Language).to receive(:current).and_return(mock_model('Language', locale: 'de', code: 'de'))
359
421
  end
360
422
 
361
423
  it "should copy the language root page over to the other language" do
362
- expect(Page).to receive(:copy).with(language_root_to_copy_from, {language_id: '2', language_code: 'it'})
424
+ expect(Page).to receive(:copy).with(language_root_to_copy_from, {language_id: '2', language_code: 'de'})
363
425
  alchemy_post :copy_language_tree, params
364
426
  end
365
427
 
@@ -384,7 +446,7 @@ module Alchemy
384
446
  end
385
447
 
386
448
  describe '#edit' do
387
- let!(:page) { create(:page) }
449
+ let!(:page) { create(:alchemy_page) }
388
450
  let!(:other_user) { create(:alchemy_dummy_user, :as_author) }
389
451
 
390
452
  context 'if page is locked by another user' do
@@ -444,7 +506,7 @@ module Alchemy
444
506
 
445
507
  describe '#destroy' do
446
508
  let(:clipboard) { session[:alchemy_clipboard] = {} }
447
- let(:page) { FactoryGirl.create(:public_page) }
509
+ let(:page) { create(:alchemy_page, :public) }
448
510
 
449
511
  before { clipboard['pages'] = [{'id' => page.id.to_s}] }
450
512
 
@@ -472,13 +534,13 @@ module Alchemy
472
534
  let(:page) { mock_model(Alchemy::Page, urlname: 'home') }
473
535
 
474
536
  before do
475
- allow(Page).to receive(:find).with("#{page.id}").and_return(page)
537
+ allow(Page).to receive(:find).with(page.id.to_s).and_return(page)
476
538
  allow(page).to receive(:unlock!).and_return(true)
477
539
  allow(@controller).to receive(:multi_language?).and_return(false)
478
540
  end
479
541
 
480
542
  it "should redirect to the page path" do
481
- expect(alchemy_post :visit, id: page.id).to redirect_to(show_page_path(urlname: 'home'))
543
+ expect(alchemy_post(:visit, id: page.id)).to redirect_to(show_page_path(urlname: 'home'))
482
544
  end
483
545
  end
484
546
 
@@ -518,30 +580,32 @@ module Alchemy
518
580
  let(:page) { mock_model(Alchemy::Page, name: 'Best practices') }
519
581
 
520
582
  before do
521
- allow(Page).to receive(:find).with("#{page.id}").and_return(page)
522
- allow(Page).to receive(:from_current_site).and_return(double(all_locked_by: nil))
583
+ allow(Page).to receive(:find).with(page.id.to_s).and_return(page)
584
+ allow(Page).to receive(:from_current_site).and_return(double(locked_by: nil))
523
585
  expect(page).to receive(:unlock!).and_return(true)
524
586
  end
525
587
 
526
588
  it "should unlock the page" do
527
- alchemy_xhr :post, :unlock, id: "#{page.id}"
589
+ alchemy_xhr :post, :unlock, id: page.id.to_s
528
590
  end
529
591
 
530
592
  context 'requesting for html format' do
531
593
  it "should redirect to admin_pages_path" do
532
- expect(alchemy_post :unlock, id: page.id).to redirect_to(admin_pages_path)
594
+ expect(alchemy_post(:unlock, id: page.id)).to redirect_to(admin_pages_path)
533
595
  end
534
596
 
535
597
  context 'if passing :redirect_to through params' do
536
598
  it "should redirect to the given path" do
537
- expect(alchemy_post :unlock, id: page.id, redirect_to: 'this/path').to redirect_to('this/path')
599
+ expect(
600
+ alchemy_post(:unlock, id: page.id, redirect_to: 'this/path')
601
+ ).to redirect_to('this/path')
538
602
  end
539
603
  end
540
604
  end
541
605
  end
542
606
 
543
607
  describe "#switch_language" do
544
- let(:language) { build_stubbed(:klingonian)}
608
+ let(:language) { build_stubbed(:alchemy_language, :klingon) }
545
609
 
546
610
  before do
547
611
  allow(Language).to receive(:find_by).and_return(language)
@@ -553,7 +617,9 @@ module Alchemy
553
617
  end
554
618
 
555
619
  it "should redirect to sitemap" do
556
- expect(alchemy_get :switch_language, {language_id: language.id}).to redirect_to(admin_pages_path)
620
+ expect(
621
+ alchemy_get(:switch_language, language_id: language.id)
622
+ ).to redirect_to(admin_pages_path)
557
623
  end
558
624
 
559
625
  context "coming from layoutpages" do
@@ -562,7 +628,9 @@ module Alchemy
562
628
  }
563
629
 
564
630
  it "should redirect to layoutpages" do
565
- expect(alchemy_get :switch_language, {language_id: language.id}).to redirect_to(admin_layoutpages_path)
631
+ expect(
632
+ alchemy_get(:switch_language, language_id: language.id)
633
+ ).to redirect_to(admin_layoutpages_path)
566
634
  end
567
635
  end
568
636
  end