alchemy_cms 3.0.4 → 3.1.0.beta1
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.
- checksums.yaml +4 -4
- data/.travis.yml +4 -6
- data/Gemfile +4 -7
- data/README.md +207 -115
- data/alchemy_cms.gemspec +10 -9
- data/app/assets/javascripts/alchemy/alchemy.dragndrop.js.coffee +2 -2
- data/app/assets/javascripts/alchemy/alchemy.image_cropper.js.coffee +2 -2
- data/app/assets/javascripts/alchemy/alchemy.js +6 -7
- data/app/assets/javascripts/alchemy/alchemy.translations.js.coffee +1 -43
- data/app/assets/javascripts/alchemy/alchemy.uploader.js.coffee +1 -1
- data/app/assets/stylesheets/alchemy/_mixins.scss +2 -1
- data/app/assets/stylesheets/alchemy/buttons.scss +0 -5
- data/app/assets/stylesheets/alchemy/dialogs.scss +1 -0
- data/app/assets/stylesheets/alchemy/frame.scss +9 -12
- data/app/assets/stylesheets/tinymce/skins/alchemy/content.min.css.scss +11 -2
- data/app/assets/stylesheets/tinymce/skins/alchemy/skin.min.css.scss +9 -1
- data/app/controllers/alchemy/admin/attachments_controller.rb +2 -4
- data/app/controllers/alchemy/admin/essence_pictures_controller.rb +34 -38
- data/app/controllers/alchemy/api/base_controller.rb +19 -0
- data/app/controllers/alchemy/api/contents_controller.rb +35 -0
- data/app/controllers/alchemy/api/elements_controller.rb +29 -0
- data/app/controllers/alchemy/api/pages_controller.rb +32 -0
- data/app/controllers/alchemy/contents_controller.rb +1 -0
- data/app/controllers/alchemy/elements_controller.rb +5 -2
- data/app/controllers/alchemy/pages_controller.rb +4 -1
- data/app/controllers/alchemy/pictures_controller.rb +4 -36
- data/app/helpers/alchemy/admin/essences_helper.rb +5 -2
- data/app/helpers/alchemy/essences_helper.rb +14 -1
- data/app/models/alchemy/content.rb +32 -4
- data/app/models/alchemy/element.rb +2 -16
- data/app/models/alchemy/element/presenters.rb +2 -2
- data/app/models/alchemy/essence_file.rb +5 -0
- data/app/models/alchemy/essence_picture.rb +12 -8
- data/app/models/alchemy/picture.rb +1 -74
- data/app/models/alchemy/picture/transformations.rb +249 -0
- data/app/serializers/alchemy/content_serializer.rb +3 -10
- data/app/serializers/alchemy/element_serializer.rb +6 -3
- data/app/serializers/alchemy/legacy_element_serializer.rb +17 -0
- data/app/views/alchemy/admin/dashboard/_sites.html.erb +14 -4
- data/app/views/alchemy/admin/essence_pictures/crop.html.erb +8 -5
- data/app/views/alchemy/admin/pages/edit.html.erb +9 -9
- data/app/views/alchemy/admin/pictures/info.html.erb +2 -3
- data/app/views/alchemy/admin/tags/edit.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_boolean_editor.html.erb +8 -7
- data/app/views/alchemy/essences/_essence_boolean_view.html.erb +3 -3
- data/app/views/alchemy/essences/_essence_date_editor.html.erb +8 -2
- data/app/views/alchemy/essences/_essence_date_view.html.erb +10 -8
- data/app/views/alchemy/essences/_essence_file_editor.html.erb +48 -53
- data/app/views/alchemy/essences/_essence_file_view.html.erb +5 -5
- data/app/views/alchemy/essences/_essence_html_editor.html.erb +5 -4
- data/app/views/alchemy/essences/_essence_link_editor.html.erb +17 -15
- data/app/views/alchemy/essences/_essence_link_view.html.erb +11 -7
- data/app/views/alchemy/essences/_essence_picture_editor.html.erb +4 -2
- data/app/views/alchemy/essences/_essence_picture_view.html.erb +4 -2
- data/app/views/alchemy/essences/_essence_richtext_view.html.erb +5 -4
- data/app/views/alchemy/essences/_essence_select_editor.html.erb +22 -32
- data/app/views/alchemy/essences/_essence_text_view.html.erb +7 -6
- data/app/views/alchemy/essences/shared/_essence_picture_tools.html.erb +1 -1
- data/app/views/layouts/alchemy/admin.html.erb +5 -3
- data/config/initializers/inflections.rb +3 -0
- data/config/initializers/simple_form.rb +1 -1
- data/config/locales/alchemy.en.yml +0 -1
- data/config/routes.rb +14 -0
- data/lib/alchemy/capistrano.rb +71 -0
- data/lib/alchemy/engine.rb +0 -3
- data/lib/alchemy/essence.rb +1 -1
- data/lib/alchemy/permissions.rb +19 -5
- data/lib/alchemy/picture_attributes.rb +1 -1
- data/lib/alchemy/test_support/auth_helpers.rb +1 -1
- data/lib/alchemy/test_support/essence_shared_examples.rb +37 -22
- data/lib/alchemy/test_support/integration_helpers.rb +1 -1
- data/lib/alchemy/tinymce.rb +21 -4
- data/lib/alchemy/upgrader/three_point_one.rb +43 -0
- data/lib/alchemy/upgrader/three_point_zero.rb +13 -0
- data/lib/alchemy/version.rb +2 -1
- data/lib/rails/generators/alchemy/module/module_generator.rb +30 -0
- data/lib/rails/generators/alchemy/module/templates/ability.rb.tt +11 -0
- data/lib/rails/generators/alchemy/module/templates/controller.rb.tt +2 -0
- data/lib/rails/generators/alchemy/module/templates/module_config.rb.tt +15 -0
- data/lib/rails/generators/alchemy/scaffold/scaffold_generator.rb +0 -1
- data/lib/rails/templates/alchemy.rb +2 -2
- data/lib/tasks/alchemy/db.rake +7 -1
- data/spec/controllers/admin/attachments_controller_spec.rb +38 -38
- data/spec/controllers/admin/base_controller_spec.rb +18 -18
- data/spec/controllers/admin/clipboard_controller_spec.rb +23 -18
- data/spec/controllers/admin/contents_controller_spec.rb +33 -27
- data/spec/controllers/admin/dashboard_controller_spec.rb +14 -14
- data/spec/controllers/admin/elements_controller_spec.rb +125 -105
- data/spec/controllers/admin/essence_files_controller_spec.rb +6 -7
- data/spec/controllers/admin/essence_pictures_controller_spec.rb +52 -42
- data/spec/controllers/admin/languages_controller_spec.rb +3 -3
- data/spec/controllers/admin/pages_controller_spec.rb +81 -71
- data/spec/controllers/admin/pictures_controller_spec.rb +69 -72
- data/spec/controllers/admin/resources_controller_spec.rb +5 -5
- data/spec/controllers/admin/trash_controller_spec.rb +15 -12
- data/spec/controllers/alchemy/admin/tags_controller_spec.rb +8 -8
- data/spec/controllers/alchemy/api/contents_controller_spec.rb +73 -0
- data/spec/controllers/alchemy/api/elements_controller_spec.rb +69 -0
- data/spec/controllers/alchemy/api/pages_controller_spec.rb +86 -0
- data/spec/controllers/attachments_controller_spec.rb +8 -8
- data/spec/controllers/contents_controller_spec.rb +22 -0
- data/spec/controllers/elements_controller_spec.rb +10 -4
- data/spec/controllers/messages_controller_spec.rb +35 -34
- data/spec/controllers/pages_controller_spec.rb +37 -28
- data/spec/controllers/pictures_controller_spec.rb +90 -23
- data/spec/dummy/app/models/dummy_user.rb +0 -4
- data/spec/dummy/app/views/alchemy/elements/_all_you_can_eat_editor.html.erb +11 -0
- data/spec/dummy/config/alchemy/elements.yml +22 -1
- data/spec/dummy/config/alchemy/page_layouts.yml +4 -0
- data/spec/dummy/config/application.rb +2 -1
- data/spec/dummy/config/environments/test.rb +3 -1
- data/spec/features/admin/dashboard_spec.rb +41 -6
- data/spec/features/admin/language_tree_feature_spec.rb +3 -3
- data/spec/features/admin/legacy_page_url_management_spec.rb +1 -1
- data/spec/features/admin/link_overlay_spec.rb +7 -7
- data/spec/features/admin/locale_select_feature_spec.rb +5 -2
- data/spec/features/admin/modules_integration_spec.rb +1 -1
- data/spec/features/admin/page_creation_feature_spec.rb +3 -2
- data/spec/features/admin/page_editing_feature_spec.rb +66 -79
- data/spec/features/admin/picture_library_integration_spec.rb +8 -8
- data/spec/features/admin/resources_integration_spec.rb +21 -21
- data/spec/features/admin/tinymce_feature_spec.rb +36 -0
- data/spec/features/navigation_spec.rb +1 -1
- data/spec/features/page_feature_spec.rb +34 -34
- data/spec/features/picture_security_spec.rb +4 -4
- data/spec/features/security_spec.rb +1 -1
- data/spec/features/translation_integration_spec.rb +7 -7
- data/spec/helpers/admin/base_helper_spec.rb +51 -49
- data/spec/helpers/admin/contents_helper_spec.rb +11 -11
- data/spec/helpers/admin/elements_helper_spec.rb +20 -17
- data/spec/helpers/admin/essences_helper_spec.rb +42 -11
- data/spec/helpers/admin/navigation_helper_spec.rb +64 -54
- data/spec/helpers/admin/pages_helper_spec.rb +10 -10
- data/spec/helpers/admin/tags_helper_spec.rb +16 -16
- data/spec/helpers/base_helper_spec.rb +11 -11
- data/spec/helpers/elements_block_helper_spec.rb +24 -24
- data/spec/helpers/elements_helper_spec.rb +46 -46
- data/spec/helpers/essences_helper_spec.rb +90 -17
- data/spec/helpers/pages_helper_spec.rb +53 -53
- data/spec/helpers/picture_url_helpers_spec.rb +6 -6
- data/spec/helpers/url_helper_spec.rb +32 -32
- data/spec/libraries/config_spec.rb +9 -9
- data/spec/libraries/controller_actions_spec.rb +14 -14
- data/spec/libraries/i18n_spec.rb +6 -6
- data/spec/libraries/kaminari/scoped_pagination_url_helper_spec.rb +4 -4
- data/spec/libraries/modules_spec.rb +4 -4
- data/spec/libraries/mount_point_spec.rb +13 -13
- data/spec/libraries/page_layout_spec.rb +24 -24
- data/spec/libraries/permissions_spec.rb +97 -80
- data/spec/libraries/resource_spec.rb +37 -37
- data/spec/libraries/resources_helper_spec.rb +19 -19
- data/spec/libraries/shell_spec.rb +17 -17
- data/spec/libraries/template_tracker_spec.rb +14 -14
- data/spec/libraries/tinymce_spec.rb +8 -8
- data/spec/libraries/userstamp_spec.rb +2 -2
- data/spec/mailers/messages_spec.rb +4 -4
- data/spec/models/attachment_spec.rb +86 -30
- data/spec/models/cell_spec.rb +10 -10
- data/spec/models/content_spec.rb +106 -46
- data/spec/models/element_spec.rb +94 -115
- data/spec/models/essence_date_spec.rb +1 -1
- data/spec/models/essence_file_spec.rb +4 -4
- data/spec/models/essence_picture_spec.rb +56 -25
- data/spec/models/essence_richtext_spec.rb +1 -1
- data/spec/models/essence_text_spec.rb +7 -7
- data/spec/models/language_spec.rb +12 -12
- data/spec/models/legacy_page_url_spec.rb +2 -2
- data/spec/models/message_spec.rb +12 -5
- data/spec/models/page_spec.rb +259 -235
- data/spec/models/picture_spec.rb +72 -166
- data/spec/models/site_spec.rb +41 -41
- data/spec/models/tag_spec.rb +7 -7
- data/spec/routing/api_routing_spec.rb +150 -0
- data/spec/routing/routing_spec.rb +28 -28
- data/spec/spec_helper.rb +6 -5
- data/spec/support/hint_examples.rb +5 -5
- data/spec/support/transformation_examples.rb +173 -0
- data/spec/tasks/helpers_spec.rb +29 -29
- data/spec/views/essences/essence_boolean_editor_spec.rb +32 -0
- data/spec/views/essences/essence_boolean_view_spec.rb +2 -2
- data/spec/views/essences/essence_date_view_spec.rb +1 -1
- data/spec/views/essences/essence_link_view_spec.rb +11 -0
- data/spec/views/essences/essence_picture_view_spec.rb +56 -11
- data/spec/views/essences/essence_richtext_view_spec.rb +12 -0
- data/spec/views/essences/essence_text_view_spec.rb +12 -0
- data/vendor/assets/javascripts/tinymce/langs/de.js +20 -2
- data/vendor/assets/javascripts/tinymce/langs/fr.js +14 -1
- data/vendor/assets/javascripts/tinymce/langs/nl.js +22 -4
- data/vendor/assets/javascripts/tinymce/plugins/anchor/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/autoresize/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/charmap/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/code/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/directionality/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/fullscreen/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/hr/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/link/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/paste/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/tabfocus/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/table/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/themes/modern/theme.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/tinymce.min.js +11 -10
- metadata +72 -42
- data/app/views/alchemy/messages/contact_form_mail.es.text.erb +0 -12
- data/config/locales/alchemy.es.yml +0 -958
- data/config/locales/alchemy.ru.yml +0 -837
- data/config/locales/simple_form.es.yml +0 -6
- data/config/locales/simple_form.ru.yml +0 -25
- data/lib/rails/generators/alchemy/scaffold/files/alchemy.es.yml +0 -31
- data/vendor/assets/javascripts/tinymce/langs/es.js +0 -197
- data/vendor/assets/javascripts/tinymce/langs/ru.js +0 -197
|
@@ -6,36 +6,36 @@ module Alchemy
|
|
|
6
6
|
describe "#render_message" do
|
|
7
7
|
context "if no argument is passed" do
|
|
8
8
|
it "should render a div with an info icon and the given content" do
|
|
9
|
-
helper.render_message{ content_tag(:p, "my notice") }.
|
|
9
|
+
expect(helper.render_message{ content_tag(:p, "my notice") }).to match(/<div class="info message"><span class="icon info"><\/span><p>my notice/)
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
context "if an argument is passed" do
|
|
14
14
|
it "should render the passed argument as the css classname for the icon container" do
|
|
15
|
-
helper.render_message(:error){ content_tag(:p, "my notice") }.
|
|
15
|
+
expect(helper.render_message(:error){ content_tag(:p, "my notice") }).to match(/<div class="error message"><span class="icon error">/)
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
describe "#configuration" do
|
|
21
21
|
it "should return certain configuration options" do
|
|
22
|
-
Config.
|
|
23
|
-
helper.configuration(:some_option).
|
|
22
|
+
allow(Config).to receive(:show).and_return({"some_option" => true})
|
|
23
|
+
expect(helper.configuration(:some_option)).to eq(true)
|
|
24
24
|
end
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
describe "#multi_language?" do
|
|
28
28
|
context "if more than one published language exists" do
|
|
29
29
|
it "should return true" do
|
|
30
|
-
Alchemy::Language.
|
|
31
|
-
helper.multi_language
|
|
30
|
+
allow(Alchemy::Language).to receive(:published).and_return double(count: 2)
|
|
31
|
+
expect(helper.multi_language?).to eq(true)
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
context "if less than two published languages exists" do
|
|
36
36
|
it "should return false" do
|
|
37
|
-
Alchemy::Language.
|
|
38
|
-
helper.multi_language
|
|
37
|
+
allow(Alchemy::Language).to receive(:published).and_return double(count: 1)
|
|
38
|
+
expect(helper.multi_language?).to eq(false)
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
end
|
|
@@ -46,16 +46,16 @@ module Alchemy
|
|
|
46
46
|
let(:page) { FactoryGirl.create(:public_page, parent_id: parent.id) }
|
|
47
47
|
|
|
48
48
|
it "returns an array of all parents including self" do
|
|
49
|
-
helper.breadcrumb(page).
|
|
49
|
+
expect(helper.breadcrumb(page)).to eq([lang_root, parent, page])
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
it "does not include the root page" do
|
|
53
|
-
helper.breadcrumb(page).
|
|
53
|
+
expect(helper.breadcrumb(page)).not_to include(Page.root)
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
context "with current page nil" do
|
|
57
57
|
it "should return an empty array" do
|
|
58
|
-
helper.breadcrumb(nil).
|
|
58
|
+
expect(helper.breadcrumb(nil)).to eq([])
|
|
59
59
|
end
|
|
60
60
|
end
|
|
61
61
|
end
|
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
|
3
3
|
include Alchemy::ElementsHelper
|
|
4
4
|
|
|
5
5
|
module Alchemy
|
|
6
|
-
describe ElementsBlockHelper do
|
|
6
|
+
describe 'ElementsBlockHelper' do
|
|
7
7
|
let(:page) { FactoryGirl.create(:public_page) }
|
|
8
8
|
let(:element) { FactoryGirl.create(:element, page: page, tag_list: 'foo, bar') }
|
|
9
9
|
let(:expected_wrapper_tag) { "div.#{element.name}##{element_dom_id(element)}" }
|
|
@@ -15,35 +15,35 @@ module Alchemy
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
it "should wrap its output in a DOM element" do
|
|
18
|
-
element_view_for(element).
|
|
19
|
-
|
|
18
|
+
expect(element_view_for(element)).
|
|
19
|
+
to have_css expected_wrapper_tag
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
it "should change the wrapping DOM element according to parameters" do
|
|
23
|
-
element_view_for(element, tag: 'span', class: 'some_class', id: 'some_id').
|
|
24
|
-
|
|
23
|
+
expect(element_view_for(element, tag: 'span', class: 'some_class', id: 'some_id')).
|
|
24
|
+
to have_css 'span.some_class#some_id'
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
it "should include the element's tags in the wrapper DOM element" do
|
|
28
|
-
element_view_for(element).
|
|
29
|
-
|
|
28
|
+
expect(element_view_for(element)).
|
|
29
|
+
to have_css "#{expected_wrapper_tag}[data-element-tags='foo bar']"
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
it "should use the provided tags formatter to format tags" do
|
|
33
|
-
element_view_for(element, tags_formatter: lambda { |tags| tags.join ", " }).
|
|
34
|
-
|
|
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
35
|
end
|
|
36
36
|
|
|
37
37
|
it "should include the contents rendered by the block passed to it" do
|
|
38
|
-
element_view_for(element) do
|
|
38
|
+
expect(element_view_for(element) do
|
|
39
39
|
'view'
|
|
40
|
-
end.
|
|
40
|
+
end).to have_content 'view'
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
context "when/if preview mode is not active" do
|
|
44
44
|
subject { element_view_for(element) }
|
|
45
|
-
it {
|
|
46
|
-
it {
|
|
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
47
|
end
|
|
48
48
|
|
|
49
49
|
context "when/if preview mode is active" do
|
|
@@ -53,7 +53,7 @@ module Alchemy
|
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
subject { helper.element_view_for(element) }
|
|
56
|
-
it {
|
|
56
|
+
it { is_expected.to have_css "#{expected_wrapper_tag}[data-alchemy-element='#{element.id}']" }
|
|
57
57
|
end
|
|
58
58
|
end
|
|
59
59
|
|
|
@@ -64,13 +64,13 @@ module Alchemy
|
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
it "should not add any extra elements" do
|
|
67
|
-
element_editor_for(element) do
|
|
67
|
+
expect(element_editor_for(element) do
|
|
68
68
|
'view'
|
|
69
|
-
end.
|
|
69
|
+
end).to eq('view')
|
|
70
70
|
end
|
|
71
71
|
end
|
|
72
72
|
|
|
73
|
-
describe ElementsBlockHelper::ElementViewHelper do
|
|
73
|
+
describe 'ElementsBlockHelper::ElementViewHelper' do
|
|
74
74
|
let(:scope) { double }
|
|
75
75
|
subject { ElementsBlockHelper::ElementViewHelper.new(scope, element: element) }
|
|
76
76
|
|
|
@@ -80,35 +80,35 @@ module Alchemy
|
|
|
80
80
|
|
|
81
81
|
describe '#render' do
|
|
82
82
|
it 'should delegate to the render_essence_view_by_name helper' do
|
|
83
|
-
scope.
|
|
83
|
+
expect(scope).to receive(:render_essence_view_by_name).with(element, "title", foo: 'bar')
|
|
84
84
|
subject.render :title, foo: 'bar'
|
|
85
85
|
end
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
describe '#content' do
|
|
89
89
|
it "should delegate to the element's #content_by_name method" do
|
|
90
|
-
element.
|
|
90
|
+
expect(element).to receive(:content_by_name).with(:title)
|
|
91
91
|
subject.content :title
|
|
92
92
|
end
|
|
93
93
|
end
|
|
94
94
|
|
|
95
95
|
describe '#ingredient' do
|
|
96
96
|
it "should delegate to the element's #ingredient method" do
|
|
97
|
-
element.
|
|
97
|
+
expect(element).to receive(:ingredient).with(:title)
|
|
98
98
|
subject.ingredient :title
|
|
99
99
|
end
|
|
100
100
|
end
|
|
101
101
|
|
|
102
102
|
describe '#has?' do
|
|
103
103
|
it "should delegate to the element's #has_ingredient? method" do
|
|
104
|
-
element.
|
|
104
|
+
expect(element).to receive(:has_ingredient?).with(:title)
|
|
105
105
|
subject.has? :title
|
|
106
106
|
end
|
|
107
107
|
end
|
|
108
108
|
|
|
109
109
|
describe '#essence' do
|
|
110
110
|
it "should provide the specified content essence" do
|
|
111
|
-
subject.
|
|
111
|
+
expect(subject).to receive(:content).with(:title).
|
|
112
112
|
and_return(mock_model('Content', :essence => mock_model('EssenceText')))
|
|
113
113
|
|
|
114
114
|
subject.essence :title
|
|
@@ -116,7 +116,7 @@ module Alchemy
|
|
|
116
116
|
end
|
|
117
117
|
end
|
|
118
118
|
|
|
119
|
-
describe ElementsBlockHelper::ElementEditorHelper do
|
|
119
|
+
describe 'ElementsBlockHelper::ElementEditorHelper' do
|
|
120
120
|
let(:scope) { double }
|
|
121
121
|
subject { ElementsBlockHelper::ElementEditorHelper.new(scope, element: element) }
|
|
122
122
|
|
|
@@ -126,7 +126,7 @@ module Alchemy
|
|
|
126
126
|
|
|
127
127
|
describe '#edit' do
|
|
128
128
|
it "should delegate to the render_essence_editor_by_name helper" do
|
|
129
|
-
scope.
|
|
129
|
+
expect(scope).to receive(:render_essence_editor_by_name).with(element, "title", foo: 'bar')
|
|
130
130
|
subject.edit :title, foo: 'bar'
|
|
131
131
|
end
|
|
132
132
|
end
|
|
@@ -8,7 +8,7 @@ module Alchemy
|
|
|
8
8
|
|
|
9
9
|
before do
|
|
10
10
|
assign(:page, page)
|
|
11
|
-
Element.
|
|
11
|
+
allow_any_instance_of(Element).to receive(:store_page).and_return(true)
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
describe '#render_element' do
|
|
@@ -17,21 +17,21 @@ module Alchemy
|
|
|
17
17
|
context 'with nil element' do
|
|
18
18
|
let(:element) { nil }
|
|
19
19
|
let(:part) { :view }
|
|
20
|
-
it {
|
|
20
|
+
it { is_expected.to be_nil }
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
context 'with view as part given' do
|
|
24
24
|
let(:part) {:view}
|
|
25
25
|
|
|
26
26
|
it "renders the element's view partial" do
|
|
27
|
-
|
|
27
|
+
is_expected.to have_selector("##{element.name}_#{element.id}")
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
context 'with element view partial not found' do
|
|
31
31
|
let(:element) { build_stubbed(:element, name: 'not_present')}
|
|
32
32
|
|
|
33
33
|
it "renders the view not found partial" do
|
|
34
|
-
|
|
34
|
+
is_expected.to match(/Missing view for not_present element/)
|
|
35
35
|
end
|
|
36
36
|
end
|
|
37
37
|
end
|
|
@@ -40,7 +40,7 @@ module Alchemy
|
|
|
40
40
|
let(:part) {:editor}
|
|
41
41
|
|
|
42
42
|
it "renders the element's editor partial" do
|
|
43
|
-
helper.
|
|
43
|
+
expect(helper).to receive(:render_essence_editor_by_name)
|
|
44
44
|
subject
|
|
45
45
|
end
|
|
46
46
|
|
|
@@ -48,8 +48,8 @@ module Alchemy
|
|
|
48
48
|
let(:element) { build_stubbed(:element, name: 'not_present')}
|
|
49
49
|
|
|
50
50
|
it "renders the editor not found partial" do
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
is_expected.to have_selector('div.error')
|
|
52
|
+
is_expected.to have_content('Element editor partial not found')
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
55
|
end
|
|
@@ -59,7 +59,7 @@ module Alchemy
|
|
|
59
59
|
subject { helper.element_dom_id(element) }
|
|
60
60
|
|
|
61
61
|
it "should render a unique dom id for element" do
|
|
62
|
-
|
|
62
|
+
is_expected.to eq("#{element.name}_#{element.id}")
|
|
63
63
|
end
|
|
64
64
|
end
|
|
65
65
|
|
|
@@ -73,12 +73,12 @@ module Alchemy
|
|
|
73
73
|
let(:options) { {} }
|
|
74
74
|
|
|
75
75
|
before do
|
|
76
|
-
page.
|
|
76
|
+
expect(page).to receive(:find_elements).and_return(elements)
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
it "should render all elements from page." do
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
is_expected.to have_selector("##{element.name}_#{element.id}")
|
|
81
|
+
is_expected.to have_selector("##{another_element.name}_#{another_element.id}")
|
|
82
82
|
end
|
|
83
83
|
end
|
|
84
84
|
|
|
@@ -88,12 +88,12 @@ module Alchemy
|
|
|
88
88
|
let(:options) { {from_page: another_page} }
|
|
89
89
|
|
|
90
90
|
before do
|
|
91
|
-
another_page.
|
|
91
|
+
expect(another_page).to receive(:find_elements).and_return(elements)
|
|
92
92
|
end
|
|
93
93
|
|
|
94
94
|
it "should render all elements from that page." do
|
|
95
|
-
|
|
96
|
-
|
|
95
|
+
is_expected.to have_selector("##{element.name}_#{element.id}")
|
|
96
|
+
is_expected.to have_selector("##{another_element.name}_#{another_element.id}")
|
|
97
97
|
end
|
|
98
98
|
end
|
|
99
99
|
|
|
@@ -104,15 +104,15 @@ module Alchemy
|
|
|
104
104
|
let(:options) { {from_page: 'news'} }
|
|
105
105
|
|
|
106
106
|
before do
|
|
107
|
-
Language.
|
|
108
|
-
another_page.
|
|
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
109
|
end
|
|
110
110
|
|
|
111
111
|
context 'and one page can be found by page layout' do
|
|
112
112
|
let(:pages) { [another_page] }
|
|
113
113
|
|
|
114
114
|
it "it renders all elements from that page." do
|
|
115
|
-
|
|
115
|
+
is_expected.to have_selector("##{another_element.name}_#{another_element.id}")
|
|
116
116
|
end
|
|
117
117
|
end
|
|
118
118
|
|
|
@@ -120,12 +120,12 @@ module Alchemy
|
|
|
120
120
|
let(:pages) { [page, another_page] }
|
|
121
121
|
|
|
122
122
|
before do
|
|
123
|
-
page.
|
|
123
|
+
expect(page).to receive(:find_elements).and_return(elements)
|
|
124
124
|
end
|
|
125
125
|
|
|
126
126
|
it 'renders elements from these pages' do
|
|
127
|
-
|
|
128
|
-
|
|
127
|
+
is_expected.to have_selector("##{element.name}_#{element.id}")
|
|
128
|
+
is_expected.to have_selector("##{another_element.name}_#{another_element.id}")
|
|
129
129
|
end
|
|
130
130
|
end
|
|
131
131
|
end
|
|
@@ -133,7 +133,7 @@ module Alchemy
|
|
|
133
133
|
|
|
134
134
|
context 'if page is nil' do
|
|
135
135
|
let(:options) { {from_page: nil} }
|
|
136
|
-
it {
|
|
136
|
+
it { is_expected.to be_blank }
|
|
137
137
|
end
|
|
138
138
|
|
|
139
139
|
context 'with sort_by option given' do
|
|
@@ -141,12 +141,12 @@ module Alchemy
|
|
|
141
141
|
let(:sorted_elements) { [another_element, element] }
|
|
142
142
|
|
|
143
143
|
before do
|
|
144
|
-
elements.
|
|
145
|
-
page.
|
|
144
|
+
expect(elements).to receive(:sort_by).and_return(sorted_elements)
|
|
145
|
+
expect(page).to receive(:find_elements).and_return(elements)
|
|
146
146
|
end
|
|
147
147
|
|
|
148
148
|
it "renders the elements in the order of given content name" do
|
|
149
|
-
|
|
149
|
+
is_expected.not_to be_blank
|
|
150
150
|
end
|
|
151
151
|
end
|
|
152
152
|
|
|
@@ -159,12 +159,12 @@ module Alchemy
|
|
|
159
159
|
let(:options) { {fallback: {for: 'higgs', with: 'news', from: 'news'}} }
|
|
160
160
|
|
|
161
161
|
before do
|
|
162
|
-
Language.
|
|
163
|
-
another_page.
|
|
162
|
+
allow(Language).to receive(:current).and_return double(pages: double(find_by: another_page))
|
|
163
|
+
allow(another_page).to receive(:elements).and_return double(named: elements)
|
|
164
164
|
end
|
|
165
165
|
|
|
166
166
|
it "renders the fallback element" do
|
|
167
|
-
|
|
167
|
+
is_expected.to have_selector("#news_#{another_element.id}")
|
|
168
168
|
end
|
|
169
169
|
end
|
|
170
170
|
|
|
@@ -172,11 +172,11 @@ module Alchemy
|
|
|
172
172
|
let(:options) { {fallback: {for: 'higgs', with: 'news', from: another_page}} }
|
|
173
173
|
|
|
174
174
|
before do
|
|
175
|
-
another_page.
|
|
175
|
+
allow(another_page).to receive(:elements).and_return double(named: elements)
|
|
176
176
|
end
|
|
177
177
|
|
|
178
178
|
it "renders the fallback element" do
|
|
179
|
-
|
|
179
|
+
is_expected.to have_selector("#news_#{another_element.id}")
|
|
180
180
|
end
|
|
181
181
|
end
|
|
182
182
|
end
|
|
@@ -185,11 +185,11 @@ module Alchemy
|
|
|
185
185
|
let(:options) { {separator: '<hr>'} }
|
|
186
186
|
|
|
187
187
|
before do
|
|
188
|
-
page.
|
|
188
|
+
expect(page).to receive(:find_elements).and_return(elements)
|
|
189
189
|
end
|
|
190
190
|
|
|
191
191
|
it "joins element partials with given string" do
|
|
192
|
-
|
|
192
|
+
is_expected.to have_selector('hr')
|
|
193
193
|
end
|
|
194
194
|
end
|
|
195
195
|
end
|
|
@@ -201,13 +201,13 @@ module Alchemy
|
|
|
201
201
|
before { assign(:preview_mode, true) }
|
|
202
202
|
|
|
203
203
|
it "should return the data-alchemy-element HTML attribute for element" do
|
|
204
|
-
|
|
204
|
+
is_expected.to eq({:'data-alchemy-element' => element.id})
|
|
205
205
|
end
|
|
206
206
|
end
|
|
207
207
|
|
|
208
208
|
context 'not in preview_mode' do
|
|
209
209
|
it "should return an empty hash" do
|
|
210
|
-
|
|
210
|
+
is_expected.to eq({})
|
|
211
211
|
end
|
|
212
212
|
end
|
|
213
213
|
end
|
|
@@ -219,13 +219,13 @@ module Alchemy
|
|
|
219
219
|
before { assign(:preview_mode, true) }
|
|
220
220
|
|
|
221
221
|
it "should return the data-alchemy-element HTML attribute for element" do
|
|
222
|
-
|
|
222
|
+
is_expected.to eq(" data-alchemy-element=\"#{element.id}\"")
|
|
223
223
|
end
|
|
224
224
|
end
|
|
225
225
|
|
|
226
226
|
context 'not in preview_mode' do
|
|
227
227
|
it "should not return the data-alchemy-element HTML attribute" do
|
|
228
|
-
|
|
228
|
+
is_expected.not_to eq(" data-alchemy-element=\"#{element.id}\"")
|
|
229
229
|
end
|
|
230
230
|
end
|
|
231
231
|
end
|
|
@@ -241,7 +241,7 @@ module Alchemy
|
|
|
241
241
|
|
|
242
242
|
context "with no formatter lambda given" do
|
|
243
243
|
it "should return tag list as HTML data attribute" do
|
|
244
|
-
|
|
244
|
+
is_expected.to eq(" data-element-tags=\"peter lustig\"")
|
|
245
245
|
end
|
|
246
246
|
end
|
|
247
247
|
|
|
@@ -249,13 +249,13 @@ module Alchemy
|
|
|
249
249
|
let(:options) { {formatter: ->(tags) { tags.join ", " }} }
|
|
250
250
|
|
|
251
251
|
it "should return a properly formatted HTML data attribute" do
|
|
252
|
-
|
|
252
|
+
is_expected.to eq(" data-element-tags=\"peter, lustig\"")
|
|
253
253
|
end
|
|
254
254
|
end
|
|
255
255
|
end
|
|
256
256
|
|
|
257
257
|
context "element not having tags" do
|
|
258
|
-
it {
|
|
258
|
+
it { is_expected.to be_blank }
|
|
259
259
|
end
|
|
260
260
|
end
|
|
261
261
|
|
|
@@ -271,13 +271,13 @@ module Alchemy
|
|
|
271
271
|
let(:elements) { [element_1, element_2, element_3] }
|
|
272
272
|
|
|
273
273
|
before do
|
|
274
|
-
element_1.
|
|
275
|
-
element_2.
|
|
276
|
-
element_3.
|
|
274
|
+
expect(element_1).to receive(:content_by_name).and_return(ingredient_b)
|
|
275
|
+
expect(element_2).to receive(:content_by_name).and_return(ingredient_c)
|
|
276
|
+
expect(element_3).to receive(:content_by_name).and_return(ingredient_a)
|
|
277
277
|
end
|
|
278
278
|
|
|
279
279
|
it "sorts the elements by content" do
|
|
280
|
-
|
|
280
|
+
is_expected.to eq [element_3, element_1, element_2]
|
|
281
281
|
end
|
|
282
282
|
|
|
283
283
|
context 'with element not having this content' do
|
|
@@ -285,11 +285,11 @@ module Alchemy
|
|
|
285
285
|
let(:elements) { [element_1, element_2, element_3, element_4] }
|
|
286
286
|
|
|
287
287
|
before do
|
|
288
|
-
element_4.
|
|
288
|
+
expect(element_4).to receive(:content_by_name).and_return(nil)
|
|
289
289
|
end
|
|
290
290
|
|
|
291
291
|
it "puts it at first place" do
|
|
292
|
-
|
|
292
|
+
is_expected.to eq [element_4, element_3, element_1, element_2]
|
|
293
293
|
end
|
|
294
294
|
end
|
|
295
295
|
|
|
@@ -298,11 +298,11 @@ module Alchemy
|
|
|
298
298
|
let(:elements) { [element_1, element_2, element_3, element_4] }
|
|
299
299
|
|
|
300
300
|
before do
|
|
301
|
-
element_4.
|
|
301
|
+
expect(element_4).to receive(:content_by_name).and_return(double(ingredient: nil))
|
|
302
302
|
end
|
|
303
303
|
|
|
304
304
|
it "puts it at first place" do
|
|
305
|
-
|
|
305
|
+
is_expected.to eq [element_4, element_3, element_1, element_2]
|
|
306
306
|
end
|
|
307
307
|
end
|
|
308
308
|
end
|