alchemy_cms 3.3.0.rc1 → 3.3.0.rc2

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 (269) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -2
  3. data/Gemfile +1 -0
  4. data/alchemy_cms.gemspec +6 -6
  5. data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +0 -7
  6. data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +4 -4
  7. data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +51 -5
  8. data/app/assets/javascripts/alchemy/alchemy.sitemap.js.coffee +0 -2
  9. data/app/assets/stylesheets/alchemy/elements.scss +2 -2
  10. data/app/controllers/alchemy/admin/elements_controller.rb +2 -0
  11. data/app/controllers/alchemy/admin/pages_controller.rb +11 -3
  12. data/app/controllers/alchemy/admin/pictures_controller.rb +1 -0
  13. data/app/models/alchemy/element.rb +3 -1
  14. data/app/models/alchemy/element/element_contents.rb +2 -7
  15. data/app/models/alchemy/element/presenters.rb +11 -4
  16. data/app/models/alchemy/page.rb +3 -1
  17. data/app/views/alchemy/admin/attachments/archive_overlay.js.erb +0 -1
  18. data/app/views/alchemy/admin/contents/create.js.erb +0 -1
  19. data/app/views/alchemy/admin/elements/_element_header.html.erb +3 -1
  20. data/app/views/alchemy/admin/elements/order.js.erb +25 -10
  21. data/app/views/alchemy/admin/elements/update.js.erb +1 -2
  22. data/app/views/alchemy/admin/essence_files/assign.js.erb +0 -1
  23. data/app/views/alchemy/admin/essence_pictures/assign.js.erb +0 -1
  24. data/app/views/alchemy/admin/legacy_page_urls/create.js.erb +0 -1
  25. data/app/views/alchemy/admin/pages/destroy.js.erb +0 -1
  26. data/app/views/alchemy/admin/pages/update.js.erb +6 -4
  27. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +2 -1
  28. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +1 -7
  29. data/app/views/alchemy/admin/pictures/archive_overlay.js.erb +0 -1
  30. data/bin/alchemy +1 -1
  31. data/bin/rspec +3 -2
  32. data/bin/spring +6 -6
  33. data/config/alchemy/config.yml +6 -1
  34. data/lib/alchemy/seeder.rb +9 -3
  35. data/lib/alchemy/version.rb +1 -1
  36. metadata +6 -471
  37. data/spec/controllers/alchemy/admin/attachments_controller_spec.rb +0 -193
  38. data/spec/controllers/alchemy/admin/base_controller_spec.rb +0 -87
  39. data/spec/controllers/alchemy/admin/clipboard_controller_spec.rb +0 -60
  40. data/spec/controllers/alchemy/admin/contents_controller_spec.rb +0 -78
  41. data/spec/controllers/alchemy/admin/dashboard_controller_spec.rb +0 -144
  42. data/spec/controllers/alchemy/admin/elements_controller_spec.rb +0 -496
  43. data/spec/controllers/alchemy/admin/essence_files_controller_spec.rb +0 -76
  44. data/spec/controllers/alchemy/admin/essence_pictures_controller_spec.rb +0 -202
  45. data/spec/controllers/alchemy/admin/languages_controller_spec.rb +0 -73
  46. data/spec/controllers/alchemy/admin/layoutpages_controller_spec.rb +0 -21
  47. data/spec/controllers/alchemy/admin/pages_controller_spec.rb +0 -639
  48. data/spec/controllers/alchemy/admin/pictures_controller_spec.rb +0 -383
  49. data/spec/controllers/alchemy/admin/resources_controller_spec.rb +0 -81
  50. data/spec/controllers/alchemy/admin/tags_controller_spec.rb +0 -63
  51. data/spec/controllers/alchemy/admin/trash_controller_spec.rb +0 -67
  52. data/spec/controllers/alchemy/api/contents_controller_spec.rb +0 -125
  53. data/spec/controllers/alchemy/api/elements_controller_spec.rb +0 -124
  54. data/spec/controllers/alchemy/api/pages_controller_spec.rb +0 -167
  55. data/spec/controllers/alchemy/attachments_controller_spec.rb +0 -64
  56. data/spec/controllers/alchemy/base_controller_spec.rb +0 -106
  57. data/spec/controllers/alchemy/elements_controller_spec.rb +0 -48
  58. data/spec/controllers/alchemy/messages_controller_spec.rb +0 -204
  59. data/spec/controllers/alchemy/on_page_layout_mixin_spec.rb +0 -330
  60. data/spec/controllers/alchemy/pages_controller_spec.rb +0 -343
  61. data/spec/controllers/alchemy/pictures_controller_spec.rb +0 -415
  62. data/spec/dummy/Rakefile +0 -6
  63. data/spec/dummy/app/assets/javascripts/application.js +0 -13
  64. data/spec/dummy/app/assets/stylesheets/application.css +0 -15
  65. data/spec/dummy/app/controllers/admin/events_controller.rb +0 -3
  66. data/spec/dummy/app/controllers/application_controller.rb +0 -15
  67. data/spec/dummy/app/controllers/login_controller.rb +0 -5
  68. data/spec/dummy/app/helpers/application_helper.rb +0 -2
  69. data/spec/dummy/app/mailers/.gitkeep +0 -0
  70. data/spec/dummy/app/models/ability.rb +0 -9
  71. data/spec/dummy/app/models/dummy_model.rb +0 -3
  72. data/spec/dummy/app/models/dummy_user.rb +0 -15
  73. data/spec/dummy/app/models/event.rb +0 -10
  74. data/spec/dummy/app/models/location.rb +0 -3
  75. data/spec/dummy/app/views/alchemy/elements/_all_you_can_eat_editor.html.erb +0 -11
  76. data/spec/dummy/app/views/alchemy/elements/_all_you_can_eat_view.html.erb +0 -31
  77. data/spec/dummy/app/views/alchemy/elements/_article_editor.html.erb +0 -6
  78. data/spec/dummy/app/views/alchemy/elements/_article_view.html.erb +0 -10
  79. data/spec/dummy/app/views/alchemy/elements/_bild_editor.html.erb +0 -3
  80. data/spec/dummy/app/views/alchemy/elements/_bild_view.html.erb +0 -5
  81. data/spec/dummy/app/views/alchemy/elements/_contactform_editor.html.erb +0 -6
  82. data/spec/dummy/app/views/alchemy/elements/_contactform_view.html.erb +0 -16
  83. data/spec/dummy/app/views/alchemy/elements/_download_editor.html.erb +0 -3
  84. data/spec/dummy/app/views/alchemy/elements/_download_view.html.erb +0 -5
  85. data/spec/dummy/app/views/alchemy/elements/_erb_element_editor.html.erb +0 -3
  86. data/spec/dummy/app/views/alchemy/elements/_erb_element_view.html.erb +0 -5
  87. data/spec/dummy/app/views/alchemy/elements/_header_editor.html.erb +0 -3
  88. data/spec/dummy/app/views/alchemy/elements/_header_view.html.erb +0 -5
  89. data/spec/dummy/app/views/alchemy/elements/_headline_editor.html.erb +0 -1
  90. data/spec/dummy/app/views/alchemy/elements/_headline_view.html.erb +0 -1
  91. data/spec/dummy/app/views/alchemy/elements/_news_editor.html.erb +0 -5
  92. data/spec/dummy/app/views/alchemy/elements/_news_view.html.erb +0 -11
  93. data/spec/dummy/app/views/alchemy/elements/_search_editor.html.erb +0 -1
  94. data/spec/dummy/app/views/alchemy/elements/_search_view.html.erb +0 -4
  95. data/spec/dummy/app/views/alchemy/elements/_slide_editor.html.erb +0 -3
  96. data/spec/dummy/app/views/alchemy/elements/_slide_view.html.erb +0 -5
  97. data/spec/dummy/app/views/alchemy/elements/_slider_editor.html.erb +0 -2
  98. data/spec/dummy/app/views/alchemy/elements/_slider_view.html.erb +0 -4
  99. data/spec/dummy/app/views/alchemy/elements/_text_editor.html.erb +0 -3
  100. data/spec/dummy/app/views/alchemy/elements/_text_view.html.erb +0 -5
  101. data/spec/dummy/app/views/alchemy/page_layouts/_standard.html.erb +0 -15
  102. data/spec/dummy/app/views/layouts/application.html.erb +0 -17
  103. data/spec/dummy/bin/bundle +0 -3
  104. data/spec/dummy/bin/rails +0 -4
  105. data/spec/dummy/bin/rake +0 -4
  106. data/spec/dummy/config.ru +0 -4
  107. data/spec/dummy/config/alchemy/cells.yml +0 -5
  108. data/spec/dummy/config/alchemy/elements.yml +0 -109
  109. data/spec/dummy/config/alchemy/page_layouts.yml +0 -32
  110. data/spec/dummy/config/application.rb +0 -32
  111. data/spec/dummy/config/boot.rb +0 -5
  112. data/spec/dummy/config/database.yml +0 -32
  113. data/spec/dummy/config/environment.rb +0 -5
  114. data/spec/dummy/config/environments/development.rb +0 -41
  115. data/spec/dummy/config/environments/production.rb +0 -77
  116. data/spec/dummy/config/environments/test.rb +0 -43
  117. data/spec/dummy/config/initializers/alchemy.rb +0 -3
  118. data/spec/dummy/config/initializers/assets.rb +0 -11
  119. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  120. data/spec/dummy/config/initializers/cookies_serializer.rb +0 -3
  121. data/spec/dummy/config/initializers/filter_parameter_logging.rb +0 -4
  122. data/spec/dummy/config/initializers/inflections.rb +0 -16
  123. data/spec/dummy/config/initializers/mime_types.rb +0 -4
  124. data/spec/dummy/config/initializers/secret_token.rb +0 -12
  125. data/spec/dummy/config/initializers/session_store.rb +0 -3
  126. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  127. data/spec/dummy/config/locales/kl.yml +0 -2
  128. data/spec/dummy/config/routes.rb +0 -12
  129. data/spec/dummy/config/secrets.yml +0 -22
  130. data/spec/dummy/db/migrate/20121026104128_create_events.rb +0 -20
  131. data/spec/dummy/db/migrate/20130328101418_create_locations.rb +0 -9
  132. data/spec/dummy/db/migrate/20130827094554_alchemy_two_point_six.rb +0 -1
  133. data/spec/dummy/db/migrate/20130828121054_remove_do_not_index_from_alchemy_essence_texts.rb +0 -1
  134. data/spec/dummy/db/migrate/20130828121120_remove_do_not_index_from_alchemy_essence_richtexts.rb +0 -1
  135. data/spec/dummy/db/migrate/20130918201742_add_published_at_to_alchemy_pages.rb +0 -1
  136. data/spec/dummy/db/migrate/20131209225243_create_dummy_users.rb +0 -9
  137. data/spec/dummy/db/migrate/20150122213511_acts_as_taggable_on_migration.acts_as_taggable_on_engine.rb +0 -31
  138. data/spec/dummy/db/migrate/20150122213512_add_missing_unique_indices.acts_as_taggable_on_engine.rb +0 -20
  139. data/spec/dummy/db/migrate/20150122213513_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb +0 -15
  140. data/spec/dummy/db/migrate/20150122213514_add_missing_taggable_index.acts_as_taggable_on_engine.rb +0 -10
  141. data/spec/dummy/db/migrate/20150412103152_create_dummy_model.rb +0 -7
  142. data/spec/dummy/db/migrate/20150608204610_add_parent_element_id_to_alchemy_elements.rb +0 -1
  143. data/spec/dummy/db/migrate/20150729151825_add_link_text_to_alchemy_essence_files.rb +0 -1
  144. data/spec/dummy/db/migrate/20150906195818_add_locale_to_alchemy_languages.rb +0 -1
  145. data/spec/dummy/db/schema.rb +0 -326
  146. data/spec/dummy/db/seeds.rb +0 -1
  147. data/spec/dummy/lib/assets/.gitkeep +0 -0
  148. data/spec/dummy/public/404.html +0 -67
  149. data/spec/dummy/public/422.html +0 -67
  150. data/spec/dummy/public/500.html +0 -66
  151. data/spec/dummy/public/favicon.ico +0 -0
  152. data/spec/dummy/spec/javascripts +0 -1
  153. data/spec/factories.rb +0 -13
  154. data/spec/features/admin/admin_layout_spec.rb +0 -14
  155. data/spec/features/admin/dashboard_spec.rb +0 -81
  156. data/spec/features/admin/edit_elements_feature_spec.rb +0 -36
  157. data/spec/features/admin/language_tree_feature_spec.rb +0 -32
  158. data/spec/features/admin/languages_features_spec.rb +0 -65
  159. data/spec/features/admin/legacy_page_url_management_spec.rb +0 -62
  160. data/spec/features/admin/link_overlay_spec.rb +0 -53
  161. data/spec/features/admin/locale_select_feature_spec.rb +0 -25
  162. data/spec/features/admin/modules_integration_spec.rb +0 -23
  163. data/spec/features/admin/navigation_feature_spec.rb +0 -22
  164. data/spec/features/admin/page_creation_feature_spec.rb +0 -51
  165. data/spec/features/admin/page_editing_feature_spec.rb +0 -135
  166. data/spec/features/admin/picture_library_integration_spec.rb +0 -62
  167. data/spec/features/admin/resources_integration_spec.rb +0 -128
  168. data/spec/features/admin/site_select_feature_spec.rb +0 -31
  169. data/spec/features/admin/tinymce_feature_spec.rb +0 -33
  170. data/spec/features/navigation_spec.rb +0 -9
  171. data/spec/features/page_feature_spec.rb +0 -186
  172. data/spec/features/page_redirects_spec.rb +0 -358
  173. data/spec/features/picture_security_spec.rb +0 -29
  174. data/spec/features/security_spec.rb +0 -24
  175. data/spec/features/translation_integration_spec.rb +0 -51
  176. data/spec/fixtures/500x500.png +0 -0
  177. data/spec/fixtures/80x60.png +0 -0
  178. data/spec/fixtures/animated.gif +0 -0
  179. data/spec/fixtures/image with spaces.png +0 -0
  180. data/spec/fixtures/image.png +0 -0
  181. data/spec/fixtures/image2.PNG +0 -0
  182. data/spec/fixtures/image3.jpeg +0 -0
  183. data/spec/helpers/alchemy/admin/attachments_helper_spec.rb +0 -15
  184. data/spec/helpers/alchemy/admin/base_helper_spec.rb +0 -280
  185. data/spec/helpers/alchemy/admin/contents_helper_spec.rb +0 -46
  186. data/spec/helpers/alchemy/admin/elements_helper_spec.rb +0 -314
  187. data/spec/helpers/alchemy/admin/essences_helper_spec.rb +0 -201
  188. data/spec/helpers/alchemy/admin/navigation_helper_spec.rb +0 -294
  189. data/spec/helpers/alchemy/admin/pages_helper_spec.rb +0 -63
  190. data/spec/helpers/alchemy/admin/pictures_helper_spec.rb +0 -28
  191. data/spec/helpers/alchemy/admin/tags_helper_spec.rb +0 -111
  192. data/spec/helpers/alchemy/base_helper_spec.rb +0 -44
  193. data/spec/helpers/alchemy/elements_block_helper_spec.rb +0 -135
  194. data/spec/helpers/alchemy/elements_helper_spec.rb +0 -326
  195. data/spec/helpers/alchemy/essences_helper_spec.rb +0 -85
  196. data/spec/helpers/alchemy/pages_helper_spec.rb +0 -499
  197. data/spec/helpers/alchemy/picture_url_helpers_spec.rb +0 -78
  198. data/spec/helpers/alchemy/url_helper_spec.rb +0 -200
  199. data/spec/javascripts/alchemy/dialog_spec.coffee +0 -82
  200. data/spec/javascripts/alchemy/link_overlay_spec.coffee +0 -25
  201. data/spec/javascripts/alchemy_integration_spec.coffee +0 -3
  202. data/spec/javascripts/fixtures/select.html +0 -3
  203. data/spec/javascripts/helpers/mock-ajax.js +0 -199
  204. data/spec/javascripts/helpers/test_responses/test_responses.js +0 -1
  205. data/spec/javascripts/support/jasmine.yml +0 -29
  206. data/spec/libraries/auth_accessors_spec.rb +0 -40
  207. data/spec/libraries/config_spec.rb +0 -111
  208. data/spec/libraries/controller_actions_spec.rb +0 -133
  209. data/spec/libraries/i18n_spec.rb +0 -37
  210. data/spec/libraries/kaminari/scoped_pagination_url_helper_spec.rb +0 -30
  211. data/spec/libraries/modules_spec.rb +0 -67
  212. data/spec/libraries/mount_point_spec.rb +0 -77
  213. data/spec/libraries/page_layout_spec.rb +0 -150
  214. data/spec/libraries/paths_spec.rb +0 -15
  215. data/spec/libraries/permissions_spec.rb +0 -260
  216. data/spec/libraries/resource_spec.rb +0 -344
  217. data/spec/libraries/resources_helper_spec.rb +0 -193
  218. data/spec/libraries/shell_spec.rb +0 -121
  219. data/spec/libraries/template_tracker_spec.rb +0 -85
  220. data/spec/libraries/tinymce_spec.rb +0 -111
  221. data/spec/libraries/userstamp_spec.rb +0 -10
  222. data/spec/mailers/alchemy/messages_spec.rb +0 -21
  223. data/spec/models/alchemy/attachment_spec.rb +0 -250
  224. data/spec/models/alchemy/cell_spec.rb +0 -101
  225. data/spec/models/alchemy/content_spec.rb +0 -513
  226. data/spec/models/alchemy/element_spec.rb +0 -862
  227. data/spec/models/alchemy/element_to_page_spec.rb +0 -13
  228. data/spec/models/alchemy/essence_boolean_spec.rb +0 -10
  229. data/spec/models/alchemy/essence_date_spec.rb +0 -28
  230. data/spec/models/alchemy/essence_file_spec.rb +0 -40
  231. data/spec/models/alchemy/essence_html_spec.rb +0 -18
  232. data/spec/models/alchemy/essence_link_spec.rb +0 -10
  233. data/spec/models/alchemy/essence_picture_spec.rb +0 -255
  234. data/spec/models/alchemy/essence_richtext_spec.rb +0 -23
  235. data/spec/models/alchemy/essence_select_spec.rb +0 -10
  236. data/spec/models/alchemy/essence_text_spec.rb +0 -110
  237. data/spec/models/alchemy/language_spec.rb +0 -243
  238. data/spec/models/alchemy/legacy_page_url_spec.rb +0 -21
  239. data/spec/models/alchemy/message_spec.rb +0 -55
  240. data/spec/models/alchemy/page_spec.rb +0 -2108
  241. data/spec/models/alchemy/picture_spec.rb +0 -418
  242. data/spec/models/alchemy/site_spec.rb +0 -168
  243. data/spec/models/alchemy/tag_spec.rb +0 -29
  244. data/spec/models/dummy_model_spec.rb +0 -10
  245. data/spec/requests/alchemy/admin/resources_requests_spec.rb +0 -26
  246. data/spec/requests/alchemy/admin/site_requests_spec.rb +0 -19
  247. data/spec/requests/alchemy/site_requests_spec.rb +0 -18
  248. data/spec/requests/alchemy/sitemap_spec.rb +0 -56
  249. data/spec/routing/api_routing_spec.rb +0 -150
  250. data/spec/routing/routing_spec.rb +0 -340
  251. data/spec/spec_helper.rb +0 -90
  252. data/spec/support/ci/install_phantomjs +0 -7
  253. data/spec/support/hint_examples.rb +0 -28
  254. data/spec/support/test_tweaks.rb +0 -31
  255. data/spec/support/transformation_examples.rb +0 -179
  256. data/spec/tasks/helpers_spec.rb +0 -217
  257. data/spec/views/admin/pictures/show_spec.rb +0 -43
  258. data/spec/views/essences/essence_boolean_editor_spec.rb +0 -32
  259. data/spec/views/essences/essence_boolean_view_spec.rb +0 -23
  260. data/spec/views/essences/essence_date_view_spec.rb +0 -38
  261. data/spec/views/essences/essence_file_editor_spec.rb +0 -59
  262. data/spec/views/essences/essence_file_view_spec.rb +0 -77
  263. data/spec/views/essences/essence_html_view_spec.rb +0 -22
  264. data/spec/views/essences/essence_link_view_spec.rb +0 -41
  265. data/spec/views/essences/essence_picture_editor_spec.rb +0 -80
  266. data/spec/views/essences/essence_picture_view_spec.rb +0 -128
  267. data/spec/views/essences/essence_richtext_view_spec.rb +0 -32
  268. data/spec/views/essences/essence_select_view_spec.rb +0 -11
  269. data/spec/views/essences/essence_text_view_spec.rb +0 -51
@@ -1,44 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Alchemy
4
- describe BaseHelper do
5
- describe "#render_message" do
6
- context "if no argument is passed" do
7
- it "should render a div with an info icon and the given content" do
8
- expect(helper.render_message{ content_tag(:p, "my notice") }).to match(/<div class="info message"><span class="icon info"><\/span><p>my notice/)
9
- end
10
- end
11
-
12
- context "if an argument is passed" do
13
- it "should render the passed argument as the css classname for the icon container" do
14
- expect(helper.render_message(:error){ content_tag(:p, "my notice") }).to match(/<div class="error message"><span class="icon error">/)
15
- end
16
- end
17
- end
18
-
19
- describe '#page_or_find' do
20
- let(:page) { create(:alchemy_page, :public) }
21
-
22
- context "passing a page_layout string" do
23
- context "of a not existing page" do
24
- it "should return nil" do
25
- expect(helper.page_or_find('contact')).to be_nil
26
- end
27
- end
28
-
29
- context 'of an existing page' do
30
- it "should return the page object" do
31
- session[:alchemy_language_id] = page.language_id
32
- expect(helper.page_or_find(page.page_layout)).to eq(page)
33
- end
34
- end
35
- end
36
-
37
- context "passing a page object" do
38
- it "should return the given page object" do
39
- expect(helper.page_or_find(page)).to eq(page)
40
- end
41
- end
42
- end
43
- end
44
- end
@@ -1,135 +0,0 @@
1
- require 'spec_helper'
2
-
3
- include Alchemy::ElementsHelper
4
-
5
- module Alchemy
6
- describe 'ElementsBlockHelper' do
7
- let(:page) { create(:alchemy_page, :public) }
8
- let(:element) { create(:alchemy_element, page: page, tag_list: 'foo, bar') }
9
- let(:expected_wrapper_tag) { "div.#{element.name}##{element_dom_id(element)}" }
10
-
11
- describe '#element_view_for' do
12
- it "should yield an instance of ElementViewHelper" do
13
- expect { |b| element_view_for(element, &b) }.
14
- to yield_with_args(ElementsBlockHelper::ElementViewHelper)
15
- end
16
-
17
- it "should wrap its output in a DOM element" do
18
- expect(element_view_for(element)).
19
- to have_css expected_wrapper_tag
20
- end
21
-
22
- it "should change the wrapping DOM element according to parameters" do
23
- expect(element_view_for(element, tag: 'span', class: 'some_class', id: 'some_id')).
24
- to have_css 'span.some_class#some_id'
25
- end
26
-
27
- it "should include the element's tags in the wrapper DOM element" do
28
- expect(element_view_for(element)).
29
- to have_css "#{expected_wrapper_tag}[data-element-tags='foo bar']"
30
- end
31
-
32
- it "should use the provided tags formatter to format tags" do
33
- expect(element_view_for(element, tags_formatter: lambda { |tags| tags.join ", " })).
34
- to have_css "#{expected_wrapper_tag}[data-element-tags='foo, bar']"
35
- end
36
-
37
- it "should include the contents rendered by the block passed to it" do
38
- expect(element_view_for(element) do
39
- 'view'
40
- end).to have_content 'view'
41
- end
42
-
43
- context "when/if preview mode is not active" do
44
- subject { element_view_for(element) }
45
- it { is_expected.to have_css expected_wrapper_tag }
46
- it { is_expected.not_to have_css "#{expected_wrapper_tag}[data-alchemy-element]" }
47
- end
48
-
49
- context "when/if preview mode is active" do
50
- before do
51
- assign(:preview_mode, true)
52
- assign(:page, page)
53
- end
54
-
55
- subject { helper.element_view_for(element) }
56
- it { is_expected.to have_css "#{expected_wrapper_tag}[data-alchemy-element='#{element.id}']" }
57
- end
58
- end
59
-
60
- describe '#element_editor_for' do
61
- it "should yield an instance of ElementEditorHelper" do
62
- expect { |b| element_editor_for(element, &b) }.
63
- to yield_with_args(ElementsBlockHelper::ElementEditorHelper)
64
- end
65
-
66
- it "should not add any extra elements" do
67
- expect(element_editor_for(element) do
68
- 'view'
69
- end).to eq('view')
70
- end
71
- end
72
-
73
- describe 'ElementsBlockHelper::ElementViewHelper' do
74
- let(:scope) { double }
75
- subject { ElementsBlockHelper::ElementViewHelper.new(scope, element: element) }
76
-
77
- it 'should have a reference to the specified element' do
78
- subject.element == element
79
- end
80
-
81
- describe '#render' do
82
- it 'should delegate to the render_essence_view_by_name helper' do
83
- expect(scope).to receive(:render_essence_view_by_name).with(element, "title", foo: 'bar')
84
- subject.render :title, foo: 'bar'
85
- end
86
- end
87
-
88
- describe '#content' do
89
- it "should delegate to the element's #content_by_name method" do
90
- expect(element).to receive(:content_by_name).with(:title)
91
- subject.content :title
92
- end
93
- end
94
-
95
- describe '#ingredient' do
96
- it "should delegate to the element's #ingredient method" do
97
- expect(element).to receive(:ingredient).with(:title)
98
- subject.ingredient :title
99
- end
100
- end
101
-
102
- describe '#has?' do
103
- it "should delegate to the element's #has_ingredient? method" do
104
- expect(element).to receive(:has_ingredient?).with(:title)
105
- subject.has? :title
106
- end
107
- end
108
-
109
- describe '#essence' do
110
- it "should provide the specified content essence" do
111
- expect(subject).to receive(:content).with(:title).
112
- and_return(mock_model('Content', essence: mock_model('EssenceText')))
113
-
114
- subject.essence :title
115
- end
116
- end
117
- end
118
-
119
- describe 'ElementsBlockHelper::ElementEditorHelper' do
120
- let(:scope) { double }
121
- subject { ElementsBlockHelper::ElementEditorHelper.new(scope, element: element) }
122
-
123
- it 'should have a reference to the specified element' do
124
- subject.element == element
125
- end
126
-
127
- describe '#edit' do
128
- it "should delegate to the render_essence_editor_by_name helper" do
129
- expect(scope).to receive(:render_essence_editor_by_name).with(element, "title", foo: 'bar')
130
- subject.edit :title, foo: 'bar'
131
- end
132
- end
133
- end
134
- end
135
- end
@@ -1,326 +0,0 @@
1
- require 'spec_helper'
2
- include Alchemy::BaseHelper
3
-
4
- module Alchemy
5
- describe ElementsHelper do
6
- let(:page) { build_stubbed(:alchemy_page, :public) }
7
- let(:element) { build_stubbed(:alchemy_element, name: 'headline', page: page) }
8
-
9
- before do
10
- assign(:page, page)
11
- allow_any_instance_of(Element).to receive(:store_page).and_return(true)
12
- end
13
-
14
- describe '#render_element' do
15
- subject { render_element(element, part) }
16
-
17
- context 'with nil element' do
18
- let(:element) { nil }
19
- let(:part) { :view }
20
- it { is_expected.to be_nil }
21
- end
22
-
23
- context 'with view as part given' do
24
- let(:part) { :view }
25
-
26
- it "renders the element's view partial" do
27
- is_expected.to have_selector("##{element.name}_#{element.id}")
28
- end
29
-
30
- context 'with element view partial not found' do
31
- let(:element) { build_stubbed(:alchemy_element, name: 'not_present') }
32
-
33
- it "renders the view not found partial" do
34
- is_expected.to match(/Missing view for not_present element/)
35
- end
36
- end
37
- end
38
-
39
- context 'with editor as part given' do
40
- let(:part) { :editor }
41
-
42
- it "renders the element's editor partial" do
43
- expect(helper).to receive(:render_essence_editor_by_name)
44
- subject
45
- end
46
-
47
- context 'with element editor partial not found' do
48
- let(:element) { build_stubbed(:alchemy_element, name: 'not_present') }
49
-
50
- it "renders the editor not found partial" do
51
- is_expected.to have_selector('div.error')
52
- is_expected.to have_content('Element editor partial not found')
53
- end
54
- end
55
- end
56
- end
57
-
58
- describe '#element_dom_id' do
59
- subject { helper.element_dom_id(element) }
60
-
61
- it "should render a unique dom id for element" do
62
- is_expected.to eq("#{element.name}_#{element.id}")
63
- end
64
- end
65
-
66
- describe "#render_elements" do
67
- subject { helper.render_elements(options) }
68
-
69
- let(:another_element) { build_stubbed(:alchemy_element, page: page) }
70
- let(:elements) { [element, another_element] }
71
-
72
- context 'without any options' do
73
- let(:options) { {} }
74
-
75
- before do
76
- expect(page).to receive(:find_elements).and_return(elements)
77
- end
78
-
79
- it "should render all elements from page." do
80
- is_expected.to have_selector("##{element.name}_#{element.id}")
81
- is_expected.to have_selector("##{another_element.name}_#{another_element.id}")
82
- end
83
- end
84
-
85
- context "with from_page option" do
86
- context 'is a page object' do
87
- let(:another_page) { build_stubbed(:alchemy_page, :public) }
88
- let(:options) { {from_page: another_page} }
89
-
90
- before do
91
- expect(another_page).to receive(:find_elements).and_return(elements)
92
- end
93
-
94
- it "should render all elements from that page." do
95
- is_expected.to have_selector("##{element.name}_#{element.id}")
96
- is_expected.to have_selector("##{another_element.name}_#{another_element.id}")
97
- end
98
- end
99
-
100
- context 'is a string' do
101
- let(:another_page) { build_stubbed(:alchemy_page, :public) }
102
- let(:another_element) { build_stubbed(:alchemy_element, page: another_page) }
103
- let(:other_elements) { [another_element] }
104
- let(:options) { {from_page: 'news'} }
105
-
106
- before do
107
- allow(Language).to receive(:current).and_return double(pages: double(where: pages))
108
- expect(another_page).to receive(:find_elements).and_return(other_elements)
109
- end
110
-
111
- context 'and one page can be found by page layout' do
112
- let(:pages) { [another_page] }
113
-
114
- it "it renders all elements from that page." do
115
- is_expected.to have_selector("##{another_element.name}_#{another_element.id}")
116
- end
117
- end
118
-
119
- context 'and an array of pages has been found' do
120
- let(:pages) { [page, another_page] }
121
-
122
- before do
123
- expect(page).to receive(:find_elements).and_return(elements)
124
- end
125
-
126
- it 'renders elements from these pages' do
127
- is_expected.to have_selector("##{element.name}_#{element.id}")
128
- is_expected.to have_selector("##{another_element.name}_#{another_element.id}")
129
- end
130
- end
131
- end
132
- end
133
-
134
- context 'if page is nil' do
135
- let(:options) { {from_page: nil} }
136
- it { is_expected.to be_blank }
137
- end
138
-
139
- context 'with sort_by and reverse option given' do
140
- let(:options) { {sort_by: true, reverse: true} }
141
- let(:sorted_elements) { [another_element, element] }
142
-
143
- before do
144
- expect(elements).to receive(:sort_by).and_return(sorted_elements)
145
- expect(sorted_elements).to receive(:reverse).and_return(elements)
146
- expect(page).to receive(:find_elements).and_return(elements)
147
- end
148
-
149
- it "renders the sorted elements in reverse order" do
150
- is_expected.not_to be_blank
151
- end
152
- end
153
-
154
- context 'with sort_by option given' do
155
- let(:options) { {sort_by: 'title'} }
156
- let(:sorted_elements) { [another_element, element] }
157
-
158
- before do
159
- expect(elements).to receive(:sort_by).and_return(sorted_elements)
160
- expect(elements).not_to receive(:reverse)
161
- expect(page).to receive(:find_elements).and_return(elements)
162
- end
163
-
164
- it "renders the elements in the order of given content name" do
165
- is_expected.not_to be_blank
166
- end
167
- end
168
-
169
- context "with option fallback" do
170
- let(:another_page) { build_stubbed(:alchemy_page, :public, name: 'Another Page', page_layout: 'news') }
171
- let(:another_element) { build_stubbed(:alchemy_element, page: another_page, name: 'news') }
172
- let(:elements) { [another_element] }
173
-
174
- context 'with string given as :fallback_from' do
175
- let(:options) { {fallback: {for: 'higgs', with: 'news', from: 'news'}} }
176
-
177
- before do
178
- allow(Language).to receive(:current).and_return double(pages: double(find_by: another_page))
179
- allow(another_page).to receive(:elements).and_return double(not_trashed: double(named: elements))
180
- end
181
-
182
- it "renders the fallback element" do
183
- is_expected.to have_selector("#news_#{another_element.id}")
184
- end
185
- end
186
-
187
- context 'with page given as :fallback_from' do
188
- let(:options) { {fallback: {for: 'higgs', with: 'news', from: another_page}} }
189
-
190
- before do
191
- allow(another_page).to receive(:elements).and_return double(not_trashed: double(named: elements))
192
- end
193
-
194
- it "renders the fallback element" do
195
- is_expected.to have_selector("#news_#{another_element.id}")
196
- end
197
- end
198
- end
199
-
200
- context 'with option separator given' do
201
- let(:options) { {separator: '<hr>'} }
202
-
203
- before do
204
- expect(page).to receive(:find_elements).and_return(elements)
205
- end
206
-
207
- it "joins element partials with given string" do
208
- is_expected.to have_selector('hr')
209
- end
210
- end
211
- end
212
-
213
- describe '#element_preview_code_attributes' do
214
- subject { helper.element_preview_code_attributes(element) }
215
-
216
- context 'in preview_mode' do
217
- before { assign(:preview_mode, true) }
218
-
219
- it "should return the data-alchemy-element HTML attribute for element" do
220
- is_expected.to eq({:'data-alchemy-element' => element.id})
221
- end
222
- end
223
-
224
- context 'not in preview_mode' do
225
- it "should return an empty hash" do
226
- is_expected.to eq({})
227
- end
228
- end
229
- end
230
-
231
- describe '#element_preview_code' do
232
- subject { helper.element_preview_code(element) }
233
-
234
- context 'in preview_mode' do
235
- before { assign(:preview_mode, true) }
236
-
237
- it "should return the data-alchemy-element HTML attribute for element" do
238
- is_expected.to eq(" data-alchemy-element=\"#{element.id}\"")
239
- end
240
- end
241
-
242
- context 'not in preview_mode' do
243
- it "should not return the data-alchemy-element HTML attribute" do
244
- is_expected.not_to eq(" data-alchemy-element=\"#{element.id}\"")
245
- end
246
- end
247
- end
248
-
249
- describe '#element_tags' do
250
- subject { element_tags(element, options) }
251
-
252
- let(:element) { build_stubbed(:alchemy_element) }
253
- let(:options) { {} }
254
-
255
- context "element having tags" do
256
- before { element.tag_list = "peter, lustig" }
257
-
258
- context "with no formatter lambda given" do
259
- it "should return tag list as HTML data attribute" do
260
- is_expected.to eq(" data-element-tags=\"peter lustig\"")
261
- end
262
- end
263
-
264
- context "with a formatter lambda given" do
265
- let(:options) { {formatter: ->(tags) { tags.join ", " }} }
266
-
267
- it "should return a properly formatted HTML data attribute" do
268
- is_expected.to eq(" data-element-tags=\"peter, lustig\"")
269
- end
270
- end
271
- end
272
-
273
- context "element not having tags" do
274
- it { is_expected.to be_blank }
275
- end
276
- end
277
-
278
- describe '#sort_elements_by_content' do
279
- subject { sort_elements_by_content(elements, 'headline') }
280
-
281
- let(:element_1) { build_stubbed(:alchemy_element) }
282
- let(:element_2) { build_stubbed(:alchemy_element) }
283
- let(:element_3) { build_stubbed(:alchemy_element) }
284
- let(:ingredient_a) { double(ingredient: 'a') }
285
- let(:ingredient_b) { double(ingredient: 'b') }
286
- let(:ingredient_c) { double(ingredient: 'c') }
287
- let(:elements) { [element_1, element_2, element_3] }
288
-
289
- before do
290
- expect(element_1).to receive(:content_by_name).and_return(ingredient_b)
291
- expect(element_2).to receive(:content_by_name).and_return(ingredient_c)
292
- expect(element_3).to receive(:content_by_name).and_return(ingredient_a)
293
- end
294
-
295
- it "sorts the elements by content" do
296
- is_expected.to eq [element_3, element_1, element_2]
297
- end
298
-
299
- context 'with element not having this content' do
300
- let(:element_4) { build_stubbed(:alchemy_element) }
301
- let(:elements) { [element_1, element_2, element_3, element_4] }
302
-
303
- before do
304
- expect(element_4).to receive(:content_by_name).and_return(nil)
305
- end
306
-
307
- it "puts it at first place" do
308
- is_expected.to eq [element_4, element_3, element_1, element_2]
309
- end
310
- end
311
-
312
- context 'with element having content with nil as ingredient' do
313
- let(:element_4) { build_stubbed(:alchemy_element) }
314
- let(:elements) { [element_1, element_2, element_3, element_4] }
315
-
316
- before do
317
- expect(element_4).to receive(:content_by_name).and_return(double(ingredient: nil))
318
- end
319
-
320
- it "puts it at first place" do
321
- is_expected.to eq [element_4, element_3, element_1, element_2]
322
- end
323
- end
324
- end
325
- end
326
- end